Merge branch 'master' of github.com:mono/mono
authorJonathan Pobst <monkey@jpobst.com>
Mon, 20 Sep 2010 16:28:39 +0000 (11:28 -0500)
committerJonathan Pobst <monkey@jpobst.com>
Mon, 20 Sep 2010 16:28:39 +0000 (11:28 -0500)
451 files changed:
.gitattributes
configure.in
data/net_4_0/DefaultWsdlHelpGenerator.aspx [new file with mode: 0644]
data/net_4_0/Makefile.am
data/net_4_0/machine.config
data/net_4_0/web.config
eglib/src/Makefile.am
eglib/src/eglib-remap.h
eglib/src/gbytearray.c [new file with mode: 0644]
eglib/src/ghashtable.c
eglib/src/glib.h
eglib/src/goutput.c
eglib/src/gqueue.c
eglib/src/gshell.c
eglib/src/gstr.c
eglib/src/gutf8.c
eglib/test/Makefile.am
eglib/test/shell.c
eglib/test/string-util.c
man/mono.1
mcs/Makefile
mcs/build/library.make
mcs/build/profiles/monodroid.make [new file with mode: 0644]
mcs/build/profiles/monodroid_bootstrap.make [new file with mode: 0644]
mcs/build/profiles/monotouch.make
mcs/build/profiles/monotouch_bootstrap.make
mcs/class/Makefile
mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/Dnd.cs
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/EventLogger.cs
mcs/class/Microsoft.Build.Engine/Makefile
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TargetBatchingImpl.cs
mcs/class/Microsoft.Build.Tasks/Makefile
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/GenerateResource.cs
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Utilities.cs
mcs/class/Microsoft.Build.Utilities/Makefile
mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs
mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs
mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpIsEventBinder.cs
mcs/class/Mono.Data.Sqlite/Assembly/AssemblyInfo.cs
mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs
mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs
mcs/class/Mono.Security/Assembly/AssemblyInfo.cs
mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoTools.cs
mcs/class/Mono.Security/Mono.Security.Cryptography/SymmetricTransform.cs
mcs/class/System.Core/Makefile
mcs/class/System.Core/System/TimeZoneInfo.AdjustmentRule.cs
mcs/class/System.Core/System/TimeZoneInfo.TransitionTime.cs
mcs/class/System.Core/System/TimeZoneInfo.cs
mcs/class/System.Core/mobile_System.Core.dll.sources [new file with mode: 0644]
mcs/class/System.Core/monodroid_System.Core.dll.sources [new file with mode: 0644]
mcs/class/System.Core/monodroid_bootstrap_System.Core.dll.sources [new file with mode: 0644]
mcs/class/System.Core/monotouch_bootstrap_System.Core.dll.sources
mcs/class/System.Data.Linq/Makefile
mcs/class/System.Data.Services/Assembly/AssemblyInfo.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services.csproj [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ChangeInterceptorAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/DataService.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/DataServiceException.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/DataServiceHost.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/DataServiceHostFactory.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ETagAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/EntitySetRights.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ExpandSegment.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ExpandSegmentCollection.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/HandleExceptionArgs.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IDataServiceConfiguration.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IDataServiceHost.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IExpandProvider.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IExpandedResult.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IRequestHandler.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IUpdatable.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/IgnorePropertiesAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/MimeTypeAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ProcessRequestArgs.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/QueryInterceptorAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/ServiceOperationRights.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/SingleResultAttribute.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/System.Data.Services/UpdateOperations.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/ChangeInterceptorAttributeTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/DataServiceExceptionTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/DataServiceTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/ETagAttributeTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/ExpandSegmentCollectionTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/ExpandSegmentTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/IgnorePropertiesAttributeTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/MimeTypeAttributeTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/QueryInterceptorAttributeTests.cs [changed mode: 0755->0644]
mcs/class/System.Data.Services/Test/System.Data.Services.Tests.csproj [changed mode: 0755->0644]
mcs/class/System.Data/Makefile
mcs/class/System.Data/System.Data.Common/DbConnection.cs
mcs/class/System.Data/System.Data.SqlClient/SqlConnection.cs
mcs/class/System.Data/System.Data/XmlSchemaDataImporter.cs
mcs/class/System.Data/mobile_System.Data.dll.sources [new file with mode: 0644]
mcs/class/System.Data/monodroid_System.Data.dll.sources [new file with mode: 0644]
mcs/class/System.Data/monotouch_System.Data.dll.sources
mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs
mcs/class/System.Runtime.Serialization/mobile_System.Runtime.Serialization.dll.sources [new file with mode: 0644]
mcs/class/System.Runtime.Serialization/monodroid_System.Runtime.Serialization.dll.sources [new file with mode: 0644]
mcs/class/System.Runtime.Serialization/monotouch_System.Runtime.Serialization.dll.sources
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/AnnouncementEndpointElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/DiscoveryClientElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/DiscoveryEndpointElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/DiscoveryVersionConverter.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/DynamicEndpointElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/EndpointDiscoveryElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/FindCriteriaElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/UdpAnnouncementEndpointElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/UdpDiscoveryEndpointElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Configuration/UdpTransportSettingsElement.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Udp/UdpDuplexChannel.cs
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.dll.sources
mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery/DiscoveryMessageSequenceGenerator.cs
mcs/class/System.ServiceModel.Web/System.ServiceModel.Channels/WebMessageEncodingBindingElement.cs
mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointCollectionElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointCollectionElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebHttpBehavior.cs
mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebHttpEndpoint.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebScriptEndpoint.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebServiceEndpoint.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources
mcs/class/System.ServiceModel.Web/System.ServiceModel/WebHttpBinding.cs
mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Description/WebHttpEndpointTest.cs [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/Test/config/webHttpBinding.config
mcs/class/System.ServiceModel.Web/common_System.ServiceModel.Web.dll.sources
mcs/class/System.ServiceModel.Web/mobile_System.ServiceModel.Web.dll.sources [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/monodroid_System.ServiceModel.Web.dll.sources [new file with mode: 0644]
mcs/class/System.ServiceModel.Web/monotouch_System.ServiceModel.Web.dll.sources
mcs/class/System.ServiceModel/Dummy_2_1.cs
mcs/class/System.ServiceModel/Makefile
mcs/class/System.ServiceModel/System.ServiceModel.Channels/HttpRequestChannel.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ChannelEndpointElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ConfigUtil.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/EndpointCollectionElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ExtensionsSection.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElementCollection.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingSection.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceEndpointElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceEndpointElementCollection.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointCollectionElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointElement.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceModelSectionGroup.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointCollectionElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointElementCollection.cs
mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointsSection.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.Description/DataContractSerializerMessageContractImporter.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/MessagePartDescription.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceContractGenerator.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceEndpoint.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataEndpoint.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/System.ServiceModel.dll.sources
mcs/class/System.ServiceModel/System.ServiceModel/ServiceHostBase.cs
mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources
mcs/class/System.ServiceModel/Test/System.ServiceModel.Configuration/StandardEndpointsSectionTest.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceMetadataEndpointTest.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs
mcs/class/System.ServiceModel/mobile_System.ServiceModel.dll.sources [new file with mode: 0644]
mcs/class/System.ServiceModel/monodroid_System.ServiceModel.dll.sources [new file with mode: 0644]
mcs/class/System.ServiceModel/monotouch_System.ServiceModel.dll.sources
mcs/class/System.Transactions/Makefile
mcs/class/System.Web.Services/Makefile
mcs/class/System.Web.Services/System.Web.Services.Description/ExtensionManager.cs
mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImporter.cs
mcs/class/System.Web.Services/System.Web.Services.Description/WebReference.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs
mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSoapWebServiceHandler.cs
mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs
mcs/class/System.Web.Services/System.Web.Services.Protocols/ServerType.cs
mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtension.cs
mcs/class/System.Web.Services/System.Web.Services/WebMethodAttribute.cs
mcs/class/System.Web.Services/mobile_System.Web.Services.dll.sources [new file with mode: 0644]
mcs/class/System.Web.Services/monodroid_System.Web.Services.dll.sources [new file with mode: 0644]
mcs/class/System.Web.Services/monotouch_System.Web.Services.dll.sources
mcs/class/System.Web/Assembly/AssemblyInfo.cs
mcs/class/System.Web/Makefile
mcs/class/System.Web/System.Web.UI.WebControls/AdRotator.cs
mcs/class/System.Web/System.Web.UI.WebControls/BaseMenuRenderer.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/IMenuRenderer.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/Menu.cs
mcs/class/System.Web/System.Web.UI.WebControls/MenuListRenderer.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/MenuModern.js [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/MenuTableRenderer.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/NamedCssStyleCollection.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/StyleBlock.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/TreeView.cs
mcs/class/System.Web/System.Web.UI.WebControls/Unit.cs
mcs/class/System.Web/System.Web.UI/Control.cs
mcs/class/System.Web/System.Web.dll.sources
mcs/class/System.Web/System.Web/HttpUtility.cs
mcs/class/System.Web/System.Web_standalone_test.dll.sources
mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs
mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
mcs/class/System.Web/Test/standalone-runner-support/Helpers.cs
mcs/class/System.Web/Test/standalone-tests/Menu_4.0_List.cs [new file with mode: 0644]
mcs/class/System.Web/Test/standalone/Menu_4.0_List/App_Data/MenuData.xml [new file with mode: 0644]
mcs/class/System.Web/Test/standalone/Menu_4.0_List/test_01.aspx [new file with mode: 0644]
mcs/class/System.Web/Test/standalone/Menu_4.0_List/web.config [new file with mode: 0644]
mcs/class/System.Web/net_4_0_System.Web.dll.sources
mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs
mcs/class/System.XML/System.Xml.Schema/XmlSchemaException.cs
mcs/class/System.XML/System.Xml.Serialization/XmlMemberMapping.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializer.cs
mcs/class/System.XML/System.Xml.Xsl/XslCompiledTransform.cs
mcs/class/System.XML/System.Xml/XmlXapResolver.cs
mcs/class/System.XML/mobile_System.Xml.dll.sources [new file with mode: 0644]
mcs/class/System.XML/monodroid_System.Xml.dll.sources [new file with mode: 0644]
mcs/class/System.XML/monotouch_System.Xml.dll.sources
mcs/class/System/Makefile
mcs/class/System/System.ComponentModel/DateTimeOffsetConverter.cs [new file with mode: 0644]
mcs/class/System/System.ComponentModel/TypeConverter.cs
mcs/class/System/System.ComponentModel/TypeDescriptionProvider.cs
mcs/class/System/System.ComponentModel/TypeDescriptor.cs
mcs/class/System/System.Diagnostics/ProcessStartInfo.cs
mcs/class/System/System.Net.Sockets/Socket_2_1.cs
mcs/class/System/System.Net/WebRequest.cs
mcs/class/System/System.dll.sources
mcs/class/System/System/Uri.cs
mcs/class/System/System/UriBuilder.cs
mcs/class/System/System/UriParser.cs
mcs/class/System/System/UriTypeConverter.cs
mcs/class/System/System_test.dll.sources
mcs/class/System/Test/System.ComponentModel/DateTimeOffsetConverterTests.cs [new file with mode: 0644]
mcs/class/System/Test/System.ComponentModel/TypeDescriptionProviderTest.cs [new file with mode: 0644]
mcs/class/System/Test/System.ComponentModel/TypeDescriptorTests.cs
mcs/class/System/Test/System/UriBuilderTest.cs
mcs/class/System/Test/System/UriTest.cs
mcs/class/System/Test/System/UriTest2.cs
mcs/class/System/Test/System/UriTest3.cs
mcs/class/System/mobile_System.dll.sources [new file with mode: 0644]
mcs/class/System/monodroid_System.dll.sources [new file with mode: 0644]
mcs/class/System/monodroid_bootstrap_System.dll.sources [new file with mode: 0644]
mcs/class/System/monotouch_System.dll.sources
mcs/class/System/monotouch_bootstrap_System.dll.sources
mcs/class/aot-compiler/.gitignore [new file with mode: 0644]
mcs/class/corlib/System.Collections.Generic/Comparer.cs
mcs/class/corlib/System.Collections.Generic/EqualityComparer.cs
mcs/class/corlib/System.IO/FileStream.cs
mcs/class/corlib/System.Reflection.Emit/MethodBuilder.cs
mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs
mcs/class/corlib/System.Reflection/Assembly.cs
mcs/class/corlib/System/Type.cs
mcs/class/corlib/Test/System.Reflection.Emit/MethodBuilderTest.cs
mcs/class/corlib/Test/System.Reflection/BinderTests.cs
mcs/class/corlib/monodroid_bootstrap_corlib.dll.sources [new file with mode: 0644]
mcs/class/corlib/monodroid_corlib.dll.sources [new file with mode: 0644]
mcs/class/corlib/monotouch_bootstrap_corlib.dll.sources
mcs/class/corlib/monotouch_corlib.dll.sources
mcs/errors/cs0103-3.cs [new file with mode: 0644]
mcs/errors/cs0135-4.cs [new file with mode: 0644]
mcs/errors/cs0136-6.cs [deleted file]
mcs/errors/cs0136.cs
mcs/errors/cs0154-3.cs
mcs/errors/cs0158-6.cs [new file with mode: 0644]
mcs/errors/cs0159-8.cs [new file with mode: 0644]
mcs/errors/cs0190-2.cs [new file with mode: 0644]
mcs/errors/cs0219-4.cs [new file with mode: 0644]
mcs/errors/cs0236-4.cs [new file with mode: 0644]
mcs/errors/cs0575.cs
mcs/errors/cs0642-11.cs [new file with mode: 0644]
mcs/errors/cs0738-3.cs [new file with mode: 0644]
mcs/errors/cs0844-2.cs
mcs/errors/cs0844-3.cs [new file with mode: 0644]
mcs/errors/cs0844-4.cs [new file with mode: 0644]
mcs/errors/cs0844-5.cs [new file with mode: 0644]
mcs/errors/cs0844.cs
mcs/errors/cs1001-3.cs [new file with mode: 0755]
mcs/errors/cs1001-4.cs [new file with mode: 0644]
mcs/errors/cs1001.cs [new file with mode: 0644]
mcs/errors/cs1010-3.cs [new file with mode: 0644]
mcs/errors/cs1041-2.cs [deleted file]
mcs/errors/cs1041.cs
mcs/errors/cs1056.cs [new file with mode: 0644]
mcs/errors/cs1510-5.cs [new file with mode: 0644]
mcs/errors/cs1525-17.cs [new file with mode: 0644]
mcs/errors/cs1525-18.cs [new file with mode: 0644]
mcs/errors/cs1525-19.cs [new file with mode: 0644]
mcs/errors/cs1525-20.cs [new file with mode: 0644]
mcs/errors/cs1525-21.cs [new file with mode: 0644]
mcs/errors/cs1525-9.cs
mcs/errors/cs1620-4.cs [new file with mode: 0644]
mcs/errors/cs1674-4.cs [new file with mode: 0644]
mcs/errors/dcs0826.cs [new file with mode: 0644]
mcs/errors/gcs0103-5.cs [new file with mode: 0644]
mcs/errors/gcs0412-2.cs
mcs/errors/gcs0412-3.cs
mcs/errors/gcs0412.cs
mcs/errors/gcs0458-8.cs [new file with mode: 0644]
mcs/errors/gcs1041.cs [deleted file]
mcs/errors/gcs1525-3.cs [deleted file]
mcs/errors/known-issues-dmcs
mcs/errors/known-issues-gmcs
mcs/mcs/anonymous.cs
mcs/mcs/argument.cs
mcs/mcs/assign.cs
mcs/mcs/attribute.cs
mcs/mcs/class.cs
mcs/mcs/codegen.cs
mcs/mcs/const.cs
mcs/mcs/context.cs
mcs/mcs/convert.cs
mcs/mcs/cs-parser.jay
mcs/mcs/cs-tokenizer.cs
mcs/mcs/decl.cs
mcs/mcs/delegate.cs
mcs/mcs/doc.cs
mcs/mcs/driver.cs
mcs/mcs/dynamic.cs
mcs/mcs/ecore.cs
mcs/mcs/eval.cs
mcs/mcs/expression.cs
mcs/mcs/field.cs
mcs/mcs/flowanalysis.cs
mcs/mcs/generic.cs
mcs/mcs/import.cs
mcs/mcs/iterators.cs
mcs/mcs/lambda.cs
mcs/mcs/linq.cs
mcs/mcs/membercache.cs
mcs/mcs/method.cs
mcs/mcs/namespace.cs
mcs/mcs/nullable.cs
mcs/mcs/parameter.cs
mcs/mcs/pending.cs
mcs/mcs/property.cs
mcs/mcs/rootcontext.cs
mcs/mcs/roottypes.cs
mcs/mcs/statement.cs
mcs/mcs/typemanager.cs
mcs/mcs/typespec.cs
mcs/mcs/visit.cs
mcs/tests/dtest-003.cs
mcs/tests/dtest-008.cs
mcs/tests/dtest-017.cs
mcs/tests/dtest-027.cs
mcs/tests/dtest-028.cs
mcs/tests/dtest-030.cs [new file with mode: 0644]
mcs/tests/dtest-collectioninit-01.cs [new file with mode: 0644]
mcs/tests/dtest-etree-01.cs [new file with mode: 0644]
mcs/tests/gtest-078.cs
mcs/tests/gtest-165.cs [deleted file]
mcs/tests/gtest-409.cs
mcs/tests/gtest-536.cs [new file with mode: 0644]
mcs/tests/gtest-538.cs [new file with mode: 0644]
mcs/tests/gtest-539.cs [new file with mode: 0644]
mcs/tests/gtest-anon-50.cs
mcs/tests/gtest-lambda-26.cs [new file with mode: 0644]
mcs/tests/gtest-linq-25.cs [new file with mode: 0644]
mcs/tests/test-298.cs [new file with mode: 0644]
mcs/tests/test-424.cs
mcs/tests/test-467.cs [deleted file]
mcs/tests/test-480.cs
mcs/tests/test-496.cs [deleted file]
mcs/tests/test-525.cs
mcs/tests/test-541.cs
mcs/tests/test-579.cs
mcs/tests/test-629.cs [deleted file]
mcs/tests/test-645.cs [deleted file]
mcs/tests/test-801.cs [new file with mode: 0644]
mcs/tests/test-anon-31.cs
mcs/tests/test-anon-35.cs
mcs/tests/test-anon-45.cs
mcs/tests/test-anon-97.cs [new file with mode: 0644]
mcs/tests/test-iter-14.cs [new file with mode: 0644]
mcs/tests/test-iter-15.cs [new file with mode: 0644]
mcs/tests/test-iter-16.cs [new file with mode: 0644]
mcs/tests/test-iter-17.cs [new file with mode: 0644]
mcs/tests/test-iter-18.cs [new file with mode: 0644]
mcs/tests/test-iter-19.cs [new file with mode: 0644]
mcs/tests/test-iter-20.cs [new file with mode: 0644]
mcs/tests/test-iter-21.cs [new file with mode: 0644]
mcs/tests/test-iter-22.cs [new file with mode: 0644]
mcs/tests/ver-il-dmcs.xml
mcs/tests/ver-il-gmcs.xml
mcs/tools/Makefile
mcs/tools/mdoc/Makefile
mcs/tools/mdoc/Mono.Documentation/monodocer.cs
mcs/tools/mdoc/Test/en.expected.importslashdoc/Mono.DocTest.Generic/Func`2.xml
mcs/tools/mdoc/Test/en.expected.since/Mono.DocTest.Generic/Func`2.xml
mcs/tools/mdoc/Test/en.expected/Mono.DocTest.Generic/Func`2.xml
mcs/tools/mdoc/Test/html.expected/Mono.DocTest.Generic/Func`2.html
mcs/tools/mdoc/Test/msxdoc-expected.importslashdoc.xml
mcs/tools/xbuild/Makefile
mono-core.spec.in
mono/dis/main.c
mono/io-layer/processes.c
mono/io-layer/shared.c
mono/metadata/Makefile.am
mono/metadata/appdomain.c
mono/metadata/assembly.c
mono/metadata/boehm-gc.c
mono/metadata/domain.c
mono/metadata/monitor.c
mono/metadata/mono-debug.c
mono/metadata/pedump.c
mono/metadata/profiler.h
mono/metadata/sgen-cardtable.c
mono/metadata/sgen-cardtable.h
mono/metadata/sgen-gc.c
mono/metadata/sgen-gc.h
mono/metadata/sgen-marksweep.c
mono/metadata/sgen-workers.c
mono/metadata/threads-types.h
mono/metadata/threads.c
mono/metadata/threads.h
mono/metadata/verify.c
mono/mini/ChangeLog
mono/mini/Makefile.am
mono/mini/cpu-x86.md
mono/mini/debugger-agent.c
mono/mini/driver.c
mono/mini/mini-x86.c
mono/mini/mini.c
mono/profiler/mono-profiler-logging.c
mono/tests/.gitattributes
mono/tests/verifier/.gitattributes
mono/tests/verifier/unverifiable_fallout_of_finally_block.il
mono/utils/Makefile.am
mono/utils/mono-dl-fallback.h [new file with mode: 0644]
mono/utils/mono-dl.c
mono/utils/mono-dl.h
mono/utils/mono-embed.c [new file with mode: 0644]
mono/utils/mono-embed.h
mono/utils/mono-sigcontext.h
msvc/eglib.vcxproj [new file with mode: 0644]
msvc/genmdesc.vcxproj [new file with mode: 0644]
msvc/libgc.vcxproj [new file with mode: 0644]
msvc/libmono.vcxproj [new file with mode: 0644]
msvc/libtest.vcxproj [new file with mode: 0644]
msvc/mono.def
msvc/mono.sln
msvc/mono.vcxproj [new file with mode: 0644]
msvc/monodiet.vcxproj [new file with mode: 0644]
msvc/monodis.vcxproj [new file with mode: 0644]
msvc/monograph.vcxproj [new file with mode: 0644]
msvc/monoposixhelper.vcxproj [new file with mode: 0644]
msvc/pedump.vcxproj [new file with mode: 0644]
msvc/profiler-cov.vcxproj [new file with mode: 0644]
msvc/profiler-logging.vcxproj [new file with mode: 0644]
msvc/test-invoke.vcxproj [new file with mode: 0644]
msvc/test-metadata.vcxproj [new file with mode: 0644]
msvc/test_eglib.vcxproj [new file with mode: 0644]
msvc/teste.vcxproj [new file with mode: 0644]
runtime/Makefile.am
scripts/.gitignore
scripts/Makefile.am

index 9bce5208ff0139c21c5e5faf2c45f0e60266c352..c2ffa053adac2b22d6813980b97da96b9f14d4fd 100644 (file)
@@ -6,6 +6,7 @@ configure.in crlf=input
 *.h    crlf
 *.cs   crlf
 *.sh   crlf
+*.il   crlf
 
 .gitattributes crlf
 ChangeLog      crlf
index 0bc49f1cc52e514838cae38f1aa75330fd722ce9..2d5a9fec22e8caacec16851b12b94db2db9fbfc2 100644 (file)
@@ -621,17 +621,23 @@ AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage i
 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
 
 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
+AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
 
 if test "x$enable_static" = "xno"; then
    with_static_mono=no
 fi
 
+if test "x$enable_shared" = "xno"; then
+   with_shared_mono=no
+fi
+
 if test "x$host_win32" = "xyes"; then
    # Boehm GC requires the runtime to be in its own dll
    with_static_mono=no
 fi
 
 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
+AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
 
 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
@@ -666,7 +672,7 @@ DISABLED_FEATURES=none
 
 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug,
-     reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, normalization.],
+     reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, normalization, assembly_remapping.],
 [
        for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
                eval "mono_feature_disable_$feature='yes'"
@@ -786,6 +792,11 @@ if test "x$mono_feature_disable_normalization" = "xyes"; then
        AC_MSG_NOTICE([Disabled String normalization support.])
 fi
 
+if test "x$mono_feature_disable_assembly_remapping" = "xyes"; then
+       AC_DEFINE(DISABLE_ASSEMBLY_REMAPPING, 1, [Disable assembly remapping.])
+       AC_MSG_NOTICE([Disabled Assembly remapping.])
+fi
+
 AC_MSG_CHECKING(for visibility __attribute__)
 AC_TRY_COMPILE([], [
    void __attribute__ ((visibility ("hidden"))) doit (void) {}
@@ -2485,6 +2496,11 @@ if test "x$try_mono_debugger" = "xyes"; then
        fi
 fi
 
+# disable the debugger entirely when building with moonlight
+if test "x$with_moonlight" != "xno"; then
+       mono_debugger_supported=no
+fi
+
 AC_MSG_CHECKING(if the Mono Debugger is supported on this platform)
 if test "x$mono_debugger_supported" = "xyes"; then
        BOEHM_DEFINES="$BOEHM_DEFINES -DMONO_DEBUGGER_SUPPORTED"
@@ -2551,7 +2567,8 @@ esac
 
 #AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0 FX (defaults to yes)],                 [], [with_profile2=yes])
 AC_ARG_WITH(profile4,  [  --with-profile4=yes,no          If you want to install the 4.0 FX (defaults to yes)],                  [], [with_profile4=yes])
-AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the raw MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
+AC_ARG_WITH(monodroid, [  --with-monodroid=yes,no         If you want to build the MonoDroid 2.1 assemblies (defaults to no)], [], [with_monodroid=no])
+AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
 
 OPROFILE=no
 AC_ARG_WITH(oprofile,[  --with-oprofile=no,<oprofile install dir>   Enable oprofile support (defaults to no)],[
@@ -2583,13 +2600,11 @@ AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the
        fi
 ])
 
+MOONLIGHT_DEFINES=
 AC_ARG_WITH(moonlight, [  --with-moonlight=yes|no|only         If you want to build Mono for Moonlight (defaults to no)],[
-       if test "x$with_moonlight" = "xyes"; then
-               AC_DEFINE(MOONLIGHT,1,[Building for Moonlight])
-       elif test "x$with_moonlight" = "xonly"; then
-               AC_DEFINE(MOONLIGHT,1,[Building for Moonlight])
-       fi
+        MOONLIGHT_DEFINES="-DMOONLIGHT -DDISABLE_ASSEMBLY_REMAPPING"
 ], [with_moonlight=no])
+AC_SUBST(MOONLIGHT_DEFINES)
 
 
 
@@ -2620,6 +2635,7 @@ libmono_ldflags="$libmono_ldflags $LIBS"
 AM_CONDITIONAL(MOONLIGHT, [test "x$with_moonlight" != "xno"])
 AM_CONDITIONAL(ONLY_MOONLIGHT, [test "x$with_moonlight" = "xonly"])
 AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
+AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" = xyes])
 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" = xyes])
 
 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
@@ -2972,6 +2988,7 @@ echo "
 
     Libraries:
        Moon Profile:  $with_moonlight
+       MonoDroid:     $with_monodroid
        MonoTouch:     $with_monotouch
        JNI support:   $jdk_headers_found
        libgdiplus:    $libgdiplus_msg
diff --git a/data/net_4_0/DefaultWsdlHelpGenerator.aspx b/data/net_4_0/DefaultWsdlHelpGenerator.aspx
new file mode 100644 (file)
index 0000000..4750b01
--- /dev/null
@@ -0,0 +1,1896 @@
+<%--
+//
+// DefaultWsdlHelpGenerator.aspx: 
+//
+// Author:
+//   Lluis Sanchez Gual (lluis@ximian.com)
+//
+// (C) 2003 Ximian, Inc.  http://www.ximian.com
+//
+--%>
+
+<%@ Import Namespace="System.Collections" %>
+<%@ Import Namespace="System.Collections.Generic" %>
+<%@ Import Namespace="System.IO" %>
+<%@ Import Namespace="System.Xml.Serialization" %>
+<%@ Import Namespace="System.Xml" %>
+<%@ Import Namespace="System.Xml.Schema" %>
+<%@ Import Namespace="System.Web.Services" %>
+<%@ Import Namespace="System.Web.Services.Description" %>
+<%@ Import Namespace="System.Web.Services.Configuration" %>
+<%@ Import Namespace="System.Web.Configuration" %>
+<%@ Import Namespace="System" %>
+<%@ Import Namespace="System.Net" %>
+<%@ Import Namespace="System.Globalization" %>
+<%@ Import Namespace="System.Resources" %>
+<%@ Import Namespace="System.Diagnostics" %>
+<%@ Import Namespace="System.CodeDom" %>
+<%@ Import Namespace="System.CodeDom.Compiler" %>
+<%@ Import Namespace="Microsoft.CSharp" %>
+<%@ Import Namespace="Microsoft.VisualBasic" %>
+<%@ Import Namespace="System.Text" %>
+<%@ Import Namespace="System.Text.RegularExpressions" %>
+<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
+<%@ Assembly name="System.Web.Services" %>
+<%@ Page debug="true" %>
+
+<html>
+<script language="C#" runat="server">
+
+ServiceDescriptionCollection descriptions;
+XmlSchemas schemas;
+
+string WebServiceName;
+string WebServiceDescription;
+string PageName;
+
+string DefaultBinding;
+ArrayList ServiceProtocols;
+
+string CurrentOperationName;
+string CurrentOperationBinding;
+string OperationDocumentation;
+string CurrentOperationFormat;
+bool CurrentOperationSupportsTest;
+ArrayList InParams;
+ArrayList OutParams;
+string CurrentOperationProtocols;
+int CodeTextColumns = 95;
+BasicProfileViolationCollection ProfileViolations;
+
+void Page_Load(object sender, EventArgs e)
+{
+       descriptions = (ServiceDescriptionCollection) Context.Items["wsdls"];
+       schemas = (XmlSchemas) Context.Items["schemas"];
+
+       ServiceDescription desc = descriptions [0];
+       if (schemas.Count == 0) schemas = desc.Types.Schemas;
+       
+       Service service = desc.Services[0];
+       WebServiceName = service.Name;
+       if (desc.Bindings.Count == 0)
+               return;
+       
+       DefaultBinding = desc.Bindings[0].Name;
+       WebServiceDescription = service.Documentation;
+       if (WebServiceDescription == "" || WebServiceDescription == null)
+               WebServiceDescription = "Description has not been provided";
+       ServiceProtocols = FindServiceProtocols (null);
+       
+       CurrentOperationName = Request.QueryString["op"];
+       CurrentOperationBinding = Request.QueryString["bnd"];
+       if (CurrentOperationName != null) BuildOperationInfo ();
+
+       PageName = HttpUtility.UrlEncode (Path.GetFileName(Request.Path), Encoding.UTF8);
+
+       ArrayList list = new ArrayList ();
+       foreach (ServiceDescription sd in descriptions) {
+               foreach (Binding bin in sd.Bindings)
+                       if (bin.Extensions.Find (typeof(SoapBinding)) != null) list.Add (bin);
+       }
+
+       BindingsRepeater.DataSource = list;
+       Page.DataBind();
+       
+       ProfileViolations = new BasicProfileViolationCollection ();
+       foreach (WsiProfilesElement claims in ((WebServicesSection) WebConfigurationManager.GetSection("system.web/webServices")).ConformanceWarnings)
+               if (claims.Name != WsiProfiles.None)
+                       WebServicesInteroperability.CheckConformance (claims.Name, descriptions, ProfileViolations);
+}
+
+void BuildOperationInfo ()
+{
+       InParams = new ArrayList ();
+       OutParams = new ArrayList ();
+       
+       Port port = FindPort (CurrentOperationBinding, null);
+       Binding binding = descriptions.GetBinding (port.Binding);
+       
+       PortType portType = descriptions.GetPortType (binding.Type);
+       Operation oper = FindOperation (portType, CurrentOperationName);
+       
+       OperationDocumentation = oper.Documentation;
+       if (OperationDocumentation == null || OperationDocumentation == "")
+               OperationDocumentation = "No additional remarks";
+       
+       foreach (OperationMessage opm in oper.Messages)
+       {
+               if (opm is OperationInput)
+                       BuildParameters (InParams, opm);
+               else if (opm is OperationOutput)
+                       BuildParameters (OutParams, opm);
+       }
+       
+       // Protocols supported by the operation
+       CurrentOperationProtocols = "";
+       WebServiceProtocols testProtocols = 0;
+       ArrayList prots = FindServiceProtocols (CurrentOperationName);
+       for (int n=0; n<prots.Count; n++) {
+               string prot = (string) prots [n];
+               if (n != 0) CurrentOperationProtocols += ", ";
+               CurrentOperationProtocols += prot;
+               if (prot == "HttpGet")
+                       testProtocols |= WebServiceProtocols.HttpGet;
+               else if (prot == "HttpPost") {
+                       testProtocols |= WebServiceProtocols.HttpPost;
+                       if (Context.Request.IsLocal)
+                               testProtocols |= WebServiceProtocols.HttpPostLocalhost;
+               }
+       }
+       CurrentOperationSupportsTest = (WebServicesSection.Current.EnabledProtocols & testProtocols) != 0;
+
+       // Operation format
+       OperationBinding obin = FindOperation (binding, CurrentOperationName);
+       if (obin != null)
+               CurrentOperationFormat = GetOperationFormat (obin);
+
+       InputParamsRepeater.DataSource = InParams;
+       InputFormParamsRepeater.DataSource = InParams;
+       OutputParamsRepeater.DataSource = OutParams;
+}
+
+void BuildParameters (ArrayList list, OperationMessage opm)
+{
+       Message msg = descriptions.GetMessage (opm.Message);
+       if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+       {
+               MessagePart part = msg.Parts[0];
+               XmlSchemaComplexType ctype;
+               if (part.Element == XmlQualifiedName.Empty)
+               {
+                       ctype = (XmlSchemaComplexType) schemas.Find (part.Type, typeof(XmlSchemaComplexType));
+               }
+               else
+               {
+                       XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+                       ctype = (XmlSchemaComplexType) elem.SchemaType;
+               }
+               XmlSchemaSequence seq = ctype.Particle as XmlSchemaSequence;
+               if (seq == null) return;
+               
+               foreach (XmlSchemaObject ob in seq.Items)
+               {
+                       Parameter p = new Parameter();
+                       p.Description = "No additional remarks";
+                       
+                       if (ob is XmlSchemaElement)
+                       {
+                               XmlSchemaElement selem = GetRefElement ((XmlSchemaElement)ob);
+                               p.Name = selem.Name;
+                               p.Type = selem.SchemaTypeName.Name;
+                       }
+                       else
+                       {
+                               p.Name = "Unknown";
+                               p.Type = "Unknown";
+                       }
+                       list.Add (p);
+               }
+       }
+       else
+       {
+               foreach (MessagePart part in msg.Parts)
+               {
+                       Parameter p = new Parameter ();
+                       p.Description = "No additional remarks";
+                       p.Name = part.Name;
+                       if (part.Element == XmlQualifiedName.Empty)
+                               p.Type = part.Type.Name;
+                       else
+                       {
+                               XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+                               p.Type = elem.SchemaTypeName.Name;
+                       }
+                       list.Add (p);
+               }
+       }
+}
+
+string GetOperationFormat (OperationBinding obin)
+{
+       string format = "";
+       SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+       if (sob != null) {
+               format = sob.Style.ToString ();
+               SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+               if (sbb != null)
+                       format += " / " + sbb.Use;
+       }
+       return format;
+}
+
+XmlSchemaElement GetRefElement (XmlSchemaElement elem)
+{
+       if (!elem.RefName.IsEmpty)
+               return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+       else
+               return elem;
+}
+
+ArrayList FindServiceProtocols(string operName)
+{
+       ArrayList table = new ArrayList ();
+       Service service = descriptions[0].Services[0];
+       foreach (Port port in service.Ports)
+       {
+               string prot = null;
+               Binding bin = descriptions.GetBinding (port.Binding);
+               if (bin.Extensions.Find (typeof(SoapBinding)) != null)
+                       prot = "Soap";
+               else 
+               {
+                       HttpBinding hb = (HttpBinding) bin.Extensions.Find (typeof(HttpBinding));
+                       if (hb != null && hb.Verb == "POST") prot = "HttpPost";
+                       else if (hb != null && hb.Verb == "GET") prot = "HttpGet";
+               }
+               
+               if (prot != null && operName != null)
+               {
+                       if (FindOperation (bin, operName) == null)
+                               prot = null;
+               }
+
+               if (prot != null && !table.Contains (prot))
+                       table.Add (prot);
+       }
+       return table;
+}
+
+Port FindPort (string portName, string protocol)
+{
+       Service service = descriptions[0].Services[0];
+       foreach (Port port in service.Ports)
+       {
+               if (portName == null)
+               {
+                       Binding binding = descriptions.GetBinding (port.Binding);
+                       if (GetProtocol (binding) == protocol) return port;
+               }
+               else if (port.Name == portName)
+                       return port;
+       }
+       return null;
+}
+
+string GetProtocol (Binding binding)
+{
+       if (binding.Extensions.Find (typeof(SoapBinding)) != null) return "Soap";
+       HttpBinding hb = (HttpBinding) binding.Extensions.Find (typeof(HttpBinding));
+       if (hb == null) return "";
+       if (hb.Verb == "POST") return "HttpPost";
+       if (hb.Verb == "GET") return "HttpGet";
+       return "";
+}
+
+
+Operation FindOperation (PortType portType, string name)
+{
+       foreach (Operation oper in portType.Operations) {
+               if (oper.Messages.Input.Name != null) {
+                       if (oper.Messages.Input.Name == name) return oper;
+               }
+               else
+                       if (oper.Name == name) return oper;
+       }
+               
+       return null;
+}
+
+OperationBinding FindOperation (Binding binding, string name)
+{
+       foreach (OperationBinding oper in binding.Operations) {
+               if (oper.Input.Name != null) {
+                       if (oper.Input.Name == name) return oper;
+               }
+               else 
+                       if (oper.Name == name) return oper;
+       }
+               
+       return null;
+}
+
+string FormatBindingName (string name)
+{
+       if (name == DefaultBinding) return "Methods";
+       else return "Methods for binding<br>" + name;
+}
+
+string GetOpName (object op)
+{
+       OperationBinding ob = op as OperationBinding;
+       if (ob == null) return "";
+       if (ob.Input.Name != null) return ob.Input.Name;
+       else return ob.Name;
+}
+
+bool HasFormResult
+{
+       get { return Request.QueryString ["ext"] == "testform"; }
+}
+
+class NoCheckCertificatePolicy : ICertificatePolicy {
+       public bool CheckValidationResult (ServicePoint a, X509Certificate b, WebRequest c, int d)
+       {
+               return true;
+       }
+}
+
+string GetOrPost ()
+{
+       return (CurrentOperationProtocols.IndexOf ("HttpGet") >= 0) ? "GET" : "POST";
+}
+
+string GetQS ()
+{
+       bool fill = false;
+       string qs = "";
+       NameValueCollection query_string = Request.QueryString;
+       for (int n = 0; n < query_string.Count; n++) {
+               if (fill) {
+                       if (qs != "") qs += "&";
+                       qs += query_string.GetKey(n) + "=" + Server.UrlEncode (query_string [n]);
+               }
+               if (query_string.GetKey(n) == "ext") fill = true;
+       }
+
+       return qs;
+}
+
+string GetTestResultUrl ()
+{ 
+       if (!HasFormResult) return "";
+       
+       string location = null;
+       ServiceDescription desc = descriptions [0];
+       Service service = desc.Services[0];
+       foreach (Port port in service.Ports)
+               if (port.Name == CurrentOperationBinding)
+               {
+                       SoapAddressBinding sbi = (SoapAddressBinding) port.Extensions.Find (typeof(SoapAddressBinding));
+                       if (sbi != null)
+                               location = sbi.Location;
+               }
+
+       if (location == null) 
+               return "Could not locate web service";
+       
+       return location + "/" + CurrentOperationName;
+}
+
+string GenerateOperationMessages (string protocol, bool generateInput)
+{
+       if (!IsOperationSupported (protocol)) return "";
+       
+       Port port;
+       if (protocol != "Soap") port = FindPort (null, protocol);
+       else port = FindPort (CurrentOperationBinding, null);
+       
+       Binding binding = descriptions.GetBinding (port.Binding);
+       OperationBinding obin = FindOperation (binding, CurrentOperationName);
+       PortType portType = descriptions.GetPortType (binding.Type);
+       Operation oper = FindOperation (portType, CurrentOperationName);
+       
+       HtmlSampleGenerator sg = new HtmlSampleGenerator (descriptions, schemas);
+       string txt = sg.GenerateMessage (port, obin, oper, protocol, generateInput);
+       if (protocol == "Soap") txt = WrapText (txt,CodeTextColumns);
+       txt = ColorizeXml (txt);
+       txt = txt.Replace ("@placeholder!","<span class='literal-placeholder'>");
+       txt = txt.Replace ("!placeholder@","</span>");
+       return txt;
+}
+
+bool IsOperationSupported (string protocol)
+{
+       if (CurrentPage != "op" || CurrentTab != "msg") return false;
+       if (protocol == "Soap") return true;
+
+       Port port = FindPort (null, protocol);
+       if (port == null) return false;
+       Binding binding = descriptions.GetBinding (port.Binding);
+       if (binding == null) return false;
+       return FindOperation (binding, CurrentOperationName) != null;
+}
+
+//
+// Proxy code generation
+//
+
+string GetProxyCode ()
+{
+       CodeNamespace codeNamespace = new CodeNamespace();
+       CodeCompileUnit codeUnit = new CodeCompileUnit();
+       
+       codeUnit.Namespaces.Add (codeNamespace);
+
+       ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
+       
+       foreach (ServiceDescription sd in descriptions)
+               importer.AddServiceDescription(sd, null, null);
+
+       foreach (XmlSchema sc in schemas)
+               importer.Schemas.Add (sc);
+
+       importer.Import(codeNamespace, codeUnit);
+
+       string langId = Request.QueryString ["lang"];
+       if (langId == null || langId == "") langId = "cs";
+       CodeDomProvider provider = GetProvider (langId);
+       ICodeGenerator generator = provider.CreateGenerator();
+       CodeGeneratorOptions options = new CodeGeneratorOptions();
+       
+       StringWriter sw = new StringWriter ();
+       generator.GenerateCodeFromCompileUnit(codeUnit, sw, options);
+
+       return Colorize (WrapText (sw.ToString (), CodeTextColumns), langId);
+}
+
+public string CurrentLanguage
+{
+       get {
+               string langId = Request.QueryString ["lang"];
+               if (langId == null || langId == "") langId = "cs";
+               return langId;
+       }
+}
+
+public string CurrentProxytName
+{
+       get {
+               string lan = CurrentLanguage == "cs" ? "C#" : "Visual Basic";
+               return lan + " Client Proxy";
+       }
+}
+
+private CodeDomProvider GetProvider(string langId)
+{
+       switch (langId.ToUpper())
+       {
+               case "CS": return new CSharpCodeProvider();
+               case "VB": return new VBCodeProvider();
+               default: return null;
+       }
+}
+
+//
+// Document generation
+//
+
+string GenerateDocument ()
+{
+       StringWriter sw = new StringWriter ();
+       
+       if (CurrentDocType == "wsdl")
+               descriptions [CurrentDocInd].Write (sw);
+       else if (CurrentDocType == "schema")
+               schemas [CurrentDocInd].Write (sw);
+               
+       return Colorize (WrapText (sw.ToString (), CodeTextColumns), "xml");
+}
+
+public string CurrentDocType
+{
+       get { return Request.QueryString ["doctype"] != null ? Request.QueryString ["doctype"] : "wsdl"; }
+}
+
+public int CurrentDocInd
+{
+       get { return Request.QueryString ["docind"] != null ? int.Parse (Request.QueryString ["docind"]) : 0; }
+}
+
+public string CurrentDocumentName
+{
+       get {
+               if (CurrentDocType == "wsdl")
+                       return "WSDL document for namespace \"" + descriptions [CurrentDocInd].TargetNamespace + "\"";
+               else
+                       return "Xml Schema for namespace \"" + schemas [CurrentDocInd].TargetNamespace + "\"";
+       }
+}
+
+//
+// Pages and tabs
+//
+
+bool firstTab = true;
+ArrayList disabledTabs = new ArrayList ();
+
+string CurrentTab
+{
+       get { return Request.QueryString["tab"] != null ? Request.QueryString["tab"] : "main" ; }
+}
+
+string CurrentPage
+{
+       get { return Request.QueryString["page"] != null ? Request.QueryString["page"] : "main" ; }
+}
+
+void WriteTabs ()
+{
+       if (CurrentOperationName != null)
+       {
+               WriteTab ("main","Overview");
+               WriteTab ("test","Test Form");
+               WriteTab ("msg","Message Layout");
+       }
+}
+
+void WriteTab (string id, string label)
+{
+       if (!firstTab) Response.Write("&nbsp;|&nbsp;");
+       firstTab = false;
+       
+       string cname = CurrentTab == id ? "tabLabelOn" : "tabLabelOff";
+       Response.Write ("<a href='" + PageName + "?" + GetPageContext(null) + GetDataContext() + "tab=" + id + "' style='text-decoration:none'>");
+       Response.Write ("<span class='" + cname + "'>" + label + "</span>");
+       Response.Write ("</a>");
+}
+
+string GetTabContext (string pag, string tab)
+{
+       if (tab == null) tab = CurrentTab;
+       if (pag == null) pag = CurrentPage;
+       if (pag != CurrentPage) tab = "main";
+       return "page=" + pag + "&tab=" + tab + "&"; 
+}
+
+string GetPageContext (string pag)
+{
+       if (pag == null) pag = CurrentPage;
+       return "page=" + pag + "&"; 
+}
+
+class Tab
+{
+       public string Id;
+       public string Label;
+}
+
+//
+// Syntax coloring
+//
+
+static string keywords_cs =
+       "(\\babstract\\b|\\bevent\\b|\\bnew\\b|\\bstruct\\b|\\bas\\b|\\bexplicit\\b|\\bnull\\b|\\bswitch\\b|\\bbase\\b|\\bextern\\b|" +
+       "\\bobject\\b|\\bthis\\b|\\bbool\\b|\\bfalse\\b|\\boperator\\b|\\bthrow\\b|\\bbreak\\b|\\bfinally\\b|\\bout\\b|\\btrue\\b|" +
+       "\\bbyte\\b|\\bfixed\\b|\\boverride\\b|\\btry\\b|\\bcase\\b|\\bfloat\\b|\\bparams\\b|\\btypeof\\b|\\bcatch\\b|\\bfor\\b|" +
+       "\\bprivate\\b|\\buint\\b|\\bchar\\b|\\bforeach\\b|\\bprotected\\b|\\bulong\\b|\\bchecked\\b|\\bgoto\\b|\\bpublic\\b|" +
+       "\\bunchecked\\b|\\bclass\\b|\\bif\\b|\\breadonly\\b|\\bunsafe\\b|\\bconst\\b|\\bimplicit\\b|\\bref\\b|\\bushort\\b|" +
+       "\\bcontinue\\b|\\bin\\b|\\breturn\\b|\\busing\\b|\\bdecimal\\b|\\bint\\b|\\bsbyte\\b|\\bvirtual\\b|\\bdefault\\b|" +
+       "\\binterface\\b|\\bsealed\\b|\\bvolatile\\b|\\bdelegate\\b|\\binternal\\b|\\bshort\\b|\\bvoid\\b|\\bdo\\b|\\bis\\b|" +
+       "\\bsizeof\\b|\\bwhile\\b|\\bdouble\\b|\\block\\b|\\bstackalloc\\b|\\belse\\b|\\blong\\b|\\bstatic\\b|\\benum\\b|" +
+       "\\bnamespace\\b|\\bstring\\b)";
+
+static string keywords_vb =
+       "(\\bAddHandler\\b|\\bAddressOf\\b|\\bAlias\\b|\\bAnd\\b|\\bAndAlso\\b|\\bAnsi\\b|\\bAs\\b|\\bAssembly\\b|" +
+       "\\bAuto\\b|\\bBoolean\\b|\\bByRef\\b|\\bByte\\b|\\bByVal\\b|\\bCall\\b|\\bCase\\b|\\bCatch\\b|" +
+       "\\bCBool\\b|\\bCByte\\b|\\bCChar\\b|\\bCDate\\b|\\bCDec\\b|\\bCDbl\\b|\\bChar\\b|\\bCInt\\b|" +
+       "\\bClass\\b|\\bCLng\\b|\\bCObj\\b|\\bConst\\b|\\bCShort\\b|\\bCSng\\b|\\bCStr\\b|\\bCType\\b|" +
+       "\\bDate\\b|\\bDecimal\\b|\\bDeclare\\b|\\bDefault\\b|\\bDelegate\\b|\\bDim\\b|\\bDirectCast\\b|\\bDo\\b|" +
+       "\\bDouble\\b|\\bEach\\b|\\bElse\\b|\\bElseIf\\b|\\bEnd\\b|\\bEnum\\b|\\bErase\\b|\\bError\\b|" +
+       "\\bEvent\\b|\\bExit\\b|\\bFalse\\b|\\bFinally\\b|\\bFor\\b|\\bFriend\\b|\\bFunction\\b|\\bGet\\b|" +
+       "\\bGetType\\b|\\bGoSub\\b|\\bGoTo\\b|\\bHandles\\b|\\bIf\\b|\\bImplements\\b|\\bImports\\b|\\bIn\\b|" +
+       "\\bInherits\\b|\\bInteger\\b|\\bInterface\\b|\\bIs\\b|\\bLet\\b|\\bLib\\b|\\bLike\\b|\\bLong\\b|" +
+       "\\bLoop\\b|\\bMe\\b|\\bMod\\b|\\bModule\\b|\\bMustInherit\\b|\\bMustOverride\\b|\\bMyBase\\b|\\bMyClass\\b|" +
+       "\\bNamespace\\b|\\bNew\\b|\\bNext\\b|\\bNot\\b|\\bNothing\\b|\\bNotInheritable\\b|\\bNotOverridable\\b|\\bObject\\b|" +
+       "\\bOn\\b|\\bOption\\b|\\bOptional\\b|\\bOr\\b|\\bOrElse\\b|\\bOverloads\\b|\\bOverridable\\b|\\bOverrides\\b|" +
+       "\\bParamArray\\b|\\bPreserve\\b|\\bPrivate\\b|\\bProperty\\b|\\bProtected\\b|\\bPublic\\b|\\bRaiseEvent\\b|\\bReadOnly\\b|" +
+       "\\bReDim\\b|\\bREM\\b|\\bRemoveHandler\\b|\\bResume\\b|\\bReturn\\b|\\bSelect\\b|\\bSet\\b|\\bShadows\\b|" +
+       "\\bShared\\b|\\bShort\\b|\\bSingle\\b|\\bStatic\\b|\\bStep\\b|\\bStop\\b|\\bString\\b|\\bStructure\\b|" +
+       "\\bSub\\b|\\bSyncLock\\b|\\bThen\\b|\\bThrow\\b|\\bTo\\b|\\bTrue\\b|\\bTry\\b|\\bTypeOf\\b|" +
+       "\\bUnicode\\b|\\bUntil\\b|\\bVariant\\b|\\bWhen\\b|\\bWhile\\b|\\bWith\\b|\\bWithEvents\\b|\\bWriteOnly\\b|\\bXor\\b)";
+
+string Colorize (string text, string lang)
+{
+       if (lang == "xml") return ColorizeXml (text);
+       else if (lang == "cs") return ColorizeCs (text);
+       else if (lang == "vb") return ColorizeVb (text);
+       else return text;
+}
+
+string ColorizeXml (string text)
+{
+       text = text.Replace (" ", "&nbsp;");
+       Regex re = new Regex ("\r\n|\r|\n");
+       text = re.Replace (text, "_br_");
+       
+       re = new Regex ("<\\s*(\\/?)\\s*([\\s\\S]*?)\\s*(\\/?)\\s*>");
+       text = re.Replace (text,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+       
+       re = new Regex ("\\{(\\w*):([\\s\\S]*?)\\}");
+       text = re.Replace (text,"<span style='color:$1'>$2</span>");
+
+       re = new Regex ("\"(.*?)\"");
+       text = re.Replace (text,"\"<span style='color:purple'>$1</span>\"");
+
+       
+       text = text.Replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+       text = text.Replace ("_br_", "<br>");
+       return text;
+}
+
+string ColorizeCs (string text)
+{
+       text = text.Replace (" ", "&nbsp;");
+
+       text = text.Replace ("<", "&lt;");
+       text = text.Replace (">", "&gt;");
+
+       Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+       text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+       re = new Regex ("//(((.(?!\"</span>))|\"(((?!\").)*)\"</span>)*)(\r|\n|\r\n)");
+       text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+       
+       re = new Regex (keywords_cs);
+       text = re.Replace (text,"<span style='color:blue'>$1</span>");
+       
+       text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+       text = text.Replace ("\n","<br/>");
+       
+       return text;
+}
+
+string ColorizeVb (string text)
+{
+       text = text.Replace (" ", "&nbsp;");
+       
+/*     Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+       text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+       re = new Regex ("'(((.(?!\"\\<\\/span\\>))|\"(((?!\").)*)\"\\<\\/span\\>)*)(\r|\n|\r\n)");
+       text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+       
+       re = new Regex (keywords_vb);
+       text = re.Replace (text,"<span style='color:blue'>$1</span>");
+*/     
+       text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+       text = text.Replace ("\n","<br/>");
+       return text;
+}
+
+//
+// Helper methods and classes
+//
+
+string GetDataContext ()
+{
+       return "op=" + CurrentOperationName + "&bnd=" + CurrentOperationBinding + "&";
+}
+
+string GetOptionSel (string v1, string v2)
+{
+       string op = "<option ";
+       if (v1 == v2) op += "selected ";
+       return op + "value='" + v1 + "'>";
+}
+
+string WrapText (string text, int maxChars)
+{
+       text =  text.Replace(" />","/>");
+       
+       string linspace = null;
+       int lincount = 0;
+       int breakpos = 0;
+       int linstart = 0;
+       bool inquotes = false;
+       char lastc = ' ';
+       string sublineIndent = "";
+       System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+       for (int n=0; n<text.Length; n++)
+       {
+               char c = text [n];
+               
+               if (c=='\r' || c=='\n' || n==text.Length-1)
+               {
+                       sb.Append (linspace + sublineIndent + text.Substring (linstart, n-linstart+1));
+                       linspace = null;
+                       lincount = 0;
+                       linstart = n+1;
+                       breakpos = linstart;
+                       sublineIndent = "";
+                       lastc = c;
+                       continue;
+               }
+               
+               if (lastc==',' || lastc=='(')
+               {
+                       if (!inquotes) breakpos = n;
+               }
+               
+               if (lincount > maxChars && breakpos >= linstart)
+               {
+                       if (linspace != null)
+                               sb.Append (linspace + sublineIndent);
+                       sb.Append (text.Substring (linstart, breakpos-linstart));
+                       sb.Append ("\n");
+                       sublineIndent = "     ";
+                       lincount = linspace.Length + sublineIndent.Length + (n-breakpos);
+                       linstart = breakpos;
+               }
+               
+               if (c==' ' || c=='\t')
+               {
+                       if (!inquotes)
+                               breakpos = n;
+               }
+               else if (c=='"')
+               {
+                       inquotes = !inquotes;
+               }
+               else 
+                       if (linspace == null) {
+                               linspace = text.Substring (linstart, n-linstart);
+                               linstart = n;
+                       }
+
+               lincount++;
+               lastc = c;
+       }
+       return sb.ToString ();
+}
+
+class Parameter
+{
+       string name;
+       string type;
+       string description;
+
+       public string Name { get { return name; } set { name = value; } }
+       public string Type { get { return type; } set { type = value; } }
+       public string Description { get { return description; } set { description = value; } }
+}
+
+public class HtmlSampleGenerator: SampleGenerator
+{
+       public HtmlSampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+       : base (services, schemas)
+       {
+       }
+               
+       protected override string GetLiteral (string s)
+       {
+               return "@placeholder!" + s + "!placeholder@";
+       }
+}
+
+
+       public class SampleGenerator
+       {
+               protected ServiceDescriptionCollection descriptions;
+               protected XmlSchemas schemas;
+               XmlSchemaElement anyElement;
+               ArrayList queue;
+               SoapBindingUse currentUse;
+               XmlDocument document = new XmlDocument ();
+               
+               static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);
+               static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array","http://schemas.xmlsoap.org/soap/encoding/");
+               static readonly XmlQualifiedName arrayTypeRefName = new XmlQualifiedName ("arrayType","http://schemas.xmlsoap.org/soap/encoding/");
+               const string SoapEnvelopeNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
+               const string WsdlNamespace = "http://schemas.xmlsoap.org/wsdl/";
+               const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
+               
+               class EncodedType
+               {
+                       public EncodedType (string ns, XmlSchemaElement elem) { Namespace = ns; Element = elem; }
+                       public string Namespace;
+                       public XmlSchemaElement Element;
+               }
+
+               public SampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+               {
+                       descriptions = services;
+                       this.schemas = schemas;
+                       queue = new ArrayList ();
+               }
+               
+               public string GenerateMessage (Port port, OperationBinding obin, Operation oper, string protocol, bool generateInput)
+               {
+                       OperationMessage msg = null;
+                       foreach (OperationMessage opm in oper.Messages)
+                       {
+                               if (opm is OperationInput && generateInput) msg = opm;
+                               else if (opm is OperationOutput && !generateInput) msg = opm;
+                       }
+                       if (msg == null) return null;
+                       
+                       switch (protocol) {
+                               case "Soap": return GenerateHttpSoapMessage (port, obin, oper, msg);
+                               case "HttpGet": return GenerateHttpGetMessage (port, obin, oper, msg);
+                               case "HttpPost": return GenerateHttpPostMessage (port, obin, oper, msg);
+                       }
+                       return "Unknown protocol";
+               }
+               
+               public string GenerateHttpSoapMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+               {
+                       string req = "";
+                       
+                       if (msg is OperationInput)
+                       {
+                               SoapAddressBinding sab = port.Extensions.Find (typeof(SoapAddressBinding)) as SoapAddressBinding;
+                               SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+                               req += "POST " + new Uri (sab.Location).AbsolutePath + "\n";
+                               req += "SOAPAction: " + sob.SoapAction + "\n";
+                               req += "Content-Type: text/xml; charset=utf-8\n";
+                               req += "Content-Length: " + GetLiteral ("string") + "\n";
+                               req += "Host: " + GetLiteral ("string") + "\n\n";
+                       }
+                       else
+                       {
+                               req += "HTTP/1.0 200 OK\n";
+                               req += "Content-Type: text/xml; charset=utf-8\n";
+                               req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+                       }
+                       
+                       req += GenerateSoapMessage (obin, oper, msg);
+                       return req;
+               }
+               
+               public string GenerateHttpGetMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+               {
+                       string req = "";
+                       
+                       if (msg is OperationInput)
+                       {
+                               HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+                               HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+                               string location = new Uri (sab.Location).AbsolutePath + sob.Location + "?" + BuildQueryString (msg);
+                               req += "GET " + location + "\n";
+                               req += "Host: " + GetLiteral ("string");
+                       }
+                       else
+                       {
+                               req += "HTTP/1.0 200 OK\n";
+                               req += "Content-Type: text/xml; charset=utf-8\n";
+                               req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+                       
+                               MimeXmlBinding mxb = (MimeXmlBinding) obin.Output.Extensions.Find (typeof(MimeXmlBinding)) as MimeXmlBinding;
+                               if (mxb == null) return req;
+                               
+                               Message message = descriptions.GetMessage (msg.Message);
+                               XmlQualifiedName ename = null;
+                               foreach (MessagePart part in message.Parts)
+                                       if (part.Name == mxb.Part) ename = part.Element;
+                                       
+                               if (ename == null) return req + GetLiteral("string");
+                               
+                               StringWriter sw = new StringWriter ();
+                               XmlTextWriter xtw = new XmlTextWriter (sw);
+                               xtw.Formatting = Formatting.Indented;
+                               currentUse = SoapBindingUse.Literal;
+                               WriteRootElementSample (xtw, ename);
+                               xtw.Close ();
+                               req += sw.ToString ();
+                       }
+                       
+                       return req;
+               }
+               
+               public string GenerateHttpPostMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+               {
+                       string req = "";
+                       
+                       if (msg is OperationInput)
+                       {
+                               HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+                               HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+                               string location = new Uri (sab.Location).AbsolutePath + sob.Location;
+                               req += "POST " + location + "\n";
+                               req += "Content-Type: application/x-www-form-urlencoded\n";
+                               req += "Content-Length: " + GetLiteral ("string") + "\n";
+                               req += "Host: " + GetLiteral ("string") + "\n\n";
+                               req += BuildQueryString (msg);
+                       }
+                       else return GenerateHttpGetMessage (port, obin, oper, msg);
+                       
+                       return req;
+               }
+               
+               string BuildQueryString (OperationMessage opm)
+               {
+                       string s = "";
+                       Message msg = descriptions.GetMessage (opm.Message);
+                       foreach (MessagePart part in msg.Parts)
+                       {
+                               if (s.Length != 0) s += "&";
+                               s += part.Name + "=" + GetLiteral (part.Type.Name);
+                       }
+                       return s;
+               }
+               
+               public string GenerateSoapMessage (OperationBinding obin, Operation oper, OperationMessage msg)
+               {
+                       SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+                       SoapBindingStyle style = (sob != null) ? sob.Style : SoapBindingStyle.Document;
+                       
+                       MessageBinding msgbin = (msg is OperationInput) ? (MessageBinding) obin.Input : (MessageBinding)obin.Output;
+                       SoapBodyBinding sbb = msgbin.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+                       SoapBindingUse bodyUse = (sbb != null) ? sbb.Use : SoapBindingUse.Literal;
+                       
+                       StringWriter sw = new StringWriter ();
+                       XmlTextWriter xtw = new XmlTextWriter (sw);
+                       xtw.Formatting = Formatting.Indented;
+                       
+                       xtw.WriteStartDocument ();
+                       xtw.WriteStartElement ("soap", "Envelope", SoapEnvelopeNamespace);
+                       xtw.WriteAttributeString ("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
+                       xtw.WriteAttributeString ("xmlns", "xsd", null, XmlSchema.Namespace);
+                       
+                       if (bodyUse == SoapBindingUse.Encoded) 
+                       {
+                               xtw.WriteAttributeString ("xmlns", "soapenc", null, SoapEncodingNamespace);
+                               xtw.WriteAttributeString ("xmlns", "tns", null, msg.Message.Namespace);
+                       }
+
+                       // Serialize headers
+                       
+                       bool writtenHeader = false;
+                       foreach (object ob in msgbin.Extensions)
+                       {
+                               SoapHeaderBinding hb = ob as SoapHeaderBinding;
+                               if (hb == null) continue;
+                               
+                               if (!writtenHeader) {
+                                       xtw.WriteStartElement ("soap", "Header", SoapEnvelopeNamespace);
+                                       writtenHeader = true;
+                               }
+                               
+                               WriteHeader (xtw, hb);
+                       }
+                       
+                       if (writtenHeader)
+                               xtw.WriteEndElement ();
+
+                       // Serialize body
+                       xtw.WriteStartElement ("soap", "Body", SoapEnvelopeNamespace);
+                       
+                       currentUse = bodyUse;
+                       WriteBody (xtw, oper, msg, sbb, style);
+                       
+                       xtw.WriteEndElement ();
+                       xtw.WriteEndElement ();
+                       xtw.Close ();
+                       return sw.ToString ();
+               }
+               
+               void WriteHeader (XmlTextWriter xtw, SoapHeaderBinding header)
+               {
+                       Message msg = descriptions.GetMessage (header.Message);
+                       if (msg == null) throw new InvalidOperationException ("Message " + header.Message + " not found");
+                       MessagePart part = msg.Parts [header.Part];
+                       if (part == null) throw new InvalidOperationException ("Message part " + header.Part + " not found in message " + header.Message);
+
+                       currentUse = header.Use;
+                       
+                       if (currentUse == SoapBindingUse.Literal)
+                               WriteRootElementSample (xtw, part.Element);
+                       else
+                               WriteTypeSample (xtw, part.Type);
+               }
+               
+               void WriteBody (XmlTextWriter xtw, Operation oper, OperationMessage opm, SoapBodyBinding sbb, SoapBindingStyle style)
+               {
+                       Message msg = descriptions.GetMessage (opm.Message);
+                       if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+                       {
+                               MessagePart part = msg.Parts[0];
+                               if (part.Element == XmlQualifiedName.Empty)
+                                       WriteTypeSample (xtw, part.Type);
+                               else
+                                       WriteRootElementSample (xtw, part.Element);
+                       }
+                       else
+                       {
+                               string elemName = oper.Name;
+                               string ns = "";
+                               if (opm is OperationOutput) elemName += "Response";
+                               
+                               if (style == SoapBindingStyle.Rpc) {
+                                       xtw.WriteStartElement (elemName, sbb.Namespace);
+                                       ns = sbb.Namespace;
+                               }
+                                       
+                               foreach (MessagePart part in msg.Parts)
+                               {
+                                       if (part.Element == XmlQualifiedName.Empty)
+                                       {
+                                               XmlSchemaElement elem = new XmlSchemaElement ();
+                                               elem.SchemaTypeName = part.Type;
+                                               elem.Name = part.Name;
+                                               WriteElementSample (xtw, ns, elem);
+                                       }
+                                       else
+                                               WriteRootElementSample (xtw, part.Element);
+                               }
+                               
+                               if (style == SoapBindingStyle.Rpc)
+                                       xtw.WriteEndElement ();
+                       }
+                       WriteQueuedTypeSamples (xtw);
+               }
+               
+               void WriteRootElementSample (XmlTextWriter xtw, XmlQualifiedName qname)
+               {
+                       XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (qname, typeof(XmlSchemaElement));
+                       if (elem == null) throw new InvalidOperationException ("Element not found: " + qname);
+                       WriteElementSample (xtw, qname.Namespace, elem);
+               }
+
+               void WriteElementSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+               {
+                       bool sharedAnnType = false;
+                       XmlQualifiedName root;
+                       
+                       if (!elem.RefName.IsEmpty) {
+                               XmlSchemaElement refElem = FindRefElement (elem);
+                               if (refElem == null) throw new InvalidOperationException ("Global element not found: " + elem.RefName);
+                               root = elem.RefName;
+                               elem = refElem;
+                               sharedAnnType = true;
+                       }
+                       else
+                               root = new XmlQualifiedName (elem.Name, ns);
+                       
+                       if (!elem.SchemaTypeName.IsEmpty)
+                       {
+                               XmlSchemaComplexType st = FindComplexTyype (elem.SchemaTypeName);
+                               if (st != null) 
+                                       WriteComplexTypeSample (xtw, st, root);
+                               else
+                               {
+                                       xtw.WriteStartElement (root.Name, root.Namespace);
+                                       if (currentUse == SoapBindingUse.Encoded) 
+                                               xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, elem.SchemaTypeName));
+                                       xtw.WriteString (GetLiteral (FindBuiltInType (elem.SchemaTypeName)));
+                                       xtw.WriteEndElement ();
+                               }
+                       }
+                       else if (elem.SchemaType == null)
+                       {
+                               xtw.WriteStartElement ("any");
+                               xtw.WriteEndElement ();
+                       }
+                       else
+                               WriteComplexTypeSample (xtw, (XmlSchemaComplexType) elem.SchemaType, root);
+               }
+               
+               void WriteTypeSample (XmlTextWriter xtw, XmlQualifiedName qname)
+               {
+                       XmlSchemaComplexType ctype = FindComplexTyype (qname);
+                       if (ctype != null) {
+                               WriteComplexTypeSample (xtw, ctype, qname);
+                               return;
+                       }
+                       
+                       XmlSchemaSimpleType stype = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+                       if (stype != null) {
+                               WriteSimpleTypeSample (xtw, stype);
+                               return;
+                       }
+                       
+                       xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+                       throw new InvalidOperationException ("Type not found: " + qname);
+               }
+               
+               void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName)
+               {
+                       WriteComplexTypeSample (xtw, stype, rootName, -1);
+               }
+               
+               void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName, int id)
+               {
+                       string ns = rootName.Namespace;
+                       
+                       if (rootName.Name.IndexOf ("[]") != -1) rootName = arrayType;
+                       
+                       if (currentUse == SoapBindingUse.Encoded) {
+                               string pref = xtw.LookupPrefix (rootName.Namespace);
+                               if (pref == null) pref = "q1";
+                               xtw.WriteStartElement (pref, rootName.Name, rootName.Namespace);
+                               ns = "";
+                       }
+                       else
+                               xtw.WriteStartElement (rootName.Name, rootName.Namespace);
+                       
+                       if (id != -1)
+                       {
+                               xtw.WriteAttributeString ("id", "id" + id);
+                               if (rootName != arrayType)
+                                       xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, rootName));
+                       }
+                       
+                       WriteComplexTypeAttributes (xtw, stype);
+                       WriteComplexTypeElements (xtw, ns, stype);
+                       
+                       xtw.WriteEndElement ();
+               }
+               
+               void WriteComplexTypeAttributes (XmlTextWriter xtw, XmlSchemaComplexType stype)
+               {
+                       WriteAttributes (xtw, stype.Attributes, stype.AnyAttribute);
+               }
+
+               Dictionary<XmlSchemaComplexType,int> recursed_types = new Dictionary<XmlSchemaComplexType,int> ();
+               void WriteComplexTypeElements (XmlTextWriter xtw, string ns, XmlSchemaComplexType stype)
+               {
+                       int prev = 0;
+                       if (recursed_types.ContainsKey (stype))
+                               prev = recursed_types [stype];
+
+                       if (prev > 1)
+                               return;
+                       recursed_types [stype] = ++prev;
+
+                       if (stype.Particle != null)
+                               WriteParticleComplexContent (xtw, ns, stype.Particle);
+                       else
+                       {
+                               if (stype.ContentModel is XmlSchemaSimpleContent)
+                                       WriteSimpleContent (xtw, (XmlSchemaSimpleContent)stype.ContentModel);
+                               else if (stype.ContentModel is XmlSchemaComplexContent)
+                                       WriteComplexContent (xtw, ns, (XmlSchemaComplexContent)stype.ContentModel);
+                       }
+                       prev = recursed_types [stype];
+                       recursed_types [stype] = --prev;
+               }
+
+               void WriteAttributes (XmlTextWriter xtw, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat)
+               {
+                       foreach (XmlSchemaObject at in atts)
+                       {
+                               if (at is XmlSchemaAttribute)
+                               {
+                                       string ns;
+                                       XmlSchemaAttribute attr = (XmlSchemaAttribute)at;
+                                       XmlSchemaAttribute refAttr = attr;
+                                       
+                                       // refAttr.Form; TODO
+                                       
+                                       if (!attr.RefName.IsEmpty) {
+                                               refAttr = FindRefAttribute (attr.RefName);
+                                               if (refAttr == null) throw new InvalidOperationException ("Global attribute not found: " + attr.RefName);
+                                       }
+                                       
+                                       string val;
+                                       if (!refAttr.SchemaTypeName.IsEmpty) val = FindBuiltInType (refAttr.SchemaTypeName);
+                                       else val = FindBuiltInType ((XmlSchemaSimpleType) refAttr.SchemaType);
+                                       
+                                       xtw.WriteAttributeString (refAttr.Name, val);
+                               }
+                               else if (at is XmlSchemaAttributeGroupRef)
+                               {
+                                       XmlSchemaAttributeGroupRef gref = (XmlSchemaAttributeGroupRef)at;
+                                       XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+                                       WriteAttributes (xtw, grp.Attributes, grp.AnyAttribute);
+                               }
+                       }
+                       
+                       if (anyat != null)
+                               xtw.WriteAttributeString ("custom-attribute","value");
+               }
+               
+               void WriteParticleComplexContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle)
+               {
+                       WriteParticleContent (xtw, ns, particle, false);
+               }
+               
+               void WriteParticleContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle, bool multiValue)
+               {
+                       if (particle is XmlSchemaGroupRef)
+                               particle = GetRefGroupParticle ((XmlSchemaGroupRef)particle);
+
+                       if (particle.MaxOccurs > 1) multiValue = true;
+                       
+                       if (particle is XmlSchemaSequence) {
+                               WriteSequenceContent (xtw, ns, ((XmlSchemaSequence)particle).Items, multiValue);
+                       }
+                       else if (particle is XmlSchemaChoice) {
+                               if (((XmlSchemaChoice)particle).Items.Count == 1)
+                                       WriteSequenceContent (xtw, ns, ((XmlSchemaChoice)particle).Items, multiValue);
+                               else
+                                       WriteChoiceContent (xtw, ns, (XmlSchemaChoice)particle, multiValue);
+                       }
+                       else if (particle is XmlSchemaAll) {
+                               WriteSequenceContent (xtw, ns, ((XmlSchemaAll)particle).Items, multiValue);
+                       }
+               }
+
+               void WriteSequenceContent (XmlTextWriter xtw, string ns, XmlSchemaObjectCollection items, bool multiValue)
+               {
+                       foreach (XmlSchemaObject item in items)
+                               WriteContentItem (xtw, ns, item, multiValue);
+               }
+               
+               void WriteContentItem (XmlTextWriter xtw, string ns, XmlSchemaObject item, bool multiValue)
+               {
+                       if (item is XmlSchemaGroupRef)
+                               item = GetRefGroupParticle ((XmlSchemaGroupRef)item);
+                                       
+                       if (item is XmlSchemaElement)
+                       {
+                               XmlSchemaElement elem = (XmlSchemaElement) item;
+                               XmlSchemaElement refElem;
+                               if (!elem.RefName.IsEmpty) refElem = FindRefElement (elem);
+                               else refElem = elem;
+
+                               int num = (elem.MaxOccurs == 1 && !multiValue) ? 1 : 2;
+                               for (int n=0; n<num; n++)
+                               {
+                                       if (currentUse == SoapBindingUse.Literal)
+                                               WriteElementSample (xtw, ns, refElem);
+                                       else
+                                               WriteRefTypeSample (xtw, ns, refElem);
+                               }
+                       }
+                       else if (item is XmlSchemaAny)
+                       {
+                               xtw.WriteString (GetLiteral ("xml"));
+                       }
+                       else if (item is XmlSchemaParticle) {
+                               WriteParticleContent (xtw, ns, (XmlSchemaParticle)item, multiValue);
+                       }
+               }
+               
+               void WriteChoiceContent (XmlTextWriter xtw, string ns, XmlSchemaChoice choice, bool multiValue)
+               {
+                       foreach (XmlSchemaObject item in choice.Items)
+                               WriteContentItem (xtw, ns, item, multiValue);
+               }
+
+               void WriteSimpleContent (XmlTextWriter xtw, XmlSchemaSimpleContent content)
+               {
+                       XmlSchemaSimpleContentExtension ext = content.Content as XmlSchemaSimpleContentExtension;
+                       if (ext != null)
+                               WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+                               
+                       XmlQualifiedName qname = GetContentBaseType (content.Content);
+                       xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+               }
+
+               string FindBuiltInType (XmlQualifiedName qname)
+               {
+                       if (qname.Namespace == XmlSchema.Namespace)
+                               return qname.Name;
+
+                       XmlSchemaComplexType ct = FindComplexTyype (qname);
+                       if (ct != null)
+                       {
+                               XmlSchemaSimpleContent sc = ct.ContentModel as XmlSchemaSimpleContent;
+                               if (sc == null) throw new InvalidOperationException ("Invalid schema");
+                               return FindBuiltInType (GetContentBaseType (sc.Content));
+                       }
+                       
+                       XmlSchemaSimpleType st = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+                       if (st != null)
+                               return FindBuiltInType (st);
+
+                       throw new InvalidOperationException ("Definition of type " + qname + " not found");
+               }
+
+               string FindBuiltInType (XmlSchemaSimpleType st)
+               {
+                       if (st.Content is XmlSchemaSimpleTypeRestriction) {
+                               return FindBuiltInType (GetContentBaseType (st.Content));
+                       }
+                       else if (st.Content is XmlSchemaSimpleTypeList) {
+                               string s = FindBuiltInType (GetContentBaseType (st.Content));
+                               return s + " " + s + " ...";
+                       }
+                       else if (st.Content is XmlSchemaSimpleTypeUnion)
+                       {
+                               //Check if all types of the union are equal. If not, then will use anyType.
+                               XmlSchemaSimpleTypeUnion uni = (XmlSchemaSimpleTypeUnion) st.Content;
+                               string utype = null;
+
+                               // Anonymous types are unique
+                               if (uni.BaseTypes.Count != 0 && uni.MemberTypes.Length != 0)
+                                       return "string";
+
+                               foreach (XmlQualifiedName mt in uni.MemberTypes)
+                               {
+                                       string qn = FindBuiltInType (mt);
+                                       if (utype != null && qn != utype) return "string";
+                                       else utype = qn;
+                               }
+                               return utype;
+                       }
+                       else
+                               return "string";
+               }
+               
+
+               XmlQualifiedName GetContentBaseType (XmlSchemaObject ob)
+               {
+                       if (ob is XmlSchemaSimpleContentExtension)
+                               return ((XmlSchemaSimpleContentExtension)ob).BaseTypeName;
+                       else if (ob is XmlSchemaSimpleContentRestriction)
+                               return ((XmlSchemaSimpleContentRestriction)ob).BaseTypeName;
+                       else if (ob is XmlSchemaSimpleTypeRestriction)
+                               return ((XmlSchemaSimpleTypeRestriction)ob).BaseTypeName;
+                       else if (ob is XmlSchemaSimpleTypeList)
+                               return ((XmlSchemaSimpleTypeList)ob).ItemTypeName;
+                       else
+                               return null;
+               }
+
+               void WriteComplexContent (XmlTextWriter xtw, string ns, XmlSchemaComplexContent content)
+               {
+                       XmlQualifiedName qname;
+
+                       XmlSchemaComplexContentExtension ext = content.Content as XmlSchemaComplexContentExtension;
+                       if (ext != null) qname = ext.BaseTypeName;
+                       else {
+                               XmlSchemaComplexContentRestriction rest = (XmlSchemaComplexContentRestriction)content.Content;
+                               qname = rest.BaseTypeName;
+                               if (qname == arrayType) {
+                                       ParseArrayType (rest, out qname);
+                                       XmlSchemaElement elem = new XmlSchemaElement ();
+                                       elem.Name = "Item";
+                                       elem.SchemaTypeName = qname;
+                                       
+                                       xtw.WriteAttributeString ("arrayType", SoapEncodingNamespace, qname.Name + "[2]");
+                                       WriteContentItem (xtw, ns, elem, true);
+                                       return;
+                               }
+                       }
+                       
+                       // Add base map members to this map
+                       XmlSchemaComplexType ctype = FindComplexTyype (qname);
+                       WriteComplexTypeAttributes (xtw, ctype);
+                       
+                       if (ext != null) {
+                               // Add the members of this map
+                               WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+                               if (ext.Particle != null)
+                                       WriteParticleComplexContent (xtw, ns, ext.Particle);
+                       }
+                       
+                       WriteComplexTypeElements (xtw, ns, ctype);
+               }
+               
+               void ParseArrayType (XmlSchemaComplexContentRestriction rest, out XmlQualifiedName qtype)
+               {
+                       XmlSchemaAttribute arrayTypeAt = FindArrayAttribute (rest.Attributes);
+                       XmlAttribute[] uatts = arrayTypeAt.UnhandledAttributes;
+                       if (uatts == null || uatts.Length == 0) throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+                       
+                       XmlAttribute xat = null;
+                       foreach (XmlAttribute at in uatts)
+                               if (at.LocalName == "arrayType" && at.NamespaceURI == WsdlNamespace)
+                                       { xat = at; break; }
+                       
+                       if (xat == null) 
+                               throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+                       
+                       string arrayType = xat.Value;
+                       string type, ns;
+                       int i = arrayType.LastIndexOf (":");
+                       if (i == -1) ns = "";
+                       else ns = arrayType.Substring (0,i);
+                       
+                       int j = arrayType.IndexOf ("[", i+1);
+                       if (j == -1) throw new InvalidOperationException ("Cannot parse WSDL array type: " + arrayType);
+                       type = arrayType.Substring (i+1);
+                       type = type.Substring (0, type.Length-2);
+                       
+                       qtype = new XmlQualifiedName (type, ns);
+               }
+               
+               XmlSchemaAttribute FindArrayAttribute (XmlSchemaObjectCollection atts)
+               {
+                       foreach (object ob in atts)
+                       {
+                               XmlSchemaAttribute att = ob as XmlSchemaAttribute;
+                               if (att != null && att.RefName == arrayTypeRefName) return att;
+                               
+                               XmlSchemaAttributeGroupRef gref = ob as XmlSchemaAttributeGroupRef;
+                               if (gref != null)
+                               {
+                                       XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+                                       att = FindArrayAttribute (grp.Attributes);
+                                       if (att != null) return att;
+                               }
+                       }
+                       return null;
+               }
+               
+               void WriteSimpleTypeSample (XmlTextWriter xtw, XmlSchemaSimpleType stype)
+               {
+                       xtw.WriteString (GetLiteral (FindBuiltInType (stype)));
+               }
+               
+               XmlSchemaParticle GetRefGroupParticle (XmlSchemaGroupRef refGroup)
+               {
+                       XmlSchemaGroup grp = (XmlSchemaGroup) schemas.Find (refGroup.RefName, typeof (XmlSchemaGroup));
+                       return grp.Particle;
+               }
+
+               XmlSchemaElement FindRefElement (XmlSchemaElement elem)
+               {
+                       if (elem.RefName.Namespace == XmlSchema.Namespace)
+                       {
+                               if (anyElement != null) return anyElement;
+                               anyElement = new XmlSchemaElement ();
+                               anyElement.Name = "any";
+                               anyElement.SchemaTypeName = anyType;
+                               return anyElement;
+                       }
+                       return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+               }
+               
+               XmlSchemaAttribute FindRefAttribute (XmlQualifiedName refName)
+               {
+                       if (refName.Namespace == XmlSchema.Namespace)
+                       {
+                               XmlSchemaAttribute at = new XmlSchemaAttribute ();
+                               at.Name = refName.Name;
+                               at.SchemaTypeName = new XmlQualifiedName ("string",XmlSchema.Namespace);
+                               return at;
+                       }
+                       return (XmlSchemaAttribute) schemas.Find (refName, typeof(XmlSchemaAttribute));
+               }
+               
+               void WriteRefTypeSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+               {
+                       if (elem.SchemaTypeName.Namespace == XmlSchema.Namespace || schemas.Find (elem.SchemaTypeName, typeof(XmlSchemaSimpleType)) != null)
+                               WriteElementSample (xtw, ns, elem);
+                       else
+                       {
+                               xtw.WriteStartElement (elem.Name, ns);
+                               xtw.WriteAttributeString ("href", "#id" + (queue.Count+1));
+                               xtw.WriteEndElement ();
+                               queue.Add (new EncodedType (ns, elem));
+                       }
+               }
+               
+               void WriteQueuedTypeSamples (XmlTextWriter xtw)
+               {
+                       for (int n=0; n<queue.Count; n++)
+                       {
+                               EncodedType ec = (EncodedType) queue[n];
+                               XmlSchemaComplexType st = FindComplexTyype (ec.Element.SchemaTypeName);
+                               WriteComplexTypeSample (xtw, st, ec.Element.SchemaTypeName, n+1);
+                       }
+               }
+               
+               XmlSchemaComplexType FindComplexTyype (XmlQualifiedName qname)
+               {
+                       if (qname.Name.IndexOf ("[]") != -1)
+                       {
+                               XmlSchemaComplexType stype = new XmlSchemaComplexType ();
+                               stype.ContentModel = new XmlSchemaComplexContent ();
+                               
+                               XmlSchemaComplexContentRestriction res = new XmlSchemaComplexContentRestriction ();
+                               stype.ContentModel.Content = res;
+                               res.BaseTypeName = arrayType;
+                               
+                               XmlSchemaAttribute att = new XmlSchemaAttribute ();
+                               att.RefName = arrayTypeRefName;
+                               res.Attributes.Add (att);
+                               
+                               XmlAttribute xat = document.CreateAttribute ("arrayType", WsdlNamespace);
+                               xat.Value = qname.Namespace + ":" + qname.Name;
+                               att.UnhandledAttributes = new XmlAttribute[] {xat};
+                               return stype;
+                       }
+                               
+                       return (XmlSchemaComplexType) schemas.Find (qname, typeof(XmlSchemaComplexType));
+               }
+               
+               string GetQualifiedNameString (XmlTextWriter xtw, XmlQualifiedName qname)
+               {
+                       string pref = xtw.LookupPrefix (qname.Namespace);
+                       if (pref != null) return pref + ":" + qname.Name;
+                       
+                       xtw.WriteAttributeString ("xmlns", "q1", null, qname.Namespace);
+                       return "q1:" + qname.Name;
+               }
+                               
+               protected virtual string GetLiteral (string s)
+               {
+                       return s;
+               }
+
+               void GetOperationFormat (OperationBinding obin, out SoapBindingStyle style, out SoapBindingUse use)
+               {
+                       style = SoapBindingStyle.Document;
+                       use = SoapBindingUse.Literal;
+                       SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+                       if (sob != null) {
+                               style = sob.Style;
+                               SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+                               if (sbb != null)
+                                       use = sbb.Use;
+                       }
+               }
+       }
+
+
+
+
+
+</script>
+
+<head runat="server">
+       <%
+       Response.Write ("<link rel=\"alternate\" type=\"text/xml\" href=\"" + Request.FilePath + "?disco\"/>");
+       %>
+       <title><%=WebServiceName%> Web Service</title>
+    <style type="text/css">
+               BODY { font-family: Arial; margin-left: 20px; margin-top: 20px; font-size: x-small}
+               TABLE { font-size: x-small }
+               .title { color:dimgray; font-family: Arial; font-size:20pt; font-weight:900}
+               .operationTitle { color:dimgray; font-family: Arial; font-size:15pt; font-weight:900}
+               .method { font-size: x-small }
+               .bindingLabel { font-size: x-small; font-weight:bold; color:darkgray; line-height:8pt; display:block; margin-bottom:3px }
+               .label { font-size: small; font-weight:bold; color:darkgray }
+               .paramTable { font-size: x-small }
+               .paramTable TR { background-color: gainsboro }
+               .paramFormTable { font-size: x-small; padding: 10px; background-color: gainsboro }
+               .paramFormTable TR { background-color: gainsboro }
+               .paramInput { border: solid 1px gray }
+               .button {border: solid 1px gray }
+               .smallSeparator { height:3px; overflow:hidden }
+               .panel { background-color:whitesmoke; border: solid 1px silver; border-top: solid 1px silver  }
+               .codePanel { background-color: white; font-size:x-small; padding:7px; border:solid 1px silver}
+               .code-xml { font-size:10pt; font-family:courier }
+               .code-cs { font-size:10pt; font-family:courier }
+               .code-vb { font-size:10pt; font-family:courier }
+               .tabLabelOn { font-weight:bold }
+               .tabLabelOff {color: darkgray }
+               .literal-placeholder {color: darkblue; font-weight:bold}
+               A:link { color: black; }
+               A:visited { color: black; }
+               A:active { color: black; }
+               A:hover { color: blue }
+    </style>
+       
+<script language="javascript" type="text/javascript">
+var req;
+function getXML (command, url, qs) {
+       if (url == "" || url.substring (0, 4) != "http")
+               return;
+       
+       var post_data = null;
+       req = getReq ();
+       req.onreadystatechange = stateChange;
+       if (command == "GET") {
+               url = url + "?" + qs;
+       } else {
+               post_data = qs;
+       }
+       req.open (command, url,  true); 
+       if (command == "POST")
+               req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
+       req.send (post_data); 
+}
+
+function stateChange () {
+       if (req.readyState == 4) {
+               var node = document.getElementById("testresult_div");
+               var text = "";
+               if (req.status == 200) {
+                       node.innerHTML = "<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+               } else {
+                       var ht = "<b style='color: red'>" + formatXml (req.status + " - " + req.statusText) + "</b>";
+                       if (req.responseText != "")
+                               ht = ht + "\n<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+                       node.innerHTML = ht;
+                                       
+               }
+       }
+}
+
+function formatXml (text)
+{      
+       var re = / /g;
+       text = text.replace (re, "&nbsp;");
+
+       re = /\t/g;
+       text = text.replace (re, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+       
+       re = /\<\s*(\/?)\s*(.*?)\s*(\/?)\s*\>/g;
+       text = text.replace (re,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+       
+       re = /{(\w*):(.*?)}/g;
+       text = text.replace (re,"<span style='color:$1'>$2</span>");
+
+       re = /"(.*?)"/g;
+       text = text.replace (re,"\"<span style='color:purple'>$1</span>\"");
+
+       re = /\r\n|\r|\n/g;
+       text = text.replace (re, "<br/>");
+       
+       return text;
+}
+
+function getReq () {
+       if (window.XMLHttpRequest) {
+               return new XMLHttpRequest();     // Firefox, Safari, ...
+       } else if (window.ActiveXObject) {
+               return new ActiveXObject("Microsoft.XMLHTTP");
+       }
+}
+
+function clearForm ()
+{
+       document.getElementById("testFormResult").style.display="none";
+}
+</script>
+
+</head>
+
+<body>
+<div class="title" style="margin-left:20px">
+<span class="label">Web Service</span><br>
+<%=WebServiceName%>
+</div>
+
+<!--
+       **********************************************************
+       Left panel
+-->
+
+<table border="0" width="100%" cellpadding="15px" cellspacing="15px">
+<tr valign="top"><td width="150px" class="panel">
+<div style="width:150px"></div>
+<a class="method" href='<%=PageName%>'>Overview</a><br>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("wsdl")%>'>Service Description</a>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("proxy")%>'>Client proxy</a>
+<br><br>
+       <asp:repeater id="BindingsRepeater" runat=server>
+               <itemtemplate name="itemtemplate">
+                       <span class="bindingLabel"><%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%></span>
+                       <asp:repeater id="OperationsRepeater" runat=server datasource='<%# ((Binding)Container.DataItem).Operations %>'>
+                               <itemtemplate>
+                                       <a class="method" href="<%=PageName%>?<%=GetTabContext("op",null)%>op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%></a>
+                                       <div class="smallSeparator"></div>
+                               </itemtemplate>
+                       </asp:repeater>
+                       <br>
+               </itemtemplate>
+       </asp:repeater>
+
+</td><td class="panel">
+
+<% if (CurrentPage == "main") {%>
+
+<!--
+       **********************************************************
+       Web service overview
+-->
+
+       <p class="label">Web Service Overview</p>
+       <%=WebServiceDescription%>
+       <br/><br/>
+       <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %>
+               <p class="label">Basic Profile Conformance</p>
+               This web service does not conform to WS-I Basic Profile v1.1
+       <%
+               Response.Write ("<ul>");
+               foreach (BasicProfileViolation vio in ProfileViolations) {
+                       Response.Write ("<li><b>" + vio.NormativeStatement + "</b>: " + vio.Details);
+                       Response.Write ("<ul>");
+                       foreach (string ele in vio.Elements)
+                               Response.Write ("<li>" + ele + "</li>");
+                       Response.Write ("</ul>");
+                       Response.Write ("</li>");
+               }
+               Response.Write ("</ul>");
+       }%>
+
+<%} if (DefaultBinding == null) {%>
+This service does not contain any public web method.
+<%} else if (CurrentPage == "op") {%>
+
+<!--
+       **********************************************************
+       Operation description
+-->
+
+       <span class="operationTitle"><%=CurrentOperationName%></span>
+       <br><br>
+       <% WriteTabs (); %>
+       <br><br><br>
+       
+       <% if (CurrentTab == "main") { %>
+               <span class="label">Input Parameters</span>
+               <div class="smallSeparator"></div>
+               <% if (InParams.Count == 0) { %>
+                       No input parameters<br>
+               <% } else { %>
+                       <table class="paramTable" cellspacing="1" cellpadding="5">
+                       <asp:repeater id="InputParamsRepeater" runat=server>
+                               <itemtemplate>
+                                       <tr>
+                                       <td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+                                       <td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+                                       </tr>
+                               </itemtemplate>
+                       </asp:repeater>
+                       </table>
+               <% } %>
+               <br>
+               
+               <% if (OutParams.Count > 0) { %>
+               <span class="label">Output Parameters</span>
+                       <div class="smallSeparator"></div>
+                       <table class="paramTable" cellspacing="1" cellpadding="5">
+                       <asp:repeater id="OutputParamsRepeater" runat=server>
+                               <itemtemplate>
+                                       <tr>
+                                       <td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+                                       <td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+                                       </tr>
+                               </itemtemplate>
+                       </asp:repeater>
+                       </table>
+               <br>
+               <% } %>
+               
+               <span class="label">Remarks</span>
+               <div class="smallSeparator"></div>
+               <%=OperationDocumentation%>
+               <br><br>
+               <span class="label">Technical information</span>
+               <div class="smallSeparator"></div>
+               Format: <%=CurrentOperationFormat%>
+               <br>Supported protocols: <%=CurrentOperationProtocols%>
+       <% } %>
+       
+<!--
+       **********************************************************
+       Operation description - Test form
+-->
+
+       <% if (CurrentTab == "test") { 
+               if (CurrentOperationSupportsTest) {%>
+                       Enter values for the parameters and click the 'Invoke' button to test this method:<br><br>
+                       <form action="<%=PageName%>" method="GET">
+                       <input type="hidden" name="page" value="<%=CurrentPage%>">
+                       <input type="hidden" name="tab" value="<%=CurrentTab%>">
+                       <input type="hidden" name="op" value="<%=CurrentOperationName%>">
+                       <input type="hidden" name="bnd" value="<%=CurrentOperationBinding%>">
+                       <input type="hidden" name="ext" value="testform">
+                       <table class="paramFormTable" cellspacing="0" cellpadding="3">
+                       <asp:repeater id="InputFormParamsRepeater" runat=server>
+                               <itemtemplate>
+                                       <tr>
+                                       <td><%#DataBinder.Eval(Container.DataItem, "Name")%>:&nbsp;</td>
+                                       <td width="150"><input class="paramInput" type="text" size="20" name="<%#DataBinder.Eval(Container.DataItem, "Name")%>"></td>
+                                       </tr>
+                               </itemtemplate>
+                       </asp:repeater>
+                       <tr><td></td><td><input class="button" type="submit" value="Invoke">&nbsp;<input class="button" type="button" onclick="clearForm()" value="Clear"></td></tr>
+                       </table>
+                       </form>
+                       <div id="testFormResult" style="display:<%= (HasFormResult?"block":"none") %>">
+                       The web service returned the following result:<br/><br/>
+                       <div class="codePanel" id="testresult_div">
+                       </div>
+                       <script language="javascript">
+                               getXML ("<%= GetOrPost () %>", "<%= GetTestResultUrl () %>", "<%= GetQS () %>");
+                       </script>
+                       </div>
+               <% } else {%>
+               The test form is not available for this operation because it has parameters with a complex structure.
+               <% } %>
+       <% } %>
+       
+<!--
+       **********************************************************
+       Operation description - Message Layout
+-->
+
+       <% if (CurrentTab == "msg") { %>
+               
+               The following are sample SOAP requests and responses for each protocol supported by this method:
+                       <br/><br/>
+               
+               <% if (IsOperationSupported ("Soap")) { %>
+                       <span class="label">Soap</span>
+                       <br/><br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", true)%></div></div>
+                       <br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", false)%></div></div>
+                       <br/>
+               <% } %>
+               <% if (IsOperationSupported ("HttpGet")) { %>
+                       <span class="label">HTTP Get</span>
+                       <br/><br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", true)%></div></div>
+                       <br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", false)%></div></div>
+                       <br/>
+               <% } %>
+               <% if (IsOperationSupported ("HttpPost")) { %>
+                       <span class="label">HTTP Post</span>
+                       <br/><br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", true)%></div></div>
+                       <br/>
+                       <div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", false)%></div></div>
+                       <br/>
+               <% } %>
+               
+       <% } %>
+<%} else if (CurrentPage == "proxy") {%>
+<!--
+       **********************************************************
+       Client Proxy
+-->
+       <form action="<%=PageName%>" name="langForm" method="GET">
+               Select the language for which you want to generate a proxy 
+               <input type="hidden" name="page" value="<%=CurrentPage%>">&nbsp;
+               <SELECT name="lang" onchange="langForm.submit()">
+                       <%=GetOptionSel("cs",CurrentLanguage)%>C#</option>
+                       <%=GetOptionSel("vb",CurrentLanguage)%>Visual Basic</option>
+               </SELECT>
+               &nbsp;&nbsp;
+       </form>
+       <br>
+       <span class="label"><%=CurrentProxytName%></span>&nbsp;&nbsp;&nbsp;
+       <a href="<%=PageName + "?code=" + CurrentLanguage%>">Download</a>
+       <br><br>
+       <div class="codePanel">
+       <div class="code-<%=CurrentLanguage%>"><%=GetProxyCode ()%></div>
+       </div>
+<%} else if (CurrentPage == "wsdl") {%>
+<!--
+       **********************************************************
+       Service description
+-->
+       <% if (descriptions.Count > 1 || schemas.Count > 1) {%>
+       The description of this web service is composed by several documents. Click on the document you want to see:
+       
+       <ul>
+       <% 
+               for (int n=0; n<descriptions.Count; n++)
+                       Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=wsdl&docind=" + n + "'>WSDL document " + descriptions[n].TargetNamespace + "</a></li>");
+               for (int n=0; n<schemas.Count; n++)
+                       Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=schema&docind=" + n + "'>Xml Schema " + schemas[n].TargetNamespace + "</a></li>");
+       %>
+       </ul>
+       
+       <%} else {%>
+       <%}%>
+       <br>
+       <span class="label"><%=CurrentDocumentName%></span>&nbsp;&nbsp;&nbsp;
+       <a href="<%=PageName + "?" + CurrentDocType + "=" + CurrentDocInd %>">Download</a>
+       <br><br>
+       <div class="codePanel">
+       <div class="code-xml"><%=GenerateDocument ()%></div>
+       </div>
+
+<%}%>
+
+<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+</td>
+<td width="20px"></td>
+</tr>
+
+</table>
+</body>
+</html>
index 5addd56380e2fc28228f64095e05cfff85eba3c1..9ca4996f8b26f0efa1599e21ace935949fd11939 100644 (file)
@@ -4,9 +4,11 @@ monodir = $(sysconfdir)/mono/4.0
 
 EXTRA_DIST =  machine.config \
              web.config \
+             DefaultWsdlHelpGenerator.aspx \
              settings.map
 
 mono_DATA =  machine.config \
             web.config \
+             DefaultWsdlHelpGenerator.aspx \
             settings.map
 
index e1912412fe01d527882d233262fa1a419bf47e70..1292eb68e8e49e16e8f124acf543acc707a46c69 100644 (file)
@@ -83,6 +83,9 @@
                        <section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                        <section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                        <section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+                       <section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+                       <section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                       <section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                </sectionGroup>
                <section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
                <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                        <bindingExtensions>
                                <add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                        </bindingExtensions>
+                       <endpointExtensions>
+                               <add name="dynamicEndpoint" type="System.ServiceModel.Discovery.Configuration.DynamicEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="discoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.DiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="udpDiscoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpDiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="announcementEndpoint" type="System.ServiceModel.Discovery.Configuration.AnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="udpAnnouncementEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpAnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="webHttpEndpoint" type="System.ServiceModel.Configuration.WebHttpEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                               <add name="webScriptEndpoint" type="System.ServiceModel.Configuration.WebScriptEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+                       </endpointExtensions>
                </extensions>
        </system.serviceModel>
 </configuration>
index db1c2b83480e49f93fbdc95bb381d765734b82d9..2a7dfd2edacacfcafbfba2a9eb837929f3445b1b 100644 (file)
@@ -76,6 +76,7 @@
                  <!--
                  <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
                  -->
+                  <add verb="*" path="*.svc" type="System.ServiceModel.Channels.SvcHttpHandlerFactory, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                  <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
                  <!--
                  <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
index 1251d04c3c303fa8343ba18b1c9271f5957bdd99..0c254339bbeb187633614d8bcd0178fdfe10326b 100644 (file)
@@ -28,6 +28,7 @@ libeglib_la_SOURCES = \
        sort.frag.h     \
        glib.h          \
        garray.c        \
+       gbytearray.c    \
        gerror.c        \
        ghashtable.c    \
        gmem.c          \
index 3956c6a1552eeaf38c5fede4b98022764cd29f6c..c10aa6feacf14d103831c1161f5108d5096a2546 100644 (file)
@@ -50,6 +50,7 @@
 #define g_hash_table_new_full monoeg_g_hash_table_new_full
 #define g_hash_table_remove monoeg_g_hash_table_remove
 #define g_hash_table_size monoeg_g_hash_table_size
+#define g_hash_table_print_stats monoeg_g_hash_table_print_stats
 #define g_int_equal monoeg_g_int_equal
 #define g_int_hash monoeg_g_int_hash
 #define g_list_alloc monoeg_g_list_alloc
 #define g_pattern_spec_new monoeg_g_pattern_spec_new
 #define g_print monoeg_g_print
 #define g_printf monoeg_g_printf
+#define g_printerr monoeg_g_printerr
 #define g_propagate_error monoeg_g_propagate_error
 #define g_ptr_array_add monoeg_g_ptr_array_add
 #define g_ptr_array_foreach monoeg_g_ptr_array_foreach
 #define g_strerror monoeg_g_strerror
 #define g_strescape monoeg_g_strescape
 #define g_strfreev monoeg_g_strfreev
+#define g_strdupv monoeg_g_strdupv
 #define g_string_append monoeg_g_string_append
 #define g_string_append_c monoeg_g_string_append_c
 #define g_string_append_len monoeg_g_string_append_len
diff --git a/eglib/src/gbytearray.c b/eglib/src/gbytearray.c
new file mode 100644 (file)
index 0000000..daa4bca
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Arrays
+ *
+ * Author:
+ *   Geoff Norton  (gnorton@novell.com)
+ *
+ * (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.
+ */
+
+#include <stdlib.h>
+#include <glib.h>
+
+#define INITIAL_CAPACITY 16
+
+static void
+ensure_capacity (GByteArray *array,
+                int capacity)
+{
+       int new_capacity = MAX (array->len, INITIAL_CAPACITY);
+
+       if (capacity < array->len)
+               return;
+
+       while (new_capacity < capacity) {
+               new_capacity <<= 1;
+       }
+       capacity = new_capacity;
+       array->data = (guint8*) g_realloc (array->data, capacity);
+
+       memset (array->data + array->len, 0, capacity - array->len);
+       array->len = capacity;
+}
+
+GByteArray *
+g_byte_array_new ()
+{
+       GByteArray *rv = g_new0 (GByteArray, 1);
+
+       ensure_capacity (rv, INITIAL_CAPACITY);
+
+       return rv;
+}
+
+guint8*
+g_byte_array_free (GByteArray *array,
+             gboolean free_segment)
+{
+       guint8* rv = NULL;
+
+       g_return_val_if_fail (array != NULL, NULL);
+
+       if (free_segment)
+               g_free (array->data);
+       else
+               rv = array->data;
+
+       g_free (array);
+
+       return rv;
+}
+
+GByteArray *
+g_array_append (GByteArray *array,
+                    guint8 *data,
+                    guint len)
+{
+       g_return_val_if_fail (array != NULL, NULL);
+
+       ensure_capacity (array, array->len + len);
+  
+       memmove (array->data + array->len, data, len);
+
+       array->len += len;
+
+       return array;
+}
index 365752a539f7fe1fe05402bd6ca4592861321e93..bdfb59081a595fe6eb6e41b0496fb036235a4497 100644 (file)
@@ -334,6 +334,21 @@ g_hash_table_find (GHashTable *hash, GHRFunc predicate, gpointer user_data)
        return NULL;
 }
 
+void
+g_hash_table_remove_all (GHashTable *hash)
+{
+       int i;
+       
+       g_return_if_fail (hash != NULL);
+
+       for (i = 0; i < hash->table_size; i++){
+               Slot *s;
+
+               for (s = hash->table [i]; s != NULL; s = s->next)
+                       g_hash_table_remove (hash, s->key);
+       }
+}
+
 gboolean
 g_hash_table_remove (GHashTable *hash, gconstpointer key)
 {
index 78bba09590a6d6cb1d464e25c4b93f88e751235c..0271ebf189b6331218e5349ed870c59decb3924a 100644 (file)
@@ -85,7 +85,6 @@ typedef int32_t        gboolean;
 #endif
 #endif
 
-
 /*
  * Macros
  */
@@ -198,6 +197,7 @@ gboolean        g_hash_table_lookup_extended (GHashTable *hash, gconstpointer ke
 void            g_hash_table_foreach         (GHashTable *hash, GHFunc func, gpointer user_data);
 gpointer        g_hash_table_find            (GHashTable *hash, GHRFunc predicate, gpointer user_data);
 gboolean        g_hash_table_remove          (GHashTable *hash, gconstpointer key);
+void            g_hash_table_remove_all      (GHashTable *hash);
 guint           g_hash_table_foreach_remove  (GHashTable *hash, GHRFunc func, gpointer user_data);
 guint           g_hash_table_foreach_steal   (GHashTable *hash, GHRFunc func, gpointer user_data);
 void            g_hash_table_destroy         (GHashTable *hash);
@@ -434,6 +434,20 @@ GList *g_list_insert_before (GList         *list,
 GList *g_list_sort          (GList         *sort,
                             GCompareFunc   func);
 
+/*
+ * ByteArray
+ */
+
+typedef struct _GByteArray GByteArray;
+struct _GByteArray {
+       guint8 *data;
+       gint len;
+};
+
+GByteArray *g_byte_array_new    (void);
+GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len);
+guint8*  g_byte_array_free      (GByteArray *array, gboolean free_segment);
+
 /*
  * Array
  */
@@ -496,6 +510,7 @@ void     g_queue_push_tail (GQueue   *queue,
 gboolean g_queue_is_empty  (GQueue   *queue);
 GQueue  *g_queue_new       (void);
 void     g_queue_free      (GQueue   *queue);
+void     g_queue_foreach   (GQueue   *queue, GFunc func, gpointer user_data);
 
 /*
  * Messages
@@ -542,6 +557,8 @@ void           g_assertion_message    (const gchar *format, ...) G_GNUC_NORETURN
 #endif  /* ndef HAVE_C99_SUPPORT */
 #define g_log_set_handler(a,b,c,d)
 
+#define G_GNUC_INTERNAL
+
 /*
  * Conversions
  */
@@ -891,16 +908,30 @@ glong     g_utf8_strlen        (const gchar *str, gssize max);
 #   define GUINT16_TO_LE(x) (x)
 #   define GUINT_TO_LE(x)   (x)
 #   define GUINT32_TO_BE(x) GUINT32_SWAP_LE_BE(x)
+#   define GUINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x)
 #   define GUINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x)
+#   define GUINT64_FROM_BE(x) GUINT64_SWAP_LE_BE(x)
+#   define GINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x)
+#   define GINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x)
+#   define GINT64_FROM_BE(x) GUINT64_SWAP_LE_BE(x)
 #else
 #   define GUINT32_TO_LE(x) GUINT32_SWAP_LE_BE(x)
 #   define GUINT64_TO_LE(x) GUINT64_SWAP_LE_BE(x)
 #   define GUINT16_TO_LE(x) GUINT16_SWAP_LE_BE(x)
 #   define GUINT_TO_LE(x)   GUINT32_SWAP_LE_BE(x)
 #   define GUINT32_TO_BE(x) (x)
+#   define GUINT16_FROM_BE(x) (x)
 #   define GUINT32_FROM_BE(x) (x)
+#   define GUINT64_FROM_BE(x) (x)
+#   define GINT16_FROM_BE(x) (x)
+#   define GINT32_FROM_BE(x) (x)
+#   define GINT64_FROM_BE(x) (x)
 #endif
 
+#define GINT64_FROM_LE(x)   (GUINT64_TO_LE (x))
+#define GINT32_FROM_LE(x)   (GUINT32_TO_LE (x))
+#define GINT16_FROM_LE(x)   (GUINT16_TO_LE (x))
+
 #define GUINT32_FROM_LE(x)  (GUINT32_TO_LE (x))
 #define GUINT64_FROM_LE(x)  (GUINT64_TO_LE (x))
 #define GUINT16_FROM_LE(x)  (GUINT16_TO_LE (x))
index 2272c97ff97c157b3631f5fa330753604ec65196..bce2f0a159f1ea9a9fc06819d41b16388aa6e628 100644 (file)
@@ -153,6 +153,6 @@ g_assertion_message (const gchar *format, ...)
        va_start (args, format);
        g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
        va_end (args);
-       g_assert_not_reached ();
+       abort ();
 }
 
index 2eedbf6f9f3d4973fdff90942610df59b2808e29..cd94e1f36d0ed798a42c2fea2a9447fb81277e8e 100644 (file)
@@ -105,3 +105,9 @@ g_queue_free (GQueue *queue)
        g_list_free (queue->head);
        g_free (queue);
 }
+
+void 
+g_queue_foreach (GQueue *queue, GFunc func, gpointer user_data)
+{
+       g_list_foreach (queue->head, func, user_data);
+}
index 1d0c956d17d3fab14b63f70677c27cc4a38f0d90..b322ff5dd563579ba573c8c94e5ef7efc654a5a5 100644 (file)
@@ -33,7 +33,6 @@ split_cmdline (const gchar *cmdline, GPtrArray *array, GError **error)
 {
        gchar *ptr;
        gchar c;
-       gboolean in_quote = FALSE;
        gboolean escaped = FALSE;
        gchar quote_char = '\0';
        GString *str;
@@ -42,18 +41,28 @@ split_cmdline (const gchar *cmdline, GPtrArray *array, GError **error)
        ptr = (gchar *) cmdline;
        while ((c = *ptr++) != '\0') {
                if (escaped) {
-                       escaped = FALSE;
-                       if (!g_ascii_isspace (c))
+                       /*
+                        * \CHAR is only special inside a double quote if CHAR is
+                        * one of: $`"\ and newline
+                        */
+                       if (quote_char == '\"'){
+                               if (!(c == '$' || c == '`' || c == '"' || c == '\\'))
+                                       g_string_append_c (str, '\\');
                                g_string_append_c (str, c);
-               } else if (in_quote) {
+                       } else {
+                               if (!g_ascii_isspace (c))
+                                       g_string_append_c (str, c);
+                       }
+                       escaped = FALSE;
+               } else if (quote_char) {
                        if (c == quote_char) {
-                               in_quote = FALSE;
                                quote_char = '\0';
                                g_ptr_array_add (array, g_string_free (str, FALSE));
                                str = g_string_new ("");
-                       } else {
+                       } else if (c == '\\'){
+                               escaped = TRUE;
+                       } else 
                                g_string_append_c (str, c);
-                       }
                } else if (g_ascii_isspace (c)) {
                        if (str->len > 0) {
                                g_ptr_array_add (array, g_string_free (str, FALSE));
@@ -62,7 +71,6 @@ split_cmdline (const gchar *cmdline, GPtrArray *array, GError **error)
                } else if (c == '\\') {
                        escaped = TRUE;
                } else if (c == '\'' || c == '"') {
-                       in_quote = TRUE;
                        quote_char = c;
                } else {
                        g_string_append_c (str, c);
@@ -76,7 +84,7 @@ split_cmdline (const gchar *cmdline, GPtrArray *array, GError **error)
                return -1;
        }
 
-       if (in_quote) {
+       if (quote_char) {
                if (error)
                        *error = g_error_new (G_LOG_DOMAIN, 0, "Unfinished quote.");
                g_string_free (str, TRUE);
index 424abf8d11317500edc7d9c8208ce147962723ec..015f798faecb10a1c1729cb455f3fe5013f4ab5a 100644 (file)
@@ -69,6 +69,10 @@ g_strdupv (gchar **str_array)
        guint length;
        gchar **ret;
        guint i;
+
+       if (!str_array)
+               return NULL;
+
        length = g_strv_length(str_array);
        ret = g_new0(gchar *, length + 1);
        for (i = 0; str_array[i]; i++) {
index 6abd703deeb1f9cfc196faded14ab7919a78de48..cb1776107ba4ba377bd254e3eceb7c4122fa1b2d 100644 (file)
@@ -65,7 +65,7 @@ utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **erro
        glong in_pos, ret;
 
        if (len < 0)
-               len = strlen (str);
+               len = (glong) strlen (str);
 
        in_pos = 0;
        ret = 0;
@@ -215,7 +215,7 @@ g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_wr
                *error = NULL;
 
        if (len < 0)
-               len = strlen (str);
+               len = (glong) strlen (str);
 
        if (items_read)
                *items_read = 0;
index 3411ef90b4afa7c0c2592ab28c0384c1c2a8669a..0f4f07a80a534a836e7c8f0c16e664c3a99567fc 100644 (file)
@@ -29,7 +29,7 @@ SOURCES = \
 
 test_eglib_SOURCES = $(SOURCES)
 
-test_eglib_CFLAGS = -Wall -Werror -D_FORTIFY_SOURCE=2 -I$(srcdir)/../src -I../src -DDRIVER_NAME=\"EGlib\"
+test_eglib_CFLAGS = -Wall -D_FORTIFY_SOURCE=2 -I$(srcdir)/../src -I../src -DDRIVER_NAME=\"EGlib\"
 test_eglib_LDADD = ../src/libeglib.la
 
 run-eglib: all
index 38252cd2e0e196db8ddd90c53d435fa5ec0829bd..c55e27c6300897087d6076178a08dadcc5631ce3 100644 (file)
@@ -226,6 +226,39 @@ test_shell_argv3 ()
        return OK;
 }
 
+// This was the 2.8 showstopper error
+RESULT
+test_shell_argv4 ()
+{
+       GError *error;
+       gint argc;
+       gchar **argv;
+       gboolean ret;
+       char *str = "'/usr/bin/gnome-terminal' -e \"bash -c 'read -p \\\"Press any key to continue...\\\" -n1;'\"";
+
+       argv = NULL;
+       argc = 0;
+       error = NULL;
+       ret = g_shell_parse_argv (str, &argc, &argv, &error);
+       if (!ret)
+               return FAILED ("1. It should return TRUE");
+       if (argc != 3)
+               return FAILED ("2. argc was %d", argc);
+       if (argv == NULL)
+               return FAILED ("3. argv[0] was NULL");
+       if (error != NULL)
+               return FAILED ("4. error was set");
+
+       if (strcmp (argv [0], "/usr/bin/gnome-terminal"))
+               return FAILED ("5. Expected /usr/bin/gnome-terminal got %s", argv [0]);
+       if (strcmp (argv [1], "-e"))
+               return FAILED ("6. Expected -e, got: %s", argv [1]);
+       if (strcmp (argv [2], "bash -c 'read -p \"Press any key to continue...\" -n1;'"))
+               return FAILED ("7. Got unexpected result: %s\n", argv [2]);
+       
+       return OK;
+}
+
 RESULT
 test_quote ()
 {
@@ -244,6 +277,7 @@ static Test shell_tests [] = {
        {"g_shell_parse_argv1", test_shell_argv1},
        {"g_shell_parse_argv2", test_shell_argv2},
        {"g_shell_parse_argv3", test_shell_argv3},
+       {"g_shell_parse_argv4", test_shell_argv4},
        {"g_shell_quote", test_quote},
        {NULL, NULL}
 };
index 83f711516c975a7a55187de5eecba684e31165b7..14d24d6ac772f2933455747c1247f7adb2589eff 100644 (file)
@@ -621,6 +621,30 @@ test_ascii_strdown ()
        return OK;
 }
 
+RESULT
+test_strdupv ()
+{
+       gchar **one;
+       gchar **two;
+       gint len;
+
+       one = g_strdupv (NULL);
+       if (one)
+               return FAILED ("Should have been NULL");
+
+       one = g_malloc (sizeof (gchar *));
+       *one = NULL;
+       two = g_strdupv (one);
+       if (!two)
+               FAILED ("Should have been not NULL");
+       len = g_strv_length (two);
+       if (len)
+               FAILED ("Should have been 0");
+       g_strfreev (two);
+       g_strfreev (one);
+       return NULL;
+}
+
 static Test strutil_tests [] = {
        {"g_strfreev", test_strfreev},
        {"g_strconcat", test_concat},
@@ -639,6 +663,7 @@ static Test strutil_tests [] = {
        {"g_strescape", test_strescape},
        {"g_ascii_strncasecmp", test_ascii_strncasecmp },
        {"g_ascii_strdown", test_ascii_strdown },
+       {"g_strdupv", test_strdupv },
        {NULL, NULL}
 };
 
index 3835ddfefab41596718c8b6b787c7c0dbc8f7bbd..a0b4ccb42febfa40ac39454dcd54efaa6c16c3cd 100644 (file)
@@ -415,6 +415,10 @@ Turns on profiling.  For more information about profiling applications
 and code coverage see the sections "PROFILING" and "CODE COVERAGE"
 below. 
 .TP
+This option can be used multiple times, each time will load an
+additional profiler.   This allows developers to use modules that
+extend the JIT through the Mono profiling interface.
+.TP
 \fB--trace[=expression]\fR
 Shows method names as they are invoked.  By default all methods are
 traced. 
index 094b8ea702ffb3a6a8eb29515a8cd3b9348546f0..cabe0042119692a527cbebbe3f6fba27a08e45c5 100644 (file)
@@ -8,8 +8,10 @@ net_2_0_SUBDIRS := build mcs class nunit24 ilasm tools tests errors
 moonlight_bootstrap_SUBDIRS := build mcs class
 moonlight_raw_SUBDIRS := build mcs class tools
 moonlight_SUBDIRS := tools tests errors
-monotouch_SUBDIRS := build mcs class
+monodroid_bootstrap_SUBDIRS := build mcs class
+monodroid_SUBDIRS := build mcs class
 monotouch_bootstrap_SUBDIRS := build mcs class
+monotouch_SUBDIRS := build mcs class
 net_3_5_SUBDIRS := build class tools/xbuild
 net_4_0_bootstrap_SUBDIRS := build mcs class tools 
 net_4_0_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
@@ -107,6 +109,8 @@ $(_boot_:%=profile-do--net_4_0--%):           profile-do--net_4_0--%:
 $(_boot_:%=profile-do--net_4_0_bootstrap--%): profile-do--net_4_0_bootstrap--%: profile-do--net_2_0--%
 $(_boot_:%=profile-do--net_3_5--%):           profile-do--net_3_5--%:           profile-do--net_2_0--%
 $(_boot_:%=profile-do--moonlight--%):           profile-do--moonlight--%:           profile-do--moonlight_raw--%
+$(_boot_:%=profile-do--monodroid--%):         profile-do--monodroid--%:         profile-do--monodroid_bootstrap--%
+$(_boot_:%=profile-do--monodroid_bootstrap--%): profile-do--monodroid_bootstrap--%: profile-do--net_2_0--%
 $(_boot_:%=profile-do--monotouch--%):         profile-do--monotouch--%:         profile-do--monotouch_bootstrap--%
 $(_boot_:%=profile-do--monotouch_bootstrap--%): profile-do--monotouch_bootstrap--%: profile-do--net_2_0--%
 $(_boot_:%=profile-do--moonlight_raw--%):       profile-do--moonlight_raw--%:       profile-do--moonlight_bootstrap--%
index f5d7ffd767bad30e1fec5a6ec3122f50da8f350c..15961b762cccfb8ee8c021d26f4f23ff7a706466 100644 (file)
@@ -233,6 +233,8 @@ $(the_lib): $(build_lib)
        $(Q) test ! -f $(build_lib:.dll=.pdb) || mv $(build_lib:.dll=.pdb) $(the_lib:.dll=.pdb)
 endif
 
+library_CLEAN_FILES += $(PROFILE)_aot.log
+
 ifdef PLATFORM_AOT_SUFFIX
 Q_AOT=$(if $(V),,@echo "AOT [$(PROFILE)] $(notdir $(@))";)
 $(the_lib)$(PLATFORM_AOT_SUFFIX): $(the_lib)
@@ -268,7 +270,7 @@ $(response): $(sourcefile)
        @echo Converting $(sourcefile) to $@ ...
        @cat $(sourcefile) | $(PLATFORM_CHANGE_SEPARATOR_CMD) >$@
 endif
-       
+
 endif
 
 -include $(makefrag)
diff --git a/mcs/build/profiles/monodroid.make b/mcs/build/profiles/monodroid.make
new file mode 100644 (file)
index 0000000..b4cb827
--- /dev/null
@@ -0,0 +1,19 @@
+#! -*- makefile -*-
+
+my_runtime = $(RUNTIME) $(RUNTIME_FLAGS) --security=temporary-smcs-hack
+INTERNAL_SMCS = $(my_runtime) $(topdir)/class/lib/$(PROFILE)/smcs.exe
+
+BOOTSTRAP_PROFILE = monodroid_bootstrap
+
+BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(my_runtime) $(topdir)/class/lib/$(BOOTSTRAP_PROFILE)/smcs.exe
+MCS = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_SMCS)
+
+profile-check:
+       @:
+
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOBILE -d:MONODROID
+FRAMEWORK_VERSION = 2.1
+NO_TEST = yes
+
+# the tuner takes care of the install
+NO_INSTALL = yes
diff --git a/mcs/build/profiles/monodroid_bootstrap.make b/mcs/build/profiles/monodroid_bootstrap.make
new file mode 100644 (file)
index 0000000..60fe305
--- /dev/null
@@ -0,0 +1,21 @@
+#! -*- makefile -*-
+
+INTERNAL_SMCS = $(RUNTIME) $(RUNTIME_FLAGS) --security=temporary-smcs-hack $(topdir)/class/lib/$(PROFILE)/smcs.exe
+INTERNAL_GMCS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/basic/gmcs.exe
+
+BOOTSTRAP_PROFILE = net_2_0
+BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+MCS = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_SMCS)
+
+# We can enable this if System.dll depends on features of the mscorlib.dll from this profile
+#PROFILE_MCS_HAS_BOOTSTRAP_FALLBACK = yes
+
+profile-check:
+       @:
+
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOBILE -d:MONODROID
+FRAMEWORK_VERSION = 2.1
+NO_TEST = yes
+
+# the tuner takes care of the install
+NO_INSTALL = yes
index 97d1dcffb216450cb3c8850f0a13ce806b42964a..6fcbf98da8538c372856a755bc2b6f5bbfa6c42a 100644 (file)
@@ -11,7 +11,7 @@ MCS = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_
 profile-check:
        @:
 
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MONOTOUCH
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOBILE -d:MONOTOUCH
 FRAMEWORK_VERSION = 2.1
 NO_TEST = yes
 
index 36f661d22e7c4b7acb323d78c34a039e68622021..e955b1e6f5f21cf3ef742429e7104e5b1b16dd1e 100644 (file)
@@ -13,7 +13,7 @@ MCS = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdi
 profile-check:
        @:
 
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MONOTOUCH
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOBILE -d:MONOTOUCH
 FRAMEWORK_VERSION = 2.1
 NO_TEST = yes
 
index 1515bb7e966518713c50c9157ddc452dc6722ea4..c3b59c7382484ed8cf196d34d54fb98882fe1ef4 100644 (file)
@@ -117,12 +117,20 @@ net_2_0_dirs := \
        Mono.CSharp                     \
        Moonlight.Build.Tasks           \
        WindowsBase                     \
-       System.Data.Services
+       System.Data.Services    \
+       System.Data.Services.Client \
+       System.Net
 
 net_2_0_only_dirs := \
        System.Web.Extensions_1.0       \
        System.Web.Extensions.Design_1.0
 
+net_2_1_bootstrap_dirs := \
+       corlib          \
+       System          \
+       Mono.CompilerServices.SymbolWriter      \
+       System.Core
+
 moonlight_dirs := \
        corlib                  \
        Mono.CompilerServices.SymbolWriter \
@@ -136,7 +144,7 @@ moonlight_dirs := \
        System.ServiceModel     \
        System.ServiceModel.Web
 
-monotouch_dirs := \
+mobile_dirs := \
        corlib  \
        Mono.CompilerServices.SymbolWriter      \
        System.Core     \
@@ -156,15 +164,12 @@ monotouch_dirs := \
        System.Data     \
        Mono.Cairo      \
        Mono.Data.Sqlite
-
-net_3_5_dirs := \
+       
+net_3_5_only_dirs := \
        Microsoft.Build.Framework       \
        Microsoft.Build.Utilities       \
        Microsoft.Build.Engine          \
-       Microsoft.Build.Tasks           \
-       Moonlight.Build.Tasks           \
-       System.Web.Extensions.Design    \
-       System.Data.Services.Client
+       Microsoft.Build.Tasks
 
 net_4_0_dirs := \
        System.Dynamic          \
@@ -181,17 +186,19 @@ net_4_0_dirs := \
 
 net_2_0_bootstrap_SUBDIRS := $(bootstrap_dirs)
 net_2_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs)
-moonlight_bootstrap_SUBDIRS := corlib System Mono.CompilerServices.SymbolWriter System.Core
+moonlight_bootstrap_SUBDIRS := $(net_2_1_bootstrap_dirs)
 moonlight_raw_SUBDIRS := $(moonlight_dirs)
-monotouch_bootstrap_SUBDIRS := corlib System Mono.CompilerServices.SymbolWriter System.Core
-monotouch_SUBDIRS := $(monotouch_dirs)
-net_3_5_SUBDIRS := $(net_3_5_dirs)
+monodroid_bootstrap_SUBDIRS := $(net_2_1_bootstrap_dirs)
+monodroid_SUBDIRS := $(mobile_dirs)
+monotouch_bootstrap_SUBDIRS := $(net_2_1_bootstrap_dirs)
+monotouch_SUBDIRS := $(mobile_dirs)
+net_3_5_SUBDIRS := $(net_3_5_only_dirs)
 net_4_0_bootstrap_SUBDIRS := $(bootstrap_dirs) Mono.Posix System.Core
 net_4_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs)
 
 include ../build/rules.make
 
-SUBDIRS = $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(moonlight_dirs) $(monotouch_dirs) $(net_3_5_dirs) $(net_4_0_dirs)
+SUBDIRS = $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(moonlight_dirs) $(mobile_dirs) $(net_4_0_dirs)
 
 DIST_ONLY_SUBDIRS = dlr
 
index 24e6bb9c1feedf8880a148c2e45f8534e1cb362a..66a3bc43b790408e1024ed0144461f1e65a3ebfa 100644 (file)
@@ -50,7 +50,11 @@ namespace System.Windows.Forms.CarbonInternal {
                private static DragTrackingDelegate DragTrackingHandler = new DragTrackingDelegate (TrackingCallback);
 
                static Dnd () {
-                       InstallTrackingHandler (DragTrackingHandler, IntPtr.Zero, IntPtr.Zero);
+                       try {
+                               InstallTrackingHandler (DragTrackingHandler, IntPtr.Zero, IntPtr.Zero);
+                       } catch (EntryPointNotFoundException) {
+                               // it is deprecated in 10.6 and does not exist anymore.
+                       }
                }
 
                internal Dnd () {
index f0ef5d2d0cb016b897e8b2f8b5858f339fa06434..f04124d0ea6485a6708139909d54a431398e8345 100644 (file)
@@ -129,10 +129,10 @@ namespace MonoTests.System.Windows.Forms
                        logCtor.DefineParameter (1, ParameterAttributes.None, "test");\r
                        logCtor.DefineParameter (2, ParameterAttributes.None, "obj");\r
                        ILGenerator logIL = logCtor.GetILGenerator ();\r
-
-                       logIL.Emit (OpCodes.Ldarg_0);
-                       logIL.Emit (OpCodes.Call, typeof (object).GetConstructor (Type.EmptyTypes));
-
+\r
+                       logIL.Emit (OpCodes.Ldarg_0);\r
+                       logIL.Emit (OpCodes.Call, typeof (object).GetConstructor (Type.EmptyTypes));\r
+\r
                        logIL.Emit (OpCodes.Ldarg_0);\r
                        logIL.Emit (OpCodes.Ldarg_1);\r
                        logIL.Emit (OpCodes.Stfld, logField);\r
index 75b0ae8a385fb705be3dff7996aa4a83bbc86fb9..7b49d4d246bca84af7ab71e655752228826a7ea4 100644 (file)
@@ -4,15 +4,11 @@ include ../../build/rules.make
 
 LIBRARY = Microsoft.Build.Engine.dll
 
-ifeq (1.0, $(FRAMEWORK_VERSION))
-LIBRARY_NAME = dummy-Microsoft.Build.Engine.dll
-NO_INSTALL = yes
-NO_TEST = yes
-NO_SIGN_ASSEMBLY = yes
-endif
+BUILD_FRAMEWORK = Microsoft.Build.Framework.dll
 
 ifeq (3.5, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v3.5
+BUILD_FRAMEWORK := $(topdir)/class/lib/$(PROFILE)/$(BUILD_FRAMEWORK)
 else
 ifeq (4.0, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v4.0
@@ -24,11 +20,11 @@ LIB_MCS_FLAGS = \
        /r:System.dll                           \
        /r:System.Core.dll              \
        /r:System.Xml.dll                       \
-       /r:Microsoft.Build.Framework.dll        \
+       /r:$(BUILD_FRAMEWORK)                   \
        /r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll
 
 TEST_MCS_FLAGS = \
-       /r:Microsoft.Build.Framework.dll        \
+       /r:$(BUILD_FRAMEWORK)   \
        /r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll
 
 EXTRA_DISTFILES = \
index 6f5f28020600c3096e4ba95be06542df862c222c..a07b1e4550ed7fe5a3cab5aff2bfec67d0da94d8 100644 (file)
@@ -59,7 +59,7 @@ namespace Microsoft.Build.BuildEngine {
                bool no_message_color, use_colors;
                bool noItemAndPropertyList;
 
-               List<BuildStatusEventArgs> events;
+               List<BuildEvent> events;
                Dictionary<string, List<string>> errorsTable;
                Dictionary<string, List<string>> warningsTable;
                SortedDictionary<string, PerfInfo> targetPerfTable, tasksPerfTable;
@@ -96,7 +96,7 @@ namespace Microsoft.Build.BuildEngine {
                        this.colorSet = colorSet;
                        this.colorReset = colorReset;
 
-                       events = new List<BuildStatusEventArgs> ();
+                       events = new List<BuildEvent> ();
                        errorsTable = new Dictionary<string, List<string>> ();
                        warningsTable = new Dictionary<string, List<string>> ();
                        targetPerfTable = new SortedDictionary<string, PerfInfo> ();
@@ -205,19 +205,23 @@ namespace Microsoft.Build.BuildEngine {
                {
                        this.eventSource = eventSource;
 
-                        eventSource.BuildStarted +=  new BuildStartedEventHandler (BuildStartedHandler);
-                        eventSource.BuildFinished += new BuildFinishedEventHandler (BuildFinishedHandler);
-                        eventSource.ProjectStarted += new ProjectStartedEventHandler (ProjectStartedHandler);
-                        eventSource.ProjectFinished += new ProjectFinishedEventHandler (ProjectFinishedHandler);
-                        eventSource.TargetStarted += new TargetStartedEventHandler (TargetStartedHandler);
-                        eventSource.TargetFinished += new TargetFinishedEventHandler (TargetFinishedHandler);
-                        eventSource.TaskStarted += new TaskStartedEventHandler (TaskStartedHandler);
-                        eventSource.TaskFinished += new TaskFinishedEventHandler (TaskFinishedHandler);
-                        eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
-                        eventSource.WarningRaised += new BuildWarningEventHandler (WarningHandler);
-                        eventSource.ErrorRaised += new BuildErrorEventHandler (ErrorHandler);
+                       eventSource.BuildStarted += BuildStartedHandler;
+                       eventSource.BuildFinished += BuildFinishedHandler;
+
+                       eventSource.ProjectStarted += PushEvent;
+                       eventSource.ProjectFinished += PopEvent;
+
+                       eventSource.TargetStarted += PushEvent;
+                       eventSource.TargetFinished += PopEvent;
+
+                       eventSource.TaskStarted += PushEvent;
+                       eventSource.TaskFinished += PopEvent;
+
+                       eventSource.MessageRaised += MessageHandler;
+                       eventSource.WarningRaised += WarningHandler;
+                       eventSource.ErrorRaised += ErrorHandler;
                }
-               
+
                public void BuildStartedHandler (object sender, BuildStartedEventArgs args)
                {
                        if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Normal)) {
@@ -233,7 +237,7 @@ namespace Microsoft.Build.BuildEngine {
                public void BuildFinishedHandler (object sender, BuildFinishedEventArgs args)
                {
                        if (!IsVerbosityGreaterOrEqual (LoggerVerbosity.Normal)) {
-                               PopEvent ();
+                               PopEvent (args);
                                return;
                        }
 
@@ -288,8 +292,9 @@ namespace Microsoft.Build.BuildEngine {
                                WriteLine (String.Format ("\t {0} Error(s)", errorCount));
                                WriteLine (String.Empty);
                                WriteLine (String.Format ("Time Elapsed {0}", timeElapsed));
-                       } 
-                       PopEvent ();
+                       }
+
+                       PopEvent (args);
                }
 
                public void ProjectStartedHandler (object sender, ProjectStartedEventArgs args)
@@ -299,11 +304,9 @@ namespace Microsoft.Build.BuildEngine {
                                WriteLine (String.Format ("Project \"{0}\" ({1} target(s)):", args.ProjectFile,
                                                        String.IsNullOrEmpty (args.TargetNames) ? "default" : args.TargetNames));
                                ResetColor ();
-                               WriteLine (String.Empty);
                                DumpProperties (args.Properties);
                                DumpItems (args.Items);
                        }
-                       PushEvent (args);
                }
                
                public void ProjectFinishedHandler (object sender, ProjectFinishedEventArgs args)
@@ -320,8 +323,6 @@ namespace Microsoft.Build.BuildEngine {
                        if (!projectFailed)
                                // no project has failed yet, so update the flag
                                projectFailed = !args.Succeeded;
-
-                       PopEvent ();
                }
                
                public void TargetStartedHandler (object sender, TargetStartedEventArgs args)
@@ -329,10 +330,10 @@ namespace Microsoft.Build.BuildEngine {
                        if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Normal)) {
                                indent++;
                                SetColor (eventColor);
+                               WriteLine (String.Empty);
                                WriteLine (String.Format ("Target {0}:",args.TargetName));
                                ResetColor ();
                        }
-                       PushEvent (args);
                }
                
                public void TargetFinishedHandler (object sender, TargetFinishedEventArgs args)
@@ -347,19 +348,16 @@ namespace Microsoft.Build.BuildEngine {
                                WriteLine (String.Empty);
                        }
                        indent--;
-
-                       PopEvent ();
                }
                
                public void TaskStartedHandler (object sender, TaskStartedEventArgs args)
                {
-                       if (this.verbosity == LoggerVerbosity.Detailed) {
+                       if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Detailed)) {
                                SetColor (eventColor);
                                WriteLine (String.Format ("Task \"{0}\"",args.TaskName));
                                ResetColor ();
                        }
                        indent++;
-                       PushEvent (args);
                }
                
                public void TaskFinishedHandler (object sender, TaskFinishedEventArgs args)
@@ -374,15 +372,16 @@ namespace Microsoft.Build.BuildEngine {
                                        WriteLine (String.Format ("Task \"{0}\" execution -- FAILED", args.TaskName));
                                ResetColor ();
                        }
-                       PopEvent ();
                }
                
                public void MessageHandler (object sender, BuildMessageEventArgs args)
                {
                        if (IsMessageOk (args)) {
                                if (no_message_color) {
+                                       ExecutePendingEventHandlers ();
                                        WriteLine (args.Message);
                                } else {
+                                       ExecutePendingEventHandlers ();
                                        SetColor (args.Importance == MessageImportance.High ? highMessageColor : messageColor);
                                        WriteLine (args.Message);
                                        ResetColor ();
@@ -394,6 +393,7 @@ namespace Microsoft.Build.BuildEngine {
                {
                        string msg = FormatWarningEvent (args);
                        if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Quiet)) {
+                               ExecutePendingEventHandlers ();
                                SetColor (warningColor);
                                WriteLineWithoutIndent (msg);
                                ResetColor ();
@@ -412,6 +412,7 @@ namespace Microsoft.Build.BuildEngine {
                {
                        string msg = FormatErrorEvent (args);
                        if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Quiet)) {
+                               ExecutePendingEventHandlers ();
                                SetColor (errorColor);
                                WriteLineWithoutIndent (msg);
                                ResetColor ();
@@ -444,16 +445,36 @@ namespace Microsoft.Build.BuildEngine {
                        }
                }
 
-               void PushEvent (BuildStatusEventArgs args)
+               void PushEvent<T> (object sender, T args) where T: BuildStatusEventArgs
                {
-                       events.Add (args);
+                       PushEvent (args);
+               }
+
+               void PushEvent<T> (T args) where T: BuildStatusEventArgs
+               {
+                       BuildEvent be = new BuildEvent {
+                               EventArgs = args,
+                               StartHandlerHasExecuted = false,
+                               ConsoleLogger = this
+                       };
+
+                       events.Add (be);
                        current_events_string = null;
                }
 
-               void PopEvent ()
+               void PopEvent<T> (object sender, T finished_args) where T: BuildStatusEventArgs
+               {
+                       PopEvent (finished_args);
+               }
+
+               void PopEvent<T> (T finished_args) where T: BuildStatusEventArgs
                {
+                       if (events.Count == 0)
+                               throw new InvalidOperationException ("INTERNAL ERROR: Trying to pop from an empty events stack");
+
+                       BuildEvent be = events [events.Count - 1];
                        if (performanceSummary || verbosity == LoggerVerbosity.Diagnostic) {
-                               var args = events [events.Count - 1];
+                               var args = be.EventArgs;
                                TargetStartedEventArgs tgt_args = args as TargetStartedEventArgs;
                                if (tgt_args != null) {
                                        AddPerfInfo (tgt_args.TargetName, args.Timestamp, targetPerfTable);
@@ -464,17 +485,24 @@ namespace Microsoft.Build.BuildEngine {
                                }
                        }
 
+                       be.ExecuteFinishedHandler (finished_args);
                        events.RemoveAt (events.Count - 1);
                        current_events_string = null;
                }
 
+               void ExecutePendingEventHandlers ()
+               {
+                       foreach (var be in events)
+                               be.ExecuteStartedHandler ();
+               }
+
                string EventsToString ()
                {
                        StringBuilder sb = new StringBuilder ();
 
                        string last_imported_target_file = String.Empty;
                        for (int i = 0; i < events.Count; i ++) {
-                               var args = events [i];
+                               var args = events [i].EventArgs;
                                ProjectStartedEventArgs pargs = args as ProjectStartedEventArgs;
                                if (pargs != null) {
                                        sb.AppendFormat ("{0} ({1}) ->\n", pargs.ProjectFile,
@@ -580,14 +608,18 @@ namespace Microsoft.Build.BuildEngine {
                        if (eventSource == null)
                                return;
 
-                       eventSource.BuildStarted -=  BuildStartedHandler;
+                       eventSource.BuildStarted -= BuildStartedHandler;
                        eventSource.BuildFinished -= BuildFinishedHandler;
-                       eventSource.ProjectStarted -= ProjectStartedHandler;
-                       eventSource.ProjectFinished -= ProjectFinishedHandler;
-                       eventSource.TargetStarted -= TargetStartedHandler;
-                       eventSource.TargetFinished -= TargetFinishedHandler;
-                       eventSource.TaskStarted -= TaskStartedHandler;
-                       eventSource.TaskFinished -= TaskFinishedHandler;
+
+                       eventSource.ProjectStarted -= PushEvent;
+                       eventSource.ProjectFinished -= PopEvent;
+
+                       eventSource.TargetStarted -= PushEvent;
+                       eventSource.TargetFinished -= PopEvent;
+
+                       eventSource.TaskStarted -= PushEvent;
+                       eventSource.TaskFinished -= PopEvent;
+
                        eventSource.MessageRaised -= MessageHandler;
                        eventSource.WarningRaised -= WarningHandler;
                        eventSource.ErrorRaised -= ErrorHandler;
@@ -673,7 +705,7 @@ namespace Microsoft.Build.BuildEngine {
                                return;
 
                        SetColor (eventColor);
-                       WriteLine ("\n");
+                       WriteLine (String.Empty);
                        WriteLine ("Initial Properties:");
                        ResetColor ();
 
@@ -686,7 +718,6 @@ namespace Microsoft.Build.BuildEngine {
 
                        foreach (KeyValuePair<string, string> pair in dict)
                                WriteLine (String.Format ("{0} = {1}", pair.Key, pair.Value));
-                       WriteLine ("\n");
                }
 
                void DumpItems (IEnumerable items)
@@ -695,7 +726,7 @@ namespace Microsoft.Build.BuildEngine {
                                return;
 
                        SetColor (eventColor);
-                       WriteLine ("\n");
+                       WriteLine (String.Empty);
                        WriteLine ("Initial Items:");
                        ResetColor ();
                        if (items == null)
@@ -717,7 +748,6 @@ namespace Microsoft.Build.BuildEngine {
                                        WriteLine (item.ItemSpec);
                                indent--;
                        }
-                       WriteLine ("\n");
                }
 
                public string Parameters {
@@ -762,6 +792,44 @@ namespace Microsoft.Build.BuildEngine {
                }
        }
 
+       class BuildEvent {
+               public BuildStatusEventArgs EventArgs;
+               public bool StartHandlerHasExecuted;
+               public ConsoleLogger ConsoleLogger;
+
+               public void ExecuteStartedHandler ()
+               {
+                       if (StartHandlerHasExecuted)
+                               return;
+
+                       if (EventArgs is ProjectStartedEventArgs)
+                               ConsoleLogger.ProjectStartedHandler (null, (ProjectStartedEventArgs)EventArgs);
+                       else if (EventArgs is TargetStartedEventArgs)
+                               ConsoleLogger.TargetStartedHandler (null, (TargetStartedEventArgs)EventArgs);
+                       else if (EventArgs is TaskStartedEventArgs)
+                               ConsoleLogger.TaskStartedHandler (null, (TaskStartedEventArgs)EventArgs);
+                       else if (!(EventArgs is BuildStartedEventArgs))
+                               throw new InvalidOperationException ("Unexpected event on the stack, type: " + EventArgs.GetType ());
+
+                       StartHandlerHasExecuted = true;
+               }
+
+               public void ExecuteFinishedHandler (BuildStatusEventArgs finished_args)
+               {
+                       if (!StartHandlerHasExecuted)
+                               return;
+
+                       if (EventArgs is ProjectStartedEventArgs)
+                               ConsoleLogger.ProjectFinishedHandler (null, finished_args as ProjectFinishedEventArgs);
+                       else if (EventArgs is TargetStartedEventArgs)
+                               ConsoleLogger.TargetFinishedHandler (null, finished_args as TargetFinishedEventArgs);
+                       else if (EventArgs is TaskStartedEventArgs)
+                               ConsoleLogger.TaskFinishedHandler (null, finished_args as TaskFinishedEventArgs);
+                       else if (!(EventArgs is BuildStartedEventArgs))
+                               throw new InvalidOperationException ("Unexpected event on the stack, type: " + EventArgs.GetType ());
+               }
+       }
+
        class PerfInfo {
                public TimeSpan Time;
                public int NumberOfCalls;
index 54aad29da105d31c182d8d74da138b5acb28bda7..b5bc4599fdaf567084c61605456686714338a5c4 100644 (file)
@@ -241,8 +241,10 @@ namespace Microsoft.Build.BuildEngine {
                void LogTargetSkipped (Target target, string reason)
                {
                        BuildMessageEventArgs bmea;
-                       bmea = new BuildMessageEventArgs (reason ?? String.Format ("Skipping target \"{0}\" because its outputs are up-to-date.", target.Name),
-                               null, "MSBuild", MessageImportance.Normal);
+                       bmea = new BuildMessageEventArgs (String.IsNullOrEmpty (reason)
+                                                               ? String.Format ("Skipping target \"{0}\" because its outputs are up-to-date.", target.Name)
+                                                               : reason,
+                                                       null, "MSBuild", MessageImportance.Normal);
                        target.Engine.EventSource.FireMessageRaised (this, bmea);
                }
 
index 34a542a1e1bd586e48d51c51460c8c33f3dd5012..25992a2c3e4543dcaf6f8bd9017294a39bb7bc82 100644 (file)
@@ -3,17 +3,13 @@ SUBDIRS =
 include ../../build/rules.make
 
 LIBRARY = Microsoft.Build.Tasks.dll
-ifeq (1.0, $(FRAMEWORK_VERSION))
-
-LIBRARY_NAME = dummy-Microsoft.Build.Tasks.dll
-NO_INSTALL = yes
-NO_TEST = yes
-NO_SIGN_ASSEMBLY = yes
-
-else
+BUILD_FRAMEWORK = Microsoft.Build.Framework.dll
+BUILD_ENGINE = Microsoft.Build.Engine.dll
 
 ifeq (3.5, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v3.5
+BUILD_FRAMEWORK := $(topdir)/class/lib/$(PROFILE)/$(BUILD_FRAMEWORK)
+BUILD_ENGINE := $(topdir)/class/lib/$(PROFILE)/$(BUILD_ENGINE)
 else
 ifeq (4.0, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v4.0
@@ -22,8 +18,6 @@ endif
 
 LIBRARY_NAME = Microsoft.Build.Tasks$(NAME_SUFFIX).dll
 
-endif
-
 LIB_MCS_FLAGS = \
        /r:$(corlib)                            \
        /r:System.dll                           \
@@ -31,12 +25,12 @@ LIB_MCS_FLAGS = \
        /r:System.Xml.dll                       \
        /r:System.Windows.Forms.dll             \
        /r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll  \
-       /r:Microsoft.Build.Framework.dll        \
-       /r:Microsoft.Build.Engine.dll
+       /r:$(BUILD_FRAMEWORK)   \
+       /r:$(BUILD_ENGINE)
 
 TEST_MCS_FLAGS = \
-       /r:Microsoft.Build.Engine.dll           \
-       /r:Microsoft.Build.Framework.dll        \
+       /r:$(BUILD_ENGINE)      \
+       /r:$(BUILD_FRAMEWORK)   \
        /r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll
 
 EXTRA_DISTFILES = \
index 9c1f6450fd09bf944aac6dc5cd911f639dad6a24..31676af3f4092029edc516418ece07df11dc0841 100644 (file)
@@ -5,8 +5,11 @@
 //   Marek Sieradzki (marek.sieradzki@gmail.com)
 //   Paolo Molaro (lupus@ximian.com)
 //   Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//   Lluis Sanchez Gual <lluis@novell.com>
+//   Ankit Jain <jankit@novell.com>
 //
 // (C) 2005 Marek Sieradzki
+// Copyright 2010 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
@@ -36,6 +39,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Resources;
 using System.Reflection;
+using System.Xml;
 using Microsoft.Build.Framework;
 using Microsoft.Build.Utilities;
 using Mono.XBuild.Tasks.GenerateResourceInternal;
@@ -73,7 +77,8 @@ namespace Microsoft.Build.Tasks {
                                        string sourceFile = source.ItemSpec;
                                        string outputFile = Path.ChangeExtension (sourceFile, "resources");
 
-                                       result &= CompileResourceFile (sourceFile, outputFile);
+                                       if (IsResgenRequired (sourceFile, outputFile))
+                                               result &= CompileResourceFile (sourceFile, outputFile);
 
                                        ITaskItem newItem = new TaskItem (source);
                                        source.ItemSpec = outputFile;
@@ -93,7 +98,8 @@ namespace Microsoft.Build.Tasks {
                                                continue;
                                        }
 
-                                       result &= CompileResourceFile (sources [i].ItemSpec, outputResources [i].ItemSpec);
+                                       if (IsResgenRequired (sources [i].ItemSpec, outputResources [i].ItemSpec))
+                                               result &= CompileResourceFile (sources [i].ItemSpec, outputResources [i].ItemSpec);
                                        temporaryFilesWritten.Add (outputResources [i]);
                                }
                        }
@@ -103,6 +109,78 @@ namespace Microsoft.Build.Tasks {
                        return result;
                }
                
+               // true if the resx file or any file referenced
+               // by the resx is newer than the .resources file
+               //
+               // Code taken from monodevelop
+               // main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MD1/MD1DotNetProjectHandler.cs
+               bool IsResgenRequired (string resx_filename, string resources_filename)
+               {
+                       if (IsFileNewerThan (resx_filename, resources_filename)) {
+                               Log.LogMessage (MessageImportance.Low,
+                                               "Resource file '{0}' is newer than the source file '{1}', skipping.",
+                                               resources_filename, resx_filename);
+                               return true;
+                       }
+
+                       if (String.Compare (Path.GetExtension (resx_filename), ".resx", true) != 0)
+                               return true;
+
+                       // resx file, check for files referenced from there
+                       XmlTextReader xr = null;
+                       try {
+                               // look for
+                               // <data type="System.Resources.ResXFileRef, System.Windows.Forms" ..>
+                               //   <value>... filename;.. </value>
+                               // </data>
+                               xr = new XmlTextReader (resx_filename);
+                               string basepath = Path.GetDirectoryName (resx_filename);
+                               while (xr.Read ()) {
+                                       if (xr.NodeType != XmlNodeType.Element ||
+                                               String.Compare (xr.LocalName, "data") != 0)
+                                               continue;
+
+                                       string type = xr.GetAttribute ("type");
+                                       if (String.IsNullOrEmpty (type))
+                                               continue;
+
+                                       if (String.Compare (type, "System.Resources.ResXFileRef, System.Windows.Forms") != 0)
+                                               continue;
+
+                                       xr.ReadToDescendant ("value");
+                                       if (xr.NodeType != XmlNodeType.Element)
+                                               continue;
+
+                                       string value = xr.ReadElementContentAsString ();
+
+                                       string [] parts = value.Split (';');
+                                       if (parts.Length > 0) {
+                                               string referenced_filename = Utilities.FromMSBuildPath (
+                                                               Path.Combine (basepath, parts [0]).Trim ());
+                                               if (File.Exists (referenced_filename) &&
+                                                       IsFileNewerThan (referenced_filename, resources_filename))
+                                                       return true;
+                                       }
+                               }
+                       } catch (XmlException) {
+                               // Ignore xml errors, let resgen handle it
+                               return true;
+                       } finally {
+                               if (xr != null)
+                                       xr.Close ();
+                       }
+
+                       return false;
+               }
+
+               // true if first is newer than second
+               static bool IsFileNewerThan (string first, string second)
+               {
+                       FileInfo finfo_first = new FileInfo (first);
+                       FileInfo finfo_second = new FileInfo (second);
+                       return finfo_first.LastWriteTime > finfo_second.LastWriteTime;
+               }
+
 #if false
                private IResourceReader GetReader (Stream stream, string name)
                {
@@ -154,13 +232,6 @@ namespace Microsoft.Build.Tasks {
                                return false;
                        }
 
-                       if (File.GetLastWriteTime (sname) <= File.GetLastWriteTime (dname)) {
-                               Log.LogMessage (MessageImportance.Low,
-                                               "Resource file '{0}' is newer than the source file '{1}', skipping.",
-                                               dname, sname);
-                               return true;
-                       }
-
                        Resgen resgen = new Resgen ();
                        resgen.BuildEngine = this.BuildEngine;
                        resgen.UseSourcePath = true;
@@ -298,7 +369,7 @@ namespace Microsoft.Build.Tasks {
                public override bool Execute ()
                {
                        if (String.IsNullOrEmpty (Environment.GetEnvironmentVariable ("MONO_IOMAP")))
-                               EnvironmentOverride ["MONO_IOMAP"] = "drive";
+                               EnvironmentVariables = new string [] { "MONO_IOMAP=drive" };
                        return base.Execute ();
                }
 
index e9a5ac5915ea8fbc2649e4595fbdec7bc7060169..5a0c56ec9015dd353274c2f6f8c954e7e37036fa 100644 (file)
@@ -28,6 +28,7 @@
 #if NET_2_0
 
 using System;
+using System.IO;
 
 namespace Microsoft.Build.Tasks {
        internal static class Utilities {
@@ -42,6 +43,68 @@ namespace Microsoft.Build.Tasks {
                        }
 
                }
+
+               internal static string FromMSBuildPath (string relPath)
+               {
+                       if (relPath == null || relPath.Length == 0)
+                               return null;
+
+                       bool is_windows = Path.DirectorySeparatorChar == '\\';
+                       string path = relPath;
+                       if (!is_windows)
+                               path = path.Replace ("\\", "/");
+
+                       // a path with drive letter is invalid/unusable on non-windows
+                       if (!is_windows && char.IsLetter (path [0]) && path.Length > 1 && path[1] == ':')
+                               return null;
+
+                       if (System.IO.File.Exists (path)){
+                               return Path.GetFullPath (path);
+                       }
+
+                       if (Path.IsPathRooted (path)) {
+
+                               // Windows paths are case-insensitive. When mapping an absolute path
+                               // we can try to find the correct case for the path.
+
+                               string[] names = path.Substring (1).Split ('/');
+                               string part = "/";
+
+                               for (int n=0; n<names.Length; n++) {
+                                       string[] entries;
+
+                                       if (names [n] == ".."){
+                                               if (part == "/")
+                                                       return ""; // Can go further back. It's not an existing file
+                                               part = Path.GetFullPath (part + "/..");
+                                               continue;
+                                       }
+
+                                       entries = Directory.GetFileSystemEntries (part);
+
+                                       string fpath = null;
+                                       foreach (string e in entries) {
+                                               if (string.Compare (Path.GetFileName (e), names[n], true) == 0) {
+                                                       fpath = e;
+                                                       break;
+                                               }
+                                       }
+                                       if (fpath == null) {
+                                               // Part of the path does not exist. Can't do any more checking.
+                                               part = Path.GetFullPath (part);
+                                               for (; n < names.Length; n++)
+                                                       part += "/" + names[n];
+                                               return part;
+                                       }
+
+                                       part = fpath;
+                               }
+                               return Path.GetFullPath (part);
+                       } else {
+                               return Path.GetFullPath (path);
+                       }
+               }
+
        }
 
 }
index a600ff9b67e5baba9cc206e50f00cb5285364bd8..1a3ab984a5b12a7cb57addc07ceb7887b89ab2c5 100644 (file)
@@ -3,15 +3,11 @@ SUBDIRS =
 include ../../build/rules.make
 
 LIBRARY = Microsoft.Build.Utilities.dll
-ifeq (1.0, $(FRAMEWORK_VERSION))
-LIBRARY_NAME = dummy-Microsoft.Build.Utilities.dll
-NO_INSTALL = yes
-NO_TEST = yes
-NO_SIGN_ASSEMBLY = yes
-endif
+BUILD_FRAMEWORK = Microsoft.Build.Framework.dll
 
 ifeq (3.5, $(FRAMEWORK_VERSION))
 LIBRARY_NAME = Microsoft.Build.Utilities.v3.5.dll
+BUILD_FRAMEWORK := $(topdir)/class/lib/$(PROFILE)/$(BUILD_FRAMEWORK)
 else
 ifeq (4.0, $(FRAMEWORK_VERSION))
 LIBRARY_NAME = Microsoft.Build.Utilities.v4.0.dll
@@ -21,9 +17,9 @@ endif
 LIB_MCS_FLAGS = \
        /r:$(corlib)                            \
        /r:System.dll                           \
-       /r:Microsoft.Build.Framework.dll
+       /r:$(BUILD_FRAMEWORK)
 
-TEST_MCS_FLAGS = /r:Microsoft.Build.Framework.dll
+TEST_MCS_FLAGS = /r:$(BUILD_FRAMEWORK)
 
 export TESTING_MONO=a
 XBUILD_DIR=../../tools/xbuild
index 74e1b7610de0e8a4ffbb52542fd8515e508bdad4..c2ccff4c5c6763be8a0dea8a8a06e0043228bbda 100644 (file)
@@ -46,7 +46,6 @@ namespace Microsoft.Build.Utilities
 {
        public abstract class ToolTask : Task
        {
-               SCS.ProcessStringDictionary     environmentOverride;
                int                     exitCode;
                int                     timeout;
                string                  toolPath, toolExe;
@@ -76,7 +75,6 @@ namespace Microsoft.Build.Utilities
                        this.toolPath = MonoLocationHelper.GetBinDir ();
                        this.responseFileEncoding = Encoding.UTF8;
                        this.timeout = Int32.MaxValue;
-                       this.environmentOverride = new SCS.ProcessStringDictionary ();
                }
 
                [MonoTODO]
@@ -111,11 +109,8 @@ namespace Microsoft.Build.Utilities
                        if (pathToTool == null)
                                throw new ArgumentNullException ("pathToTool");
 
-                       string output, error, responseFileName;
-                       StreamWriter outwr, errwr;
-
-                       outwr = errwr = null;
-                       responseFileName = output = error = null;
+                       string responseFileName;
+                       responseFileName = null;
                        toolOutput = new StringBuilder ();
 
                        try {
@@ -129,11 +124,6 @@ namespace Microsoft.Build.Utilities
                                LogToolCommand (String.Format ("Tool {0} execution started with arguments: {1} {2}",
                                                pathToTool, commandLineCommands, responseFileCommands));
 
-                               output = Path.GetTempFileName ();
-                               error = Path.GetTempFileName ();
-                               outwr = new StreamWriter (output);
-                               errwr = new StreamWriter (error);
-
                                ProcessStartInfo pinfo = new ProcessStartInfo (pathToTool, arguments);
                                pinfo.WorkingDirectory = GetWorkingDirectory () ?? Environment.CurrentDirectory;
 
@@ -141,15 +131,27 @@ namespace Microsoft.Build.Utilities
                                pinfo.RedirectStandardOutput = true;
                                pinfo.RedirectStandardError = true;
 
+                               var pendingLineFragmentOutput = new StringBuilder ();
+                               var pendingLineFragmentError = new StringBuilder ();
+                               var environmentOverride = GetAndLogEnvironmentVariables ();
                                try {
-                                       ProcessWrapper pw = ProcessService.StartProcess (pinfo, outwr, errwr, null, environmentOverride);
-                                       pw.OutputStreamChanged += delegate (object o, string msg) { ProcessLine (msg, StandardOutputLoggingImportance); };
-                                       pw.ErrorStreamChanged += delegate (object o, string msg) { ProcessLine (msg, StandardErrorLoggingImportance); };
+                                       // When StartProcess returns, the process has already .Start()'ed
+                                       // If we subscribe to the events after that, then for processes that
+                                       // finish executing before we can subscribe, we won't get the output/err
+                                       // events at all!
+                                       ProcessWrapper pw = ProcessService.StartProcess (pinfo,
+                                                       (_, msg) => ProcessLine (pendingLineFragmentOutput, msg, StandardOutputLoggingImportance),
+                                                       (_, msg) => ProcessLine (pendingLineFragmentError, msg, StandardErrorLoggingImportance),
+                                                       null,
+                                                       environmentOverride);
+
+                                       pw.WaitForOutput (timeout == Int32.MaxValue ? Int32.MaxValue : timeout);
+
+                                       // Process any remaining line
+                                       ProcessLine (pendingLineFragmentOutput, StandardOutputLoggingImportance, true);
+                                       ProcessLine (pendingLineFragmentError, StandardErrorLoggingImportance, true);
 
-                                       pw.WaitForOutput (timeout == Int32.MaxValue ? -1 : timeout);
                                        exitCode = pw.ExitCode;
-                                       outwr.Close();
-                                       errwr.Close();
                                        pw.Dispose ();
                                } catch (System.ComponentModel.Win32Exception e) {
                                        Log.LogError ("Error executing tool '{0}': {1}", pathToTool, e.Message);
@@ -159,17 +161,13 @@ namespace Microsoft.Build.Utilities
                                if (typeLoadException)
                                        ProcessTypeLoadException ();
 
+                               pendingLineFragmentOutput.Length = 0;
+                               pendingLineFragmentError.Length = 0;
+
                                Log.LogMessage (MessageImportance.Low, "Tool {0} execution finished.", pathToTool);
                                return exitCode;
                        } finally {
                                DeleteTempFile (responseFileName);
-                               if (outwr != null)
-                                       outwr.Dispose ();
-                               if (errwr != null)
-                                       errwr.Dispose ();
-
-                               DeleteTempFile (output);
-                               DeleteTempFile (error);
                        }
                }
 
@@ -192,9 +190,39 @@ namespace Microsoft.Build.Utilities
                        Log.LogError (output_str);
                }
 
-               void ProcessLine (string line, MessageImportance importance)
+               void ProcessLine (StringBuilder outputBuilder, MessageImportance importance, bool isLastLine)
+               {
+                       if (outputBuilder.Length == 0)
+                               return;
+
+                       if (isLastLine && !outputBuilder.ToString ().EndsWith (Environment.NewLine))
+                               // last line, but w/o an trailing newline, so add that
+                               outputBuilder.Append (Environment.NewLine);
+
+                       ProcessLine (outputBuilder, null, importance);
+               }
+
+               void ProcessLine (StringBuilder outputBuilder, string line, MessageImportance importance)
                {
-                       foreach (string singleLine in line.Split (new string [] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)) {
+                       // Add to any line fragment from previous call
+                       if (line != null)
+                               outputBuilder.Append (line);
+
+                       // Don't remove empty lines!
+                       var lines = outputBuilder.ToString ().Split (new string [] {Environment.NewLine}, StringSplitOptions.None);
+
+                       // Clear the builder. If any incomplete line is found,
+                       // then it will get added back
+                       outputBuilder.Length = 0;
+                       for (int i = 0; i < lines.Length; i ++) {
+                               string singleLine = lines [i];
+                               if (i == lines.Length - 1 && !singleLine.EndsWith (Environment.NewLine)) {
+                                       // Last line doesn't end in newline, could be part of
+                                       // a bigger line. Save for later processing
+                                       outputBuilder.Append (singleLine);
+                                       continue;
+                               }
+
                                toolOutput.AppendLine (singleLine);
 
                                // in case of typeLoadException, collect all the output
@@ -206,9 +234,10 @@ namespace Microsoft.Build.Utilities
 
                protected virtual void LogEventsFromTextOutput (string singleLine, MessageImportance importance)
                {
-                       singleLine = singleLine.Trim ();
-                       if (singleLine.Length == 0)
+                       if (singleLine.Length == 0) {
+                               Log.LogMessage (singleLine, importance);
                                return;
+                       }
 
                        if (singleLine.StartsWith ("Unhandled Exception: System.TypeLoadException") ||
                            singleLine.StartsWith ("Unhandled Exception: System.IO.FileNotFoundException")) {
@@ -319,11 +348,50 @@ namespace Microsoft.Build.Utilities
                        }
                }
 
+               // If EnvironmentVariables is defined, then merge EnvironmentOverride
+               // EnvironmentOverride is Obsolete'd in 4.0
+               //
+               // Returns the final set of environment variables and logs them
+               SCS.StringDictionary GetAndLogEnvironmentVariables ()
+               {
+                       var env_vars = GetEnvironmentVariables ();
+                       if (env_vars == null)
+                               return env_vars;
+
+                       Log.LogMessage (MessageImportance.Low, "Environment variables being passed to the tool:");
+                       foreach (DictionaryEntry entry in env_vars)
+                               Log.LogMessage (MessageImportance.Low, "\t{0}={1}", (string)entry.Key, (string)entry.Value);
+
+                       return env_vars;
+               }
+
+               SCS.StringDictionary GetEnvironmentVariables ()
+               {
+                       if (EnvironmentVariables == null || EnvironmentVariables.Length == 0)
+                               return EnvironmentOverride;
+
+                       var env_vars = new SCS.ProcessStringDictionary ();
+                       foreach (string pair in EnvironmentVariables) {
+                               string [] key_value = pair.Split ('=');
+                               if (!String.IsNullOrEmpty (key_value [0]))
+                                       env_vars [key_value [0]] = key_value.Length > 1 ? key_value [1] : String.Empty;
+                       }
+
+                       if (EnvironmentOverride != null)
+                               foreach (DictionaryEntry entry in EnvironmentOverride)
+                                       env_vars [(string)entry.Key] = (string)entry.Value;
+
+                       return env_vars;
+               }
+
                protected virtual StringDictionary EnvironmentOverride
                {
-                       get { return environmentOverride; }
+                       get { return null; }
                }
-               
+
+               // Ignore EnvironmentOverride if this is set
+               public string[] EnvironmentVariables { get; set; }
+
                [Output]
                public int ExitCode {
                        get { return exitCode; }
index d39e368e037cb84adbde2582a0762c8d4e43c8e1..db959c20f8d014c9b4ad6ebf51dad50aca9a3cfb 100644 (file)
@@ -158,7 +158,20 @@ namespace Microsoft.CSharp.RuntimeBinder
                                        IgnorePrivateMembers = false
                                };
 
-                               var core_types = Compiler.TypeManager.InitCoreTypes ();
+                               var reporter = new Compiler.Report (ErrorPrinter.Instance) {
+                                       WarningLevel = 0
+                               };
+
+                               var cc = new Compiler.CompilerContext (importer, reporter) {
+                                       IsRuntimeBinder = true
+                               };
+
+                               IList<Compiler.PredefinedTypeSpec> core_types = null;
+                               // HACK: To avoid re-initializing static TypeManager types, like string_type
+                               if (!Compiler.RootContext.EvalMode) {
+                                       core_types = Compiler.TypeManager.InitCoreTypes ();
+                               }
+
                                importer.Initialize ();
 
                                // I don't think dynamically loaded assemblies can be used as dynamic
@@ -166,22 +179,16 @@ namespace Microsoft.CSharp.RuntimeBinder
                                // AppDomain.CurrentDomain.AssemblyLoad += (sender, e) => { throw new NotImplementedException (); };
 
                                // Import all currently loaded assemblies
-                               var ns = Compiler.GlobalRootNamespace.Instance;
+                               var ns = cc.GlobalRootNamespace;
                                foreach (System.Reflection.Assembly a in AppDomain.CurrentDomain.GetAssemblies ()) {
                                        ns.AddAssemblyReference (a);
                                        importer.ImportAssembly (a, ns);
                                }
 
-                               var reporter = new Compiler.Report (ErrorPrinter.Instance) {
-                                       WarningLevel = 0
-                               };
-
-                               var cc = new Compiler.CompilerContext (importer, reporter) {
-                                       IsRuntimeBinder = true
-                               };
-
-                               Compiler.TypeManager.InitCoreTypes (cc, core_types);
-                               Compiler.TypeManager.InitOptionalCoreTypes (cc);
+                               if (!Compiler.RootContext.EvalMode) {
+                                       Compiler.TypeManager.InitCoreTypes (cc, core_types);
+                                       Compiler.TypeManager.InitOptionalCoreTypes (cc);
+                               }
 
                                dc = new DynamicContext (cc);
                        }
index 58ab9425e772be186f1c1e8d3f8ed2cfbf6dec86..3c46c0ff68405030718dddb6c07380d1cc0333cb 100644 (file)
@@ -52,7 +52,8 @@ namespace Microsoft.CSharp.RuntimeBinder
                        var queried_type = ctx.ImportType (target.LimitType);
                        var rc = new Compiler.ResolveContext (new RuntimeBinderContext (ctx, context_type), 0);
 
-                       var expr = Compiler.Expression.MemberLookup (rc, context_type, queried_type, name, 0, false, Compiler.Location.Null);
+                       var expr = Compiler.Expression.MemberLookup (rc, context_type, queried_type,
+                               name, 0, Compiler.Expression.MemberLookupRestrictions.ExactArity, Compiler.Location.Null);
 
                        var binder = new CSharpBinder (
                                this, new Compiler.BoolConstant (expr is Compiler.EventExpr, Compiler.Location.Null), null);
index b167e8fb2787e5ff463ee10c75c72d90c70faa71..101e4b9d9369286d1d6731366a40bd8e3707c709 100644 (file)
@@ -47,15 +47,15 @@ using System.Runtime.ConstrainedExecution;
 //
 // You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
-#if !MONOTOUCH
+#if !MOBILE
   #if NET_4_0
     [assembly: AssemblyVersion("4.0.0.0")]
   #else // NET_4_0
     [assembly: AssemblyVersion("2.0.0.0")]
   #endif // NET_4_0
-#else   // !MONOTOUCH
+#else
 [assembly: AssemblyVersion(Consts.FxVersion)]
-#endif  // !MONOTOUCH
+#endif
 #if !PLATFORM_COMPACTFRAMEWORK
 [assembly: AssemblyFileVersion("1.0.61.0")]
 #endif
index c6c378fb865534a02cbdec0e4a86e57c40b42fd5..9c25270b287c9aa416f1c66dd3295c6e4e5551e8 100644 (file)
@@ -265,7 +265,7 @@ namespace Mono.Debugger.Soft
                 * with newer runtimes, and vice versa.
                 */
                public const int MAJOR_VERSION = 2;
-               public const int MINOR_VERSION = 1;
+               public const int MINOR_VERSION = 2;
 
                enum WPSuspendPolicy {
                        NONE = 0,
index 86a855aeecb40de1b2e5a9ad78ceb11637303933..883e044aea137f147f8ba0dd4a61bc2f0cb50272 100644 (file)
@@ -96,6 +96,12 @@ namespace Mono.Unix {
 
                [UnmanagedFunctionPointer (CallingConvention.Cdecl)]
                delegate int Mono_Posix_RuntimeIsShuttingDown ();
+               static Mono_Posix_RuntimeIsShuttingDown ShuttingDown = RuntimeShuttingDownCallback;
+               
+               static int RuntimeShuttingDownCallback ()
+               {
+                       return Environment.HasShutdownStarted ? 1 : 0;
+               }
 
                [DllImport (Stdlib.MPH, CallingConvention=CallingConvention.Cdecl,
                                EntryPoint="Mono_Unix_UnixSignal_WaitAny")]
@@ -190,6 +196,7 @@ namespace Mono.Unix {
                        return WaitAny (signals, (int) ms);
                }
 
+                       
                public static unsafe int WaitAny (UnixSignal[] signals, int millisecondsTimeout)
                {
                        if (signals == null)
@@ -202,7 +209,7 @@ namespace Mono.Unix {
                                if (infos [i] == IntPtr.Zero)
                                        throw new InvalidOperationException ("Disposed UnixSignal");
                        }
-                       return WaitAny (infos, infos.Length, millisecondsTimeout, () => Environment.HasShutdownStarted ? 1 : 0);
+                       return WaitAny (infos, infos.Length, millisecondsTimeout, ShuttingDown);
                }
        }
 }
index be89ba657ba9086267bf51e7a5ac61e2690ec5cc..85244bc1e4fb8b2255b9025e442ec8236a9ceae2 100644 (file)
@@ -60,6 +60,6 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyDelaySign (true)]
 [assembly: AssemblyKeyFile ("../mono.pub")]
 
-#if MONOTOUCH
+#if MOBILE
 [assembly: InternalsVisibleTo ("System, PublicKey=00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB")]
 #endif
index e79dc6f1564cf3efa5aea4aacc56a5f62b61573e..a39cd48f292e2a933727a165df60d3be4fd20b8e 100644 (file)
@@ -48,7 +48,7 @@ namespace Mono.Security.Cryptography {
 
                static RandomNumberGenerator Rng {
                        get {
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                                if (rng == null)
                                        rng = new RNGCryptoServiceProvider ();
 #else
index 2fd4694240e3ce492f882e4262658df7c8a3be9e..028f5f0ffcb93e20727204fa54c84946ba118339 100644 (file)
@@ -50,7 +50,7 @@ namespace Mono.Security.Cryptography {
                private byte[] temp2;
                private byte[] workBuff;
                private byte[] workout;
-#if !NET_2_1 || MONOTOUCH
+#if !MOONLIGHT
                // Silverlight 2.0 does not support any feedback mode
                private int FeedBackByte;
                private int FeedBackIter;
@@ -80,7 +80,7 @@ namespace Mono.Security.Cryptography {
                        temp = new byte [BlockSizeByte];
                        Buffer.BlockCopy (rgbIV, 0, temp, 0, System.Math.Min (BlockSizeByte, rgbIV.Length));
                        temp2 = new byte [BlockSizeByte];
-#if !NET_2_1 || MONOTOUCH
+#if !MOONLIGHT
                        FeedBackByte = (algo.FeedbackSize >> 3);
                        if (FeedBackByte != 0)
                                FeedBackIter = (int) BlockSizeByte / FeedBackByte;
@@ -137,7 +137,7 @@ namespace Mono.Security.Cryptography {
                // i.e. Any padding must be done before calling this method
                protected virtual void Transform (byte[] input, byte[] output) 
                {
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                        // Silverlight 2.0 only supports CBC
                        CBC (input, output);
 #else
@@ -184,7 +184,7 @@ namespace Mono.Security.Cryptography {
                        }
                }
 
-#if !NET_2_1 || MONOTOUCH
+#if !MOONLIGHT
                // Cipher-FeedBack (CFB)
                protected virtual void CFB (byte[] input, byte[] output) 
                {
@@ -255,7 +255,7 @@ namespace Mono.Security.Cryptography {
 
                        // ordered to avoid possible integer overflow
                        int len = outputBuffer.Length - inputCount - outputOffset;
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                        // only PKCS7 is supported Silverlight 2.0
                        if (KeepLastBlock) {
 #else
@@ -280,7 +280,7 @@ namespace Mono.Security.Cryptography {
 
                private bool KeepLastBlock {
                        get {
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                                // only PKCS7 is supported Silverlight 2.0
                                return !encrypt;
 #else
@@ -335,7 +335,7 @@ namespace Mono.Security.Cryptography {
                        return total;
                }
 
-#if (!NET_2_1 || MONOTOUCH)
+#if !MOONLIGHT
                RandomNumberGenerator _rng;
 
                private void Random (byte[] buffer, int start, int length)
@@ -366,7 +366,7 @@ namespace Mono.Security.Cryptography {
                        int rem = inputCount - full;
                        int total = full;
 
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                        // only PKCS7 is supported Silverlight 2.0
                        total += BlockSizeByte;
 #else
@@ -408,7 +408,7 @@ namespace Mono.Security.Cryptography {
 
                        // now we only have a single last block to encrypt
                        byte padding = (byte) (BlockSizeByte - rem);
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                        // only PKCS7 is supported Silverlight 2.0
                        for (int i = res.Length; --i >= (res.Length - padding);) 
                                res [i] = padding;
@@ -475,7 +475,7 @@ namespace Mono.Security.Cryptography {
 
                        // total may be 0 (e.g. PaddingMode.None)
                        byte padding = ((total > 0) ? res [total - 1] : (byte) 0);
-#if NET_2_1 && !MONOTOUCH
+#if MOONLIGHT
                        // only PKCS7 is supported Silverlight 2.0
                        if ((padding == 0) || (padding > BlockSizeByte))
                                throw new CryptographicException (Locale.GetText ("Bad padding length."));
index dfb4322aecaba8904f4f5dce310bf62165135ad0..b58458bd527f1571ff7ea80ed791f7f501de307c 100644 (file)
@@ -18,7 +18,7 @@ ifeq (4.0, $(FRAMEWORK_VERSION))
 LIB_MCS_FLAGS += -d:CODEPLEX_40
 endif
 
-FULL_PROFILE := $(filter net_2_0 net_4_0 moonlight_raw monotouch, $(PROFILE))
+FULL_PROFILE := $(filter net_2_0 net_4_0 moonlight_raw monotouch monodroid, $(PROFILE))
 ifdef FULL_PROFILE
 LIBRARY_COMPILE = $(BOOT_COMPILE)
 endif
index 1ec0e11244a15c2bf54d94b135580d3f91bc161c..1da1c1b4c9a349586f6047dab4ac951a3052d318 100644 (file)
@@ -24,7 +24,7 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#if (INSIDE_CORLIB && (NET_4_0 || MOONLIGHT)) || (MONOTOUCH && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
+#if (INSIDE_CORLIB && (NET_4_0 || MOONLIGHT)) || (MOBILE && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
 
 using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
index 72eca19ad2cbcba2bf4479ae139e76f8a7c5c3fe..7aa1bffe3b18f3eb049789ea6f4c606e83b039e4 100644 (file)
@@ -24,7 +24,7 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#if (INSIDE_CORLIB && (NET_4_0 || BOOTSTRAP_NET_4_0 || MOONLIGHT)) || (MONOTOUCH && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
+#if (INSIDE_CORLIB && (NET_4_0 || BOOTSTRAP_NET_4_0 || MOONLIGHT)) || (MOBILE && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
 
 using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
index 6be3f8f8aeea342de94dde0b0b3f5f92795bdd6e..67cafd775da8fc15ca3be3f17a659eac3865ccb9 100644 (file)
@@ -31,7 +31,7 @@ using System.Runtime.CompilerServices;
 
 [assembly:TypeForwardedTo (typeof(TimeZoneInfo))]
 
-#elif NET_3_5 || (MONOTOUCH && !INSIDE_CORLIB) || (MOONLIGHT && INSIDE_CORLIB)
+#elif NET_3_5 || (MOBILE && !INSIDE_CORLIB) || (MOONLIGHT && INSIDE_CORLIB)
 
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
diff --git a/mcs/class/System.Core/mobile_System.Core.dll.sources b/mcs/class/System.Core/mobile_System.Core.dll.sources
new file mode 100644 (file)
index 0000000..62438d6
--- /dev/null
@@ -0,0 +1,77 @@
+../../build/common/Consts.cs
+../../build/common/Locale.cs
+../../build/common/MonoTODOAttribute.cs
+../corlib/Mono.Security.Cryptography/CryptoTools.cs
+../corlib/Mono.Security.Cryptography/SymmetricTransform.cs
+Assembly/AssemblyInfo.cs
+System/Actions.cs
+System/Funcs.cs
+System/InvalidTimeZoneException.cs
+System/TimeZoneInfo.AdjustmentRule.cs
+System/TimeZoneInfo.cs
+System/TimeZoneInfo.TransitionTime.cs
+System/TimeZoneNotFoundException.cs
+System.Runtime.CompilerServices/ExecutionScope.cs
+System.Runtime.CompilerServices/ExtensionAttribute.cs
+System.Runtime.CompilerServices/IStrongBox.cs
+System.Runtime.CompilerServices/StrongBox_T.cs
+System.Linq/Check.cs
+System.Linq/Enumerable.cs
+System.Linq/QueryableEnumerable.cs
+System.Linq/QueryableTransformer.cs
+System.Linq/Grouping.cs
+System.Linq/IGrouping.cs
+System.Linq/IOrderedQueryable.cs
+System.Linq/IOrderedQueryable_T.cs
+System.Linq/IOrderedEnumerable_T.cs
+System.Linq/IQueryable.cs
+System.Linq/IQueryable_T.cs
+System.Linq/Lookup.cs
+System.Linq/ILookup_T.cs
+System.Linq/OrderedEnumerable.cs
+System.Linq/OrderedSequence.cs
+System.Linq/Queryable.cs
+System.Linq/QuickSort.cs
+System.Linq/SortContext.cs
+System.Linq/SortDirection.cs
+System.Linq/SortSequenceContext.cs
+System.Linq/IQueryProvider.cs
+System.Linq.Expressions/BinaryExpression.cs
+System.Linq.Expressions/ConditionalExpression.cs
+System.Linq.Expressions/ConstantExpression.cs
+System.Linq.Expressions/ElementInit.cs
+System.Linq.Expressions/EmitContext.cs
+System.Linq.Expressions/Expression.cs
+System.Linq.Expressions/Expression_T.cs
+System.Linq.Expressions/ExpressionPrinter.cs
+System.Linq.Expressions/ExpressionType.cs
+System.Linq.Expressions/ExpressionVisitor.cs
+System.Linq.Expressions/ExpressionTransformer.cs
+System.Linq.Expressions/Extensions.cs
+System.Linq.Expressions/InvocationExpression.cs
+System.Linq.Expressions/LambdaExpression.cs
+System.Linq.Expressions/ListInitExpression.cs
+System.Linq.Expressions/MemberAssignment.cs
+System.Linq.Expressions/MemberBinding.cs
+System.Linq.Expressions/MemberBindingType.cs
+System.Linq.Expressions/MemberExpression.cs
+System.Linq.Expressions/MemberInitExpression.cs
+System.Linq.Expressions/MemberListBinding.cs
+System.Linq.Expressions/MemberMemberBinding.cs
+System.Linq.Expressions/MethodCallExpression.cs
+System.Linq.Expressions/NewArrayExpression.cs
+System.Linq.Expressions/NewExpression.cs
+System.Linq.Expressions/ParameterExpression.cs
+System.Linq.Expressions/TypeBinaryExpression.cs
+System.Linq.Expressions/UnaryExpression.cs
+System.Collections.Generic/HashSet.cs
+../corlib/System.Collections.Generic/CollectionDebuggerView.cs
+System.Security.Cryptography/Aes.cs
+System.Security.Cryptography/AesManaged.cs
+System.Security.Cryptography/AesTransform.cs
+System.Threading/LockRecursionException.cs
+System.Threading/LockRecursionPolicy.cs
+System.Threading/ReaderWriterLockSlim.cs
+System.Threading/ThreadLockState.cs
+System.Threading/ReaderWriterLockSlimExtensions.cs
+../corlib/System.Threading/AtomicBoolean.cs
diff --git a/mcs/class/System.Core/monodroid_System.Core.dll.sources b/mcs/class/System.Core/monodroid_System.Core.dll.sources
new file mode 100644 (file)
index 0000000..0129121
--- /dev/null
@@ -0,0 +1 @@
+#include monodroid_bootstrap_System.Core.dll.sources
diff --git a/mcs/class/System.Core/monodroid_bootstrap_System.Core.dll.sources b/mcs/class/System.Core/monodroid_bootstrap_System.Core.dll.sources
new file mode 100644 (file)
index 0000000..6a8b16b
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.Core.dll.sources
index f867c7fc7ac0b1026477e312970131b7735593fc..5806afac86490a4bf544c2d0d2ca8b3add352a69 100644 (file)
@@ -1,82 +1,6 @@
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-../../build/common/MonoTODOAttribute.cs
-../corlib/Mono.Security.Cryptography/CryptoTools.cs
-../corlib/Mono.Security.Cryptography/SymmetricTransform.cs
-Assembly/AssemblyInfo.cs
-System/Actions.cs
-System/Funcs.cs
-System/InvalidTimeZoneException.cs
-System/TimeZoneInfo.AdjustmentRule.cs
-System/TimeZoneInfo.cs
-System/TimeZoneInfo.TransitionTime.cs
-System/TimeZoneNotFoundException.cs
-System.Runtime.CompilerServices/ExecutionScope.cs
-System.Runtime.CompilerServices/ExtensionAttribute.cs
-System.Runtime.CompilerServices/IStrongBox.cs
-System.Runtime.CompilerServices/StrongBox_T.cs
-System.Linq/Check.cs
-System.Linq/Enumerable.cs
-System.Linq/QueryableEnumerable.cs
-System.Linq/QueryableTransformer.cs
-System.Linq/Grouping.cs
-System.Linq/IGrouping.cs
-System.Linq/IOrderedQueryable.cs
-System.Linq/IOrderedQueryable_T.cs
-System.Linq/IOrderedEnumerable_T.cs
-System.Linq/IQueryable.cs
-System.Linq/IQueryable_T.cs
-System.Linq/Lookup.cs
-System.Linq/ILookup_T.cs
-System.Linq/OrderedEnumerable.cs
-System.Linq/OrderedSequence.cs
-System.Linq/Queryable.cs
-System.Linq/QuickSort.cs
-System.Linq/SortContext.cs
-System.Linq/SortDirection.cs
-System.Linq/SortSequenceContext.cs
-System.Linq/IQueryProvider.cs
-System.Linq.Expressions/BinaryExpression.cs
-System.Linq.Expressions/ConditionalExpression.cs
-System.Linq.Expressions/ConstantExpression.cs
-System.Linq.Expressions/ElementInit.cs
-System.Linq.Expressions/EmitContext.cs
-System.Linq.Expressions/Expression.cs
-System.Linq.Expressions/Expression_T.cs
-System.Linq.Expressions/ExpressionPrinter.cs
-System.Linq.Expressions/ExpressionType.cs
-System.Linq.Expressions/ExpressionVisitor.cs
-System.Linq.Expressions/ExpressionTransformer.cs
-System.Linq.Expressions/Extensions.cs
-System.Linq.Expressions/InvocationExpression.cs
-System.Linq.Expressions/LambdaExpression.cs
-System.Linq.Expressions/ListInitExpression.cs
-System.Linq.Expressions/MemberAssignment.cs
-System.Linq.Expressions/MemberBinding.cs
-System.Linq.Expressions/MemberBindingType.cs
-System.Linq.Expressions/MemberExpression.cs
-System.Linq.Expressions/MemberInitExpression.cs
-System.Linq.Expressions/MemberListBinding.cs
-System.Linq.Expressions/MemberMemberBinding.cs
-System.Linq.Expressions/MethodCallExpression.cs
-System.Linq.Expressions/NewArrayExpression.cs
-System.Linq.Expressions/NewExpression.cs
-System.Linq.Expressions/ParameterExpression.cs
-System.Linq.Expressions/TypeBinaryExpression.cs
-System.Linq.Expressions/UnaryExpression.cs
-System.Collections.Generic/HashSet.cs
-../corlib/System.Collections.Generic/CollectionDebuggerView.cs
-System.Security.Cryptography/Aes.cs
-System.Security.Cryptography/AesManaged.cs
-System.Security.Cryptography/AesTransform.cs
+#include mobile_System.Core.dll.sources
 System.Linq.jvm/Conversion.cs
 System.Linq.jvm/ExpressionInterpreter.cs
 System.Linq.jvm/ExpressionValidator.cs
 System.Linq.jvm/Interpreter.cs
 System.Linq.jvm/Math.cs
-System.Threading/LockRecursionException.cs
-System.Threading/LockRecursionPolicy.cs
-System.Threading/ReaderWriterLockSlim.cs
-System.Threading/ThreadLockState.cs
-System.Threading/ReaderWriterLockSlimExtensions.cs
-../corlib/System.Threading/AtomicBoolean.cs
index b3e19b279f69fae91ce3b218fdfd095137b20aaa..aeb7c345c43eebf0091ba304e59ebd4c8fe5de14 100755 (executable)
@@ -9,6 +9,7 @@ LIB_MCS_FLAGS = \
                /r:System.Xml.dll \
                /r:System.Data.dll \
                /r:System.Runtime.Serialization.dll \
+               /resource:./src/DbLinq/Schema/Dbml/DbmlSchema.xsd,DbLinq.Schema.Dbml.DbmlSchema.xsd \
                /d:MONO_STRICT /d:MONO_DEPLOY
 
 ifeq (2.0, $(FRAMEWORK_VERSION))
@@ -18,7 +19,7 @@ endif
 
 TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
-EXTRA_DISTFILES =
+EXTRA_DISTFILES = src/DbLinq/Schema/Dbml/DbmlSchema.xsd
 
 # This is a .NET 3.5+ assembly
 VALID_PROFILE := $(filter net_2_0 net_4_0, $(PROFILE))
index 78e7c33051d8e3d1e6000dfe2a8ac6c0e701d73b..0a307fa198890a2970915d57901a9d72b01ca129 100644 (file)
@@ -31,7 +31,8 @@ LIB_MCS_FLAGS +=      \
        -r:J2SE.Helpers.dll                     \
        $(OTHER_LIB_MCS_FLAGS)
 else 
-ifeq (monotouch, $(PROFILE))
+MOBILE := $(filter monotouch monodroid, $(PROFILE))
+ifdef MOBILE
 LIB_MCS_FLAGS += \
        -r:Mono.Data.Tds.dll \
        -r:System.Transactions.dll
index ca186c336a4d8e51e335f8606ee5d0a972ba0fa5..1bbc6797c927afc6f58d4e320e91bbb39a4910a3 100644 (file)
@@ -718,11 +718,11 @@ namespace System.Data.Common {
                }
 
                protected virtual DbProviderFactory DbProviderFactory {
-#if MONOTOUCH
+#if MOBILE
                        get {throw new NotImplementedException();}
-#else   // MONOTOUCH
+#else
                        get { return DbProviderFactories.GetFactory (this.GetType (). ToString ()); }
-#endif  // MONOTOUCH
+#endif
                }
 #endif
 
index c6cb08f21785ca3a21e02264393211b6d6bb5c2e..ef5a4fc18b398c1719c69e779ff70f75779e9838 100644 (file)
@@ -45,9 +45,9 @@ using System.Collections.Specialized;
 using System.ComponentModel;
 using System.Data;
 using System.Data.Common;
-#if !MONOTOUCH
+#if !MOBILE
 using System.EnterpriseServices;
-#endif // !MONOTOUCH
+#endif
 using System.Globalization;
 using System.Net;
 using System.Net.Sockets;
@@ -482,13 +482,13 @@ namespace System.Data.SqlClient
                        }
                }
 
-#if !MONOTOUCH
+#if !MOBILE
                [MonoTODO ("Not sure what this means at present.")]
                public void EnlistDistributedTransaction (ITransaction transaction)
                {
                        throw new NotImplementedException ();
                }
-#endif // !MONOTOUCH
+#endif
 
                object ICloneable.Clone ()
                {
index f151afae94ca5cfddfe03a9d81989fb6915a9741..d494474c77fe673324c9615373ca3d143f227c34 100644 (file)
@@ -1265,14 +1265,14 @@ namespace System.Data
                                if (e == null)
                                        continue;
                                
-#if !MONOTOUCH
+#if !MOBILE
                                if (e.LocalName == "Connections" && (firstChild = e.FirstChild as XmlElement) != null) {
                                        providerName = firstChild.GetAttribute ("Provider");
                                        connString = firstChild.GetAttribute ("AppSettingsPropertyName");
                                        provider = DbProviderFactories.GetFactory (providerName);
                                        continue;
                                }
-#endif // !MONOTOUCH
+#endif
                                // #325464 debugging
                                //Console.WriteLine ("ProviderName: " + providerName + "Connstr: " + connString);
                                
diff --git a/mcs/class/System.Data/mobile_System.Data.dll.sources b/mcs/class/System.Data/mobile_System.Data.dll.sources
new file mode 100644 (file)
index 0000000..64ad3df
--- /dev/null
@@ -0,0 +1,274 @@
+Assembly/AssemblyInfo.cs
+../../build/common/Consts.cs.in
+../../build/common/Locale.cs
+System.Data/AcceptRejectRule.cs
+System.Data/ColumnTypeConverter.cs
+System.Data/CommandBehavior.cs
+System.Data/CommandType.cs
+System.Data/ConnectionState.cs
+System.Data/ConflictOption.cs
+System.Data/Constraint.cs
+System.Data/ConstraintCollection.cs
+System.Data/ConstraintConverter.cs
+System.Data/ConstraintException.cs
+System.Data/DataCategoryAttribute.cs
+System.Data/DataColumn.cs
+System.Data/DataColumnChangeEventArgs.cs
+System.Data/DataColumnChangeEventHandler.cs
+System.Data/DataColumnCollection.cs
+System.Data/DataColumnPropertyDescriptor.cs
+System.Data/DataException.cs
+System.Data/RelatedDataView.cs
+System.Data/RelationshipConverter.cs
+System.Data/DataRelation.cs
+System.Data/DataRelationCollection.cs
+System.Data/DataRelationPropertyDescriptor.cs
+System.Data/DataRow.cs
+System.Data/DataRowAction.cs
+System.Data/DataRowBuilder.cs
+System.Data/DataRowChangeEventArgs.cs
+System.Data/DataRowChangeEventHandler.cs
+System.Data/DataRowCollection.cs
+System.Data/DataRowState.cs
+System.Data/DataRowVersion.cs
+System.Data/DataRowView.cs
+System.Data/DataSet.cs
+System.Data/DataSetDateTime.cs
+System.Data/DataSysDescriptionAttribute.cs
+System.Data/DataTable.cs
+System.Data/DataTableCollection.cs
+System.Data/DataTableClearEventArgs.cs
+System.Data/DataTableClearEventHandler.cs
+System.Data/DataTableTypeConverter.cs
+System.Data/DataTablePropertyDescriptor.cs
+System.Data/DataTableReader.cs
+System.Data/DataTableNewRowEventArgs.cs
+System.Data/DataTableNewRowEventHandler.cs
+System.Data/DataView.cs
+System.Data/DataViewManager.cs
+System.Data/DataViewManagerListItemTypeDescriptor.cs
+System.Data/DataViewRowState.cs
+System.Data/DataViewSetting.cs
+System.Data/DataViewSettingCollection.cs
+System.Data/DBConcurrencyException.cs
+System.Data/DbType.cs
+System.Data/DefaultValueTypeConverter.cs
+System.Data/DeletedRowInaccessibleException.cs
+System.Data/DuplicateNameException.cs
+System.Data/EvaluateException.cs
+System.Data/FillErrorEventArgs.cs
+System.Data/FillErrorEventHandler.cs
+System.Data/ForeignKeyConstraint.cs
+System.Data/IColumnMapping.cs
+System.Data/IColumnMappingCollection.cs
+System.Data/IDataAdapter.cs
+System.Data/IDataParameter.cs
+System.Data/IDataParameterCollection.cs
+System.Data/IDataReader.cs
+System.Data/IDataRecord.cs
+System.Data/IDbCommand.cs
+System.Data/IDbConnection.cs
+System.Data/IDbDataAdapter.cs
+System.Data/IDbDataParameter.cs
+System.Data/IDbTransaction.cs
+System.Data/InRowChangingEventException.cs
+System.Data/InternalDataCollectionBase.cs
+System.Data/InvalidConstraintException.cs
+System.Data/InvalidExpressionException.cs
+System.Data/ISafeDataRecord.cs
+System.Data/IsolationLevel.cs
+System.Data/ITableMapping.cs
+System.Data/ITableMappingCollection.cs
+System.Data/KeyRestrictionBehavior.cs
+System.Data/LoadOption.cs
+System.Data/MappingType.cs
+System.Data/MergeFailedEventArgs.cs
+System.Data/MergeFailedEventHandler.cs
+System.Data/MergeManager.cs
+System.Data/MissingMappingAction.cs
+System.Data/MissingPrimaryKeyException.cs
+System.Data/MissingSchemaAction.cs
+System.Data/Node.cs
+System.Data/NoNullAllowedException.cs
+System.Data/OperationAbortedException.cs
+System.Data/ParameterDirection.cs
+System.Data/PropertyAttributes.cs
+System.Data/PropertyCollection.cs
+System.Data/ReadOnlyException.cs
+System.Data/ResDescriptionAttribute.cs
+System.Data/RowNotInTableException.cs
+System.Data/Rule.cs
+System.Data/SchemaType.cs
+System.Data/SerializationFormat.cs
+System.Data/SchemaSerializationMode.cs
+System.Data/SqlDbType.cs
+System.Data/StateChangeEventArgs.cs
+System.Data/StateChangeEventHandler.cs
+System.Data/StatementCompletedEventArgs.cs
+System.Data/StatementCompletedEventHandler.cs
+System.Data/StatementType.cs
+System.Data/StrongTypingException.cs
+System.Data/SyntaxErrorException.cs
+../../build/common/MonoTODOAttribute.cs
+System.Data/TableAdapterSchemaInfo.cs
+System.Data/TypeDataSetGeneratorException.cs
+System.Data/UniqueConstraint.cs
+System.Data/UpdateRowSource.cs
+System.Data/UpdateStatus.cs
+System.Data/VersionNotFoundException.cs
+System.Data/XmlDataInferenceLoader.cs
+System.Data/XmlHelper.cs
+System.Data/XmlDataReader.cs
+System.Data/XmlReadMode.cs
+System.Data/XmlWriteMode.cs
+System.Data/XmlConstants.cs
+System.Data/XmlDiffLoader.cs
+System.Data.Common/CatalogLocation.cs
+System.Data.Common/ComparerFactory.cs
+System.Data.Common/DataAdapter.cs
+System.Data.Common/DataColumnMappingCollection.cs
+System.Data.Common/DataColumnMapping.cs
+System.Data.Common/DataColumnMappingConverter.cs
+System.Data.Common/DataContainer.cs
+System.Data.Common/DataTableMappingCollection.cs
+System.Data.Common/DataTableMapping.cs
+System.Data.Common/DataTableMappingConverter.cs
+System.Data.Common/DbCommandBuilder.cs
+System.Data.Common/DbConnectionStringBuilder.cs
+System.Data.Common/DbConnectionStringBuilderHelper.cs
+System.Data.Common/DbCommand.cs
+System.Data.Common/DbConnection.cs
+System.Data.Common/DbConnectionOptions.cs
+System.Data.Common/DbConnectionString.cs
+System.Data.Common/DbDataAdapter.cs
+System.Data.Common/DbDataPermissionAttribute.cs
+System.Data.Common/DbDataPermission.cs
+System.Data.Common/DbDataReader.cs
+System.Data.Common/DbDataRecord.cs
+System.Data.Common/DbDataSourceEnumerator.cs
+System.Data.Common/DbEnumerator.cs
+System.Data.Common/DbException.cs
+System.Data.Common/DbMetaDataCollectionNames.cs
+System.Data.Common/DbMetaDataColumnNames.cs
+System.Data.Common/DbParameterCollection.cs
+System.Data.Common/DbParameter.cs
+System.Data.Common/DbProviderFactory.cs
+System.Data.Common/DbProviderSpecificTypePropertyAttribute.cs
+System.Data.Common/DbTable.cs
+System.Data.Common/DbTransaction.cs
+System.Data.Common/DbTypes.cs
+System.Data.Common/ExceptionHelper.cs
+System.Data.Common/FieldNameLookup.cs
+System.Data.Common/GroupByBehavior.cs
+System.Data.Common/IdentifierCase.cs
+System.Data.Common/Index.cs
+System.Data.Common/Key.cs
+System.Data.Common/PermissionHelper.cs
+System.Data.Common/RecordCache.cs
+System.Data.Common/RowUpdatedEventArgs.cs
+System.Data.Common/RowUpdatingEventArgs.cs
+System.Data.Common/SchemaInfo.cs
+System.Data.Common/SchemaTableColumn.cs
+System.Data.Common/SchemaTableOptionalColumn.cs
+System.Data.Common/SupportedJoinOperators.cs
+System.Data.SqlTypes/INullable.cs
+System.Data.SqlTypes/SqlBinary.cs
+System.Data.SqlTypes/SqlBoolean.cs
+System.Data.SqlTypes/SqlByte.cs
+System.Data.SqlTypes/SqlBytes.cs
+System.Data.SqlTypes/SqlChars.cs
+System.Data.SqlTypes/SqlCompareOptions.cs
+System.Data.SqlTypes/SqlDateTime.cs
+System.Data.SqlTypes/SqlDecimal.cs
+System.Data.SqlTypes/SqlDouble.cs
+System.Data.SqlTypes/SqlGuid.cs
+System.Data.SqlTypes/SqlInt16.cs
+System.Data.SqlTypes/SqlInt32.cs
+System.Data.SqlTypes/SqlInt64.cs
+System.Data.SqlTypes/SqlMoney.cs
+System.Data.SqlTypes/SqlNullValueException.cs
+System.Data.SqlTypes/SqlSingle.cs
+System.Data.SqlTypes/SqlString.cs
+System.Data.SqlTypes/SqlTruncateException.cs
+System.Data.SqlTypes/SqlTypeException.cs
+System.Data.SqlTypes/StorageState.cs
+System.Data.SqlTypes/SqlAlreadyFilledException.cs
+System.Data.SqlTypes/SqlNotFilledException.cs
+System.Data.SqlTypes/SqlXml.cs
+System.Data.Sql/SqlDataSourceEnumerator.cs
+System.Data.Sql/SqlNotificationRequest.cs
+Microsoft.SqlServer.Server/Format.cs
+Microsoft.SqlServer.Server/DataAccessKind.cs
+Microsoft.SqlServer.Server/IBinarySerialize.cs
+Microsoft.SqlServer.Server/InvalidUdtException.cs
+Microsoft.SqlServer.Server/SqlFunctionAttribute.cs
+Microsoft.SqlServer.Server/SqlMetaData.cs
+Microsoft.SqlServer.Server/SqlMethodAttribute.cs
+Microsoft.SqlServer.Server/SqlUserDefinedAggregateAttribute.cs
+Microsoft.SqlServer.Server/SqlUserDefinedTypeAttribute.cs
+Microsoft.SqlServer.Server/SystemDataAccessKind.cs
+Microsoft.SqlServer.Server/SqlFacetAttribute.cs
+Microsoft.SqlServer.Server/TriggerAction.cs
+Microsoft.SqlServer.Server/SqlTriggerContext.cs
+Microsoft.SqlServer.Server/SqlProcedureAttribute.cs
+Microsoft.SqlServer.Server/SqlTriggerAttribute.cs
+System.Data.SqlClient/SqlNotificationType.cs
+System.Data.SqlClient/SqlNotificationInfo.cs
+System.Data.SqlClient/SqlNotificationSource.cs
+System.Data.SqlClient/SqlAsyncState.cs
+System.Data.SqlClient/SqlAsyncResult.cs
+System.Data.SqlClient/SqlClientMetaDataCollectionNames.cs
+System.Data.SqlClient/SqlClientPermission.cs
+System.Data.SqlClient/SqlClientPermissionAttribute.cs
+System.Data.SqlClient/SqlCommand.cs
+System.Data.SqlClient/SqlCommandBuilder.cs
+System.Data.SqlClient/SqlConnection.cs
+System.Data.SqlClient/SqlConnectionStringBuilder.cs
+System.Data.SqlClient/SqlDataAdapter.cs
+System.Data.SqlClient/SqlDataReader.cs
+System.Data.SqlClient/SqlDataSourceConverter.cs
+System.Data.SqlClient/SqlDependency.cs
+System.Data.SqlClient/SqlError.cs
+System.Data.SqlClient/SqlErrorCollection.cs
+System.Data.SqlClient/SqlException.cs
+System.Data.SqlClient/SqlInfoMessageEventArgs.cs
+System.Data.SqlClient/SqlInfoMessageEventHandler.cs
+System.Data.SqlClient/SqlInitialCatalogConverter.cs
+System.Data.SqlClient/NetworkLibraryConverter.cs
+System.Data.SqlClient/SqlParameter.cs
+System.Data.SqlClient/SqlParameterCollection.cs
+System.Data.SqlClient/SqlParameterConverter.cs
+System.Data.SqlClient/SqlRowUpdatedEventArgs.cs
+System.Data.SqlClient/SqlRowUpdatedEventHandler.cs
+System.Data.SqlClient/SqlRowUpdatingEventArgs.cs
+System.Data.SqlClient/SqlRowUpdatingEventHandler.cs
+System.Data.SqlClient/SqlTransaction.cs
+System.Data.SqlClient/SqlXmlTextReader.cs
+System.Data.SqlClient/SQLDebugging.cs
+System.Data.SqlClient/SqlClientFactory.cs
+System.Data.SqlClient/SqlBulkCopy.cs
+System.Data.SqlClient/SqlBulkCopyOptions.cs
+System.Data.SqlClient/SqlBulkCopyColumnMapping.cs
+System.Data.SqlClient/SqlBulkCopyColumnMappingCollection.cs
+System.Data.SqlClient/SqlRowsCopiedEventHandler.cs
+System.Data.SqlClient/SqlRowsCopiedEventArgs.cs
+System.Data.SqlClient/SqlNotificationEventArgs.cs
+System.Data.SqlClient/OnChangeEventHandler.cs
+System.Data/XmlDataLoader.cs
+System.Data/XmlSchemaDataImporter.cs
+System.Data/XmlSchemaWriter.cs
+System.Data/XmlTableWriter.cs
+System.Xml/XmlDataDocument.cs
+Mono.Data.SqlExpressions/Tokenizer.cs
+Mono.Data.SqlExpressions/Numeric.cs
+Mono.Data.SqlExpressions/Expressions.cs
+Mono.Data.SqlExpressions/Literal.cs
+Mono.Data.SqlExpressions/ColumnReference.cs
+Mono.Data.SqlExpressions/ArithmeticExpressions.cs
+Mono.Data.SqlExpressions/BooleanExpressions.cs
+Mono.Data.SqlExpressions/Comparison.cs
+Mono.Data.SqlExpressions/StringFunctions.cs
+Mono.Data.SqlExpressions/Functions.cs
+Mono.Data.SqlExpressions/Like.cs
+Mono.Data.SqlExpressions/In.cs
+Mono.Data.SqlExpressions/Aggregation.cs
diff --git a/mcs/class/System.Data/monodroid_System.Data.dll.sources b/mcs/class/System.Data/monodroid_System.Data.dll.sources
new file mode 100644 (file)
index 0000000..bbc860b
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.Data.dll.sources
index 64ad3df7ca647b60ca21fa69dfd903c34dba8500..bbc860b8cd783f47398a9a084950cde37d3e6221 100644 (file)
@@ -1,274 +1 @@
-Assembly/AssemblyInfo.cs
-../../build/common/Consts.cs.in
-../../build/common/Locale.cs
-System.Data/AcceptRejectRule.cs
-System.Data/ColumnTypeConverter.cs
-System.Data/CommandBehavior.cs
-System.Data/CommandType.cs
-System.Data/ConnectionState.cs
-System.Data/ConflictOption.cs
-System.Data/Constraint.cs
-System.Data/ConstraintCollection.cs
-System.Data/ConstraintConverter.cs
-System.Data/ConstraintException.cs
-System.Data/DataCategoryAttribute.cs
-System.Data/DataColumn.cs
-System.Data/DataColumnChangeEventArgs.cs
-System.Data/DataColumnChangeEventHandler.cs
-System.Data/DataColumnCollection.cs
-System.Data/DataColumnPropertyDescriptor.cs
-System.Data/DataException.cs
-System.Data/RelatedDataView.cs
-System.Data/RelationshipConverter.cs
-System.Data/DataRelation.cs
-System.Data/DataRelationCollection.cs
-System.Data/DataRelationPropertyDescriptor.cs
-System.Data/DataRow.cs
-System.Data/DataRowAction.cs
-System.Data/DataRowBuilder.cs
-System.Data/DataRowChangeEventArgs.cs
-System.Data/DataRowChangeEventHandler.cs
-System.Data/DataRowCollection.cs
-System.Data/DataRowState.cs
-System.Data/DataRowVersion.cs
-System.Data/DataRowView.cs
-System.Data/DataSet.cs
-System.Data/DataSetDateTime.cs
-System.Data/DataSysDescriptionAttribute.cs
-System.Data/DataTable.cs
-System.Data/DataTableCollection.cs
-System.Data/DataTableClearEventArgs.cs
-System.Data/DataTableClearEventHandler.cs
-System.Data/DataTableTypeConverter.cs
-System.Data/DataTablePropertyDescriptor.cs
-System.Data/DataTableReader.cs
-System.Data/DataTableNewRowEventArgs.cs
-System.Data/DataTableNewRowEventHandler.cs
-System.Data/DataView.cs
-System.Data/DataViewManager.cs
-System.Data/DataViewManagerListItemTypeDescriptor.cs
-System.Data/DataViewRowState.cs
-System.Data/DataViewSetting.cs
-System.Data/DataViewSettingCollection.cs
-System.Data/DBConcurrencyException.cs
-System.Data/DbType.cs
-System.Data/DefaultValueTypeConverter.cs
-System.Data/DeletedRowInaccessibleException.cs
-System.Data/DuplicateNameException.cs
-System.Data/EvaluateException.cs
-System.Data/FillErrorEventArgs.cs
-System.Data/FillErrorEventHandler.cs
-System.Data/ForeignKeyConstraint.cs
-System.Data/IColumnMapping.cs
-System.Data/IColumnMappingCollection.cs
-System.Data/IDataAdapter.cs
-System.Data/IDataParameter.cs
-System.Data/IDataParameterCollection.cs
-System.Data/IDataReader.cs
-System.Data/IDataRecord.cs
-System.Data/IDbCommand.cs
-System.Data/IDbConnection.cs
-System.Data/IDbDataAdapter.cs
-System.Data/IDbDataParameter.cs
-System.Data/IDbTransaction.cs
-System.Data/InRowChangingEventException.cs
-System.Data/InternalDataCollectionBase.cs
-System.Data/InvalidConstraintException.cs
-System.Data/InvalidExpressionException.cs
-System.Data/ISafeDataRecord.cs
-System.Data/IsolationLevel.cs
-System.Data/ITableMapping.cs
-System.Data/ITableMappingCollection.cs
-System.Data/KeyRestrictionBehavior.cs
-System.Data/LoadOption.cs
-System.Data/MappingType.cs
-System.Data/MergeFailedEventArgs.cs
-System.Data/MergeFailedEventHandler.cs
-System.Data/MergeManager.cs
-System.Data/MissingMappingAction.cs
-System.Data/MissingPrimaryKeyException.cs
-System.Data/MissingSchemaAction.cs
-System.Data/Node.cs
-System.Data/NoNullAllowedException.cs
-System.Data/OperationAbortedException.cs
-System.Data/ParameterDirection.cs
-System.Data/PropertyAttributes.cs
-System.Data/PropertyCollection.cs
-System.Data/ReadOnlyException.cs
-System.Data/ResDescriptionAttribute.cs
-System.Data/RowNotInTableException.cs
-System.Data/Rule.cs
-System.Data/SchemaType.cs
-System.Data/SerializationFormat.cs
-System.Data/SchemaSerializationMode.cs
-System.Data/SqlDbType.cs
-System.Data/StateChangeEventArgs.cs
-System.Data/StateChangeEventHandler.cs
-System.Data/StatementCompletedEventArgs.cs
-System.Data/StatementCompletedEventHandler.cs
-System.Data/StatementType.cs
-System.Data/StrongTypingException.cs
-System.Data/SyntaxErrorException.cs
-../../build/common/MonoTODOAttribute.cs
-System.Data/TableAdapterSchemaInfo.cs
-System.Data/TypeDataSetGeneratorException.cs
-System.Data/UniqueConstraint.cs
-System.Data/UpdateRowSource.cs
-System.Data/UpdateStatus.cs
-System.Data/VersionNotFoundException.cs
-System.Data/XmlDataInferenceLoader.cs
-System.Data/XmlHelper.cs
-System.Data/XmlDataReader.cs
-System.Data/XmlReadMode.cs
-System.Data/XmlWriteMode.cs
-System.Data/XmlConstants.cs
-System.Data/XmlDiffLoader.cs
-System.Data.Common/CatalogLocation.cs
-System.Data.Common/ComparerFactory.cs
-System.Data.Common/DataAdapter.cs
-System.Data.Common/DataColumnMappingCollection.cs
-System.Data.Common/DataColumnMapping.cs
-System.Data.Common/DataColumnMappingConverter.cs
-System.Data.Common/DataContainer.cs
-System.Data.Common/DataTableMappingCollection.cs
-System.Data.Common/DataTableMapping.cs
-System.Data.Common/DataTableMappingConverter.cs
-System.Data.Common/DbCommandBuilder.cs
-System.Data.Common/DbConnectionStringBuilder.cs
-System.Data.Common/DbConnectionStringBuilderHelper.cs
-System.Data.Common/DbCommand.cs
-System.Data.Common/DbConnection.cs
-System.Data.Common/DbConnectionOptions.cs
-System.Data.Common/DbConnectionString.cs
-System.Data.Common/DbDataAdapter.cs
-System.Data.Common/DbDataPermissionAttribute.cs
-System.Data.Common/DbDataPermission.cs
-System.Data.Common/DbDataReader.cs
-System.Data.Common/DbDataRecord.cs
-System.Data.Common/DbDataSourceEnumerator.cs
-System.Data.Common/DbEnumerator.cs
-System.Data.Common/DbException.cs
-System.Data.Common/DbMetaDataCollectionNames.cs
-System.Data.Common/DbMetaDataColumnNames.cs
-System.Data.Common/DbParameterCollection.cs
-System.Data.Common/DbParameter.cs
-System.Data.Common/DbProviderFactory.cs
-System.Data.Common/DbProviderSpecificTypePropertyAttribute.cs
-System.Data.Common/DbTable.cs
-System.Data.Common/DbTransaction.cs
-System.Data.Common/DbTypes.cs
-System.Data.Common/ExceptionHelper.cs
-System.Data.Common/FieldNameLookup.cs
-System.Data.Common/GroupByBehavior.cs
-System.Data.Common/IdentifierCase.cs
-System.Data.Common/Index.cs
-System.Data.Common/Key.cs
-System.Data.Common/PermissionHelper.cs
-System.Data.Common/RecordCache.cs
-System.Data.Common/RowUpdatedEventArgs.cs
-System.Data.Common/RowUpdatingEventArgs.cs
-System.Data.Common/SchemaInfo.cs
-System.Data.Common/SchemaTableColumn.cs
-System.Data.Common/SchemaTableOptionalColumn.cs
-System.Data.Common/SupportedJoinOperators.cs
-System.Data.SqlTypes/INullable.cs
-System.Data.SqlTypes/SqlBinary.cs
-System.Data.SqlTypes/SqlBoolean.cs
-System.Data.SqlTypes/SqlByte.cs
-System.Data.SqlTypes/SqlBytes.cs
-System.Data.SqlTypes/SqlChars.cs
-System.Data.SqlTypes/SqlCompareOptions.cs
-System.Data.SqlTypes/SqlDateTime.cs
-System.Data.SqlTypes/SqlDecimal.cs
-System.Data.SqlTypes/SqlDouble.cs
-System.Data.SqlTypes/SqlGuid.cs
-System.Data.SqlTypes/SqlInt16.cs
-System.Data.SqlTypes/SqlInt32.cs
-System.Data.SqlTypes/SqlInt64.cs
-System.Data.SqlTypes/SqlMoney.cs
-System.Data.SqlTypes/SqlNullValueException.cs
-System.Data.SqlTypes/SqlSingle.cs
-System.Data.SqlTypes/SqlString.cs
-System.Data.SqlTypes/SqlTruncateException.cs
-System.Data.SqlTypes/SqlTypeException.cs
-System.Data.SqlTypes/StorageState.cs
-System.Data.SqlTypes/SqlAlreadyFilledException.cs
-System.Data.SqlTypes/SqlNotFilledException.cs
-System.Data.SqlTypes/SqlXml.cs
-System.Data.Sql/SqlDataSourceEnumerator.cs
-System.Data.Sql/SqlNotificationRequest.cs
-Microsoft.SqlServer.Server/Format.cs
-Microsoft.SqlServer.Server/DataAccessKind.cs
-Microsoft.SqlServer.Server/IBinarySerialize.cs
-Microsoft.SqlServer.Server/InvalidUdtException.cs
-Microsoft.SqlServer.Server/SqlFunctionAttribute.cs
-Microsoft.SqlServer.Server/SqlMetaData.cs
-Microsoft.SqlServer.Server/SqlMethodAttribute.cs
-Microsoft.SqlServer.Server/SqlUserDefinedAggregateAttribute.cs
-Microsoft.SqlServer.Server/SqlUserDefinedTypeAttribute.cs
-Microsoft.SqlServer.Server/SystemDataAccessKind.cs
-Microsoft.SqlServer.Server/SqlFacetAttribute.cs
-Microsoft.SqlServer.Server/TriggerAction.cs
-Microsoft.SqlServer.Server/SqlTriggerContext.cs
-Microsoft.SqlServer.Server/SqlProcedureAttribute.cs
-Microsoft.SqlServer.Server/SqlTriggerAttribute.cs
-System.Data.SqlClient/SqlNotificationType.cs
-System.Data.SqlClient/SqlNotificationInfo.cs
-System.Data.SqlClient/SqlNotificationSource.cs
-System.Data.SqlClient/SqlAsyncState.cs
-System.Data.SqlClient/SqlAsyncResult.cs
-System.Data.SqlClient/SqlClientMetaDataCollectionNames.cs
-System.Data.SqlClient/SqlClientPermission.cs
-System.Data.SqlClient/SqlClientPermissionAttribute.cs
-System.Data.SqlClient/SqlCommand.cs
-System.Data.SqlClient/SqlCommandBuilder.cs
-System.Data.SqlClient/SqlConnection.cs
-System.Data.SqlClient/SqlConnectionStringBuilder.cs
-System.Data.SqlClient/SqlDataAdapter.cs
-System.Data.SqlClient/SqlDataReader.cs
-System.Data.SqlClient/SqlDataSourceConverter.cs
-System.Data.SqlClient/SqlDependency.cs
-System.Data.SqlClient/SqlError.cs
-System.Data.SqlClient/SqlErrorCollection.cs
-System.Data.SqlClient/SqlException.cs
-System.Data.SqlClient/SqlInfoMessageEventArgs.cs
-System.Data.SqlClient/SqlInfoMessageEventHandler.cs
-System.Data.SqlClient/SqlInitialCatalogConverter.cs
-System.Data.SqlClient/NetworkLibraryConverter.cs
-System.Data.SqlClient/SqlParameter.cs
-System.Data.SqlClient/SqlParameterCollection.cs
-System.Data.SqlClient/SqlParameterConverter.cs
-System.Data.SqlClient/SqlRowUpdatedEventArgs.cs
-System.Data.SqlClient/SqlRowUpdatedEventHandler.cs
-System.Data.SqlClient/SqlRowUpdatingEventArgs.cs
-System.Data.SqlClient/SqlRowUpdatingEventHandler.cs
-System.Data.SqlClient/SqlTransaction.cs
-System.Data.SqlClient/SqlXmlTextReader.cs
-System.Data.SqlClient/SQLDebugging.cs
-System.Data.SqlClient/SqlClientFactory.cs
-System.Data.SqlClient/SqlBulkCopy.cs
-System.Data.SqlClient/SqlBulkCopyOptions.cs
-System.Data.SqlClient/SqlBulkCopyColumnMapping.cs
-System.Data.SqlClient/SqlBulkCopyColumnMappingCollection.cs
-System.Data.SqlClient/SqlRowsCopiedEventHandler.cs
-System.Data.SqlClient/SqlRowsCopiedEventArgs.cs
-System.Data.SqlClient/SqlNotificationEventArgs.cs
-System.Data.SqlClient/OnChangeEventHandler.cs
-System.Data/XmlDataLoader.cs
-System.Data/XmlSchemaDataImporter.cs
-System.Data/XmlSchemaWriter.cs
-System.Data/XmlTableWriter.cs
-System.Xml/XmlDataDocument.cs
-Mono.Data.SqlExpressions/Tokenizer.cs
-Mono.Data.SqlExpressions/Numeric.cs
-Mono.Data.SqlExpressions/Expressions.cs
-Mono.Data.SqlExpressions/Literal.cs
-Mono.Data.SqlExpressions/ColumnReference.cs
-Mono.Data.SqlExpressions/ArithmeticExpressions.cs
-Mono.Data.SqlExpressions/BooleanExpressions.cs
-Mono.Data.SqlExpressions/Comparison.cs
-Mono.Data.SqlExpressions/StringFunctions.cs
-Mono.Data.SqlExpressions/Functions.cs
-Mono.Data.SqlExpressions/Like.cs
-Mono.Data.SqlExpressions/In.cs
-Mono.Data.SqlExpressions/Aggregation.cs
+#include mobile_System.Data.dll.sources
index 4c6fdd903bea1a0131fde65297a6d35a5b4080a3..105ff7b1ffd189ab76fe3467f825dc04e0d32072 100644 (file)
@@ -195,7 +195,21 @@ namespace System.Runtime.Serialization
                        string clrns = ns.StartsWith (dnsb, StringComparison.Ordinal) ?  ns.Substring (dnsb.Length) : ns;
 
                        foreach (var ass in AppDomain.CurrentDomain.GetAssemblies ()) {
-                               foreach (var t in ass.GetTypes ()) {
+                               Type [] types;
+
+#if MOONLIGHT
+                               try  {
+                                       types = ass.GetTypes ();
+                               } catch (System.Reflection.ReflectionTypeLoadException rtle) {
+                                       types = rtle.Types;
+                               }
+#else
+                               types = ass.GetTypes ();
+#endif
+                               if (types == null)
+                                       continue;
+
+                               foreach (var t in types) {
                                        // there can be null entries or exception throw to access the attribute - 
                                        // at least when some referenced assemblies could not be loaded (affects moonlight)
                                        if (t == null)
diff --git a/mcs/class/System.Runtime.Serialization/mobile_System.Runtime.Serialization.dll.sources b/mcs/class/System.Runtime.Serialization/mobile_System.Runtime.Serialization.dll.sources
new file mode 100644 (file)
index 0000000..7885b80
--- /dev/null
@@ -0,0 +1,2 @@
+#include moonlight_raw_System.Runtime.Serialization.dll.sources
+System.Xml/OnXmlDictionaryReaderClose.cs
diff --git a/mcs/class/System.Runtime.Serialization/monodroid_System.Runtime.Serialization.dll.sources b/mcs/class/System.Runtime.Serialization/monodroid_System.Runtime.Serialization.dll.sources
new file mode 100644 (file)
index 0000000..6caafd4
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.Runtime.Serialization.dll.sources
index 7885b804a7c8b2cde571eaf73ef0402c89e13c8d..6caafd411987428834bd3a5042eec3fbd5782d17 100644 (file)
@@ -1,2 +1 @@
-#include moonlight_raw_System.Runtime.Serialization.dll.sources
-System.Xml/OnXmlDictionaryReaderClose.cs
+#include mobile_System.Runtime.Serialization.dll.sources
index 9616a271a35ec7b24d2d07b4d874ee33a5081705..561517f789a8d214899b59638778fabed66d8747 100644 (file)
@@ -116,12 +116,12 @@ namespace System.ServiceModel.Discovery.Configuration
                
                protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
                }
                
                protected override void OnInitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
                }
        }
 }
index 296ebaefc428b52c2e9733ecb55396ddccc7f86e..a7583eb982188d06ec3f3ca4a86c71072fd8a59c 100644 (file)
@@ -94,11 +94,25 @@ namespace System.ServiceModel.Discovery.Configuration
 
                protected override BindingElement CreateBindingElement ()
                {
-                       throw new NotImplementedException ();
+                       var be = new DiscoveryClientBindingElement ();
+                       ApplyConfiguration (be);
+                       return be;
                }
 
                protected override void InitializeFrom (BindingElement bindingElement)
                {
+                       if (bindingElement == null)
+                               throw new ArgumentNullException ("bindingElement");
+                       if (DiscoveryEndpoint == null)
+                               throw new ArgumentNullException ("'endpoint' configuration element is missing.");
+                       var be = (DiscoveryClientBindingElement) bindingElement;
+
+                       base.InitializeFrom (be);
+
+                       if (be.FindCriteria != null)
+                               FindCriteria.InitializeFrom (be.FindCriteria);
+
+                       // FIXME: initialize DiscoveryEndpoint
                        throw new NotImplementedException ();
                }
        }
index beb8938f705943fb03b0c602fcfbc8fb9149ffb7..2cc6db56005bedc9bf12eafabdce7d3b6709bca6 100644 (file)
@@ -78,35 +78,58 @@ namespace System.ServiceModel.Discovery.Configuration
                protected override ConfigurationPropertyCollection Properties {
                        get { return properties; }
                }
-
+               
                protected override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
                {
-                       throw new NotImplementedException ();
+                       if (contractDescription == null)
+                               throw new ArgumentNullException ("contractDescription");
+                       var ret = new DiscoveryEndpoint (DiscoveryVersion, DiscoveryMode) { MaxResponseDelay = this.MaxResponseDelay };
+                       if (ret.Contract.ContractType != contractDescription.ContractType)
+                               throw new ArgumentException ("The argument contractDescription does not represent the expected Discovery contract");
+                       return ret;
                }
-
+               
                protected override void InitializeFrom (ServiceEndpoint endpoint)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (DiscoveryEndpoint) endpoint;
+                       DiscoveryVersion = de.DiscoveryVersion;
+                       MaxResponseDelay = de.MaxResponseDelay;
                }
                
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (DiscoveryEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument DiscoveryEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxResponseDelay = MaxResponseDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       de.Binding = ConfigUtil.CreateBinding (serviceEndpointElement.Binding, serviceEndpointElement.BindingConfiguration); // it depends on InternalVisibleTo(System.ServiceModel)
                }
-               
+
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (DiscoveryEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument AnnouncementEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxResponseDelay = MaxResponseDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       de.Binding = ConfigUtil.CreateBinding (serviceEndpointElement.Binding, serviceEndpointElement.BindingConfiguration); // it depends on InternalVisibleTo(System.ServiceModel)
                }
                
                protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
                }
                
                protected override void OnInitializeAndValidate (ServiceEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
                }
        }
 }
index 712b31e5c03dd90e1c387347ae7fa648487cb461..c06c53dff15444be8092b610b627988e96f5d16e 100644 (file)
@@ -36,24 +36,79 @@ namespace System.ServiceModel.Discovery.Configuration
                {
                }
                
+               private bool CanConvert (Type type)
+               {
+                       if (type == typeof (string))
+                               return true;
+                       if (type == typeof (DiscoveryVersion))
+                               return true;
+                       return false;
+               }
+               
                public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
                {
-                       throw new NotImplementedException ();
+                       if (sourceType == null)
+                               throw new ArgumentNullException ("sourceType");
+
+                       return CanConvert (sourceType);
                }
                
                public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
                {
-                       throw new NotImplementedException ();
+                       if (destinationType == null)
+                               return false;
+
+                       return CanConvert (destinationType);
                }
                
                public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
                {
-                       throw new NotImplementedException ();
+                       if (value == null)
+                               throw new ArgumentNullException ("value");
+
+                       if (!CanConvertFrom (context, value.GetType ()))
+                               throw new NotSupportedException ("Cannot convert from value.");
+
+                       if (value is DiscoveryVersion)
+                               return value;
+
+                       string s = (value as string);
+                       if (s != null) {
+                               switch (s) {
+                               case "WSDiscovery11":
+                                       return DiscoveryVersion.WSDiscovery11;
+                               case "WSDiscoveryApril2005":
+                                       return DiscoveryVersion.WSDiscoveryApril2005;
+                               case "WSDiscoveryCD1":
+                                       return DiscoveryVersion.WSDiscoveryCD1;
+                               }
+                               throw new NotSupportedException ("Cannot convert from value.");
+                       }
+
+                       return base.ConvertFrom (context, culture, value);
                }
 
                public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
                {
-                       throw new NotImplementedException ();
+                       if (!CanConvertTo (context, destinationType))
+                               throw new NotSupportedException (Locale.GetText ("Cannot convert to destination type."));
+
+                       var ver = (value as DiscoveryVersion);
+                       if (ver != null) {
+                               if (destinationType == typeof (DiscoveryVersion))
+                                       return ver;
+
+                               if (destinationType == typeof (string)) {
+                                       if (ver.Equals (DiscoveryVersion.WSDiscovery11))
+                                               return "WSDiscovery11";
+                                       if (ver.Equals (DiscoveryVersion.WSDiscoveryApril2005))
+                                               return "WSDiscoveryApril2005";
+                                       if (ver.Equals (DiscoveryVersion.WSDiscoveryCD1))
+                                               return "WSDiscoveryCD1";
+                               }
+                               throw new NotSupportedException ("Cannot convert to destination type.");
+                       }
+                       return base.ConvertTo (context, culture, value, destinationType);
                }
        }
 }
index d8fb28f942fd29f3aeb83c03f93e357133c6724a..59df86f37bd7dc8d04a14ed81ec422773db9bbb6 100644 (file)
@@ -77,12 +77,12 @@ namespace System.ServiceModel.Discovery.Configuration
                
                protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // There seems nothing to do here.
                }
                
                protected override void OnInitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // There seems nothing to do here.
                }
        }
 }
index e0bd8dc1d084db189075da8216e1e3159178ba1a..db19b5a4e56bdb1ff433a6b29b127576197ad6cb 100644 (file)
@@ -27,6 +27,8 @@ using System;
 using System.ComponentModel;
 using System.Configuration;
 using System.ServiceModel.Configuration;
+using System.Xml;
+using System.Xml.Linq;
 
 namespace System.ServiceModel.Discovery.Configuration
 {
@@ -83,7 +85,14 @@ namespace System.ServiceModel.Discovery.Configuration
                
                protected override object CreateBehavior ()
                {
-                       throw new NotImplementedException ();
+                       var ret = new EndpointDiscoveryBehavior () { Enabled = this.Enabled };
+                       foreach (ContractTypeNameElement ctn in ContractTypeNames)
+                               ret.ContractTypeNames.Add (new XmlQualifiedName (ctn.Name, ctn.Namespace));
+                       foreach (XmlElementElement xee in Extensions)
+                               ret.Extensions.Add (XElement.Load (new XmlNodeReader (xee.XmlElement)));
+                       foreach (ScopeElement se in Scopes)
+                               ret.Scopes.Add (se.Scope);
+                       return ret;
                }
        }
 }
index 01f840927ac8c31b5f31cb12bfe3ffd624746ce3..ed3659d289c75208e8109c4d5876d944fcdd3fc9 100644 (file)
@@ -124,6 +124,23 @@ namespace System.ServiceModel.Discovery.Configuration
                        foreach (ScopeElement scope in other.Scopes)
                                Scopes.Add (new ScopeElement () { Scope = scope.Scope });
                }
+
+               internal void InitializeFrom (FindCriteria fc)
+               {
+                       foreach (var ctn in fc.ContractTypeNames)
+                               ContractTypeNames.Add (new ContractTypeNameElement () { Name = ctn.Name, Namespace = ctn.Namespace});
+                       Duration = fc.Duration;
+                       var doc = new XmlDocument ();
+                       foreach (var ext in fc.Extensions) {
+                               var xr = ext.CreateReader ();
+                               xr.MoveToContent ();
+                               Extensions.Add (new XmlElementElement () { XmlElement = (XmlElement) doc.ReadNode (xr) });
+                       }
+                       MaxResults = fc.MaxResults;
+                       ScopeMatchBy = fc.ScopeMatchBy;
+                       foreach (var scope in fc.Scopes)
+                               Scopes.Add (new ScopeElement () { Scope = scope});
+               }
        }
 }
 
index f86f1422f4d5a1317a6111c7f08d84b6bb9d2b26..aa9d56d57b3abf8e933f1072ec82e63b235064a4 100644 (file)
@@ -26,6 +26,7 @@
 using System;
 using System.ComponentModel;
 using System.Configuration;
+using System.Linq;
 using System.ServiceModel.Configuration;
 using System.ServiceModel.Description;
 
@@ -57,7 +58,7 @@ namespace System.ServiceModel.Discovery.Configuration
                
                [TypeConverter (typeof (TimeSpanConverter))]
                [ConfigurationPropertyAttribute("maxAnnouncementDelay", DefaultValue = "00:00:00.500")]
-               public TimeSpan MaxAnnouncementDelay {
+               public new TimeSpan MaxAnnouncementDelay {
                        get { return (TimeSpan) base [max_announcement_delay]; }
                        set { base [max_announcement_delay] = value; }
                }
@@ -79,32 +80,72 @@ namespace System.ServiceModel.Discovery.Configuration
 
                protected override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
                {
-                       throw new NotImplementedException ();
+                       if (contractDescription == null)
+                               throw new ArgumentNullException ("contractDescription");
+                       DiscoveryVersion ver = null;
+                       switch (contractDescription.ContractType.Namespace) {
+                       case DiscoveryVersion.Namespace11:
+                               ver = DiscoveryVersion.WSDiscovery11;
+                               break;
+                       case DiscoveryVersion.NamespaceApril2005:
+                               ver = DiscoveryVersion.WSDiscoveryApril2005;
+                               break;
+                       case DiscoveryVersion.NamespaceCD1:
+                               ver = DiscoveryVersion.WSDiscoveryCD1;
+                               break;
+                       }
+                       var ret = new UdpAnnouncementEndpoint (ver, MulticastAddress);
+                       ret.MaxAnnouncementDelay = MaxAnnouncementDelay;
+                       TransportSettings.ApplyConfiguration (ret.TransportSettings);
+                       return ret;
                }
 
                protected override void InitializeFrom (ServiceEndpoint endpoint)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var e = (UdpAnnouncementEndpoint) endpoint;
+                       MaxAnnouncementDelay = e.MaxAnnouncementDelay;
+                       MulticastAddress = e.MulticastAddress;
+                       TransportSettings.InitializeFrom (e.TransportSettings);
                }
-               
+
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (AnnouncementEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument AnnouncementEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxAnnouncementDelay = MaxAnnouncementDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       var be = (UdpTransportBindingElement) de.Binding.CreateBindingElements ().First (b => b is UdpTransportBindingElement);
+                       TransportSettings.ApplyConfiguration (be.TransportSettings);
                }
-               
+
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (AnnouncementEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument AnnouncementEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxAnnouncementDelay = MaxAnnouncementDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       var be = (UdpTransportBindingElement) de.Binding.CreateBindingElements ().First (b => b is UdpTransportBindingElement);
+                       TransportSettings.ApplyConfiguration (be.TransportSettings);
                }
-               
+
                protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
+                       base.OnInitializeAndValidate (channelEndpointElement);
                }
-               
+
                protected override void OnInitializeAndValidate (ServiceEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
+                       base.OnInitializeAndValidate (channelEndpointElement);
                }
        }
 }
index bac74eda63a0264c57fb6d05f77cf80c61a6a0d9..7fd1df50d0d4d2438f7b42406bf898cb47495fe5 100644 (file)
@@ -26,6 +26,7 @@
 using System;
 using System.ComponentModel;
 using System.Configuration;
+using System.Linq;
 using System.ServiceModel.Configuration;
 using System.ServiceModel.Description;
 
@@ -54,7 +55,7 @@ namespace System.ServiceModel.Discovery.Configuration
                }
 
                [ConfigurationProperty ("discoveryMode", DefaultValue = ServiceDiscoveryMode.Adhoc)]
-               public ServiceDiscoveryMode DiscoveryMode {
+               public new ServiceDiscoveryMode DiscoveryMode {
                        get { return (ServiceDiscoveryMode) base [discovery_mode]; }
                        set { base [discovery_mode] = value; }
                }
@@ -65,7 +66,7 @@ namespace System.ServiceModel.Discovery.Configuration
 
                [TypeConverter (typeof (TimeSpanConverter))]
                [ConfigurationProperty ("maxResponseDelay", DefaultValue = "00:00:00.500")]
-               public TimeSpan MaxResponseDelay {
+               public new TimeSpan MaxResponseDelay {
                        get { return (TimeSpan) base [max_response_delay]; }
                        set { base [max_response_delay] = value; }
                }
@@ -87,27 +88,72 @@ namespace System.ServiceModel.Discovery.Configuration
                
                protected override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
                {
-                       throw new NotImplementedException ();
+                       if (contractDescription == null)
+                               throw new ArgumentNullException ("contractDescription");
+                       DiscoveryVersion ver = null;
+                       switch (contractDescription.ContractType.Namespace) {
+                       case DiscoveryVersion.Namespace11:
+                               ver = DiscoveryVersion.WSDiscovery11;
+                               break;
+                       case DiscoveryVersion.NamespaceApril2005:
+                               ver = DiscoveryVersion.WSDiscoveryApril2005;
+                               break;
+                       case DiscoveryVersion.NamespaceCD1:
+                               ver = DiscoveryVersion.WSDiscoveryCD1;
+                               break;
+                       }
+                       var ret = new UdpDiscoveryEndpoint (ver, MulticastAddress);
+                       ret.MaxResponseDelay = MaxResponseDelay;
+                       TransportSettings.ApplyConfiguration (ret.TransportSettings);
+                       return ret;
                }
+
                protected override void InitializeFrom (ServiceEndpoint endpoint)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var e = (UdpDiscoveryEndpoint) endpoint;
+                       MaxResponseDelay = e.MaxResponseDelay;
+                       MulticastAddress = e.MulticastAddress;
+                       TransportSettings.InitializeFrom (e.TransportSettings);
                }
+
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (DiscoveryEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument AnnouncementEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxResponseDelay = MaxResponseDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       var be = (UdpTransportBindingElement) de.Binding.CreateBindingElements ().First (b => b is UdpTransportBindingElement);
+                       TransportSettings.ApplyConfiguration (be.TransportSettings);
                }
+
                protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       var de = (DiscoveryEndpoint) endpoint;
+                       if (!de.DiscoveryVersion.Equals (DiscoveryVersion))
+                               throw new ArgumentException ("Argument AnnouncementEndpoint is initialized with different DiscoveryVersion");
+                       de.MaxResponseDelay = MaxResponseDelay;
+                       de.Address = serviceEndpointElement.CreateEndpointAddress (); // it depends on InternalVisibleTo(System.ServiceModel)
+                       var be = (UdpTransportBindingElement) de.Binding.CreateBindingElements ().First (b => b is UdpTransportBindingElement);
+                       TransportSettings.ApplyConfiguration (be.TransportSettings);
                }
+
                protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
+                       base.OnInitializeAndValidate (channelEndpointElement);
                }
+
                protected override void OnInitializeAndValidate (ServiceEndpointElement channelEndpointElement)
                {
-                       throw new NotImplementedException ();
+                       // It seems to do nothing.
+                       base.OnInitializeAndValidate (channelEndpointElement);
                }
        }
 }
index ca2ae99453620eb9ce5e0f52324cacb2a7cee1e2..8c9fee26e5b4ba7c492a5ed75343dfa4d217aad6 100644 (file)
@@ -44,6 +44,7 @@ namespace System.ServiceModel.Discovery.Configuration
                        max_received_message_size = new ConfigurationProperty ("maxReceivedMessageSize", typeof (long), 0xFFE7, null, new LongValidator (0, long.MaxValue), ConfigurationPropertyOptions.None);
                        max_unicast_retransmit_count = new ConfigurationProperty ("maxUnicastRetransmitCount", typeof (long), 1, null, new IntegerValidator (0, int.MaxValue), ConfigurationPropertyOptions.None);
                        multicast_interface_id = new ConfigurationProperty ("multicastInterfaceId", typeof (string), null, null, null, ConfigurationPropertyOptions.None);
+                       socket_receive_buffer_size = new ConfigurationProperty ("socketReceiveBufferSize", typeof (int), 0x10000, null, new IntegerValidator (0, int.MaxValue), ConfigurationPropertyOptions.None);
                        ttl = new ConfigurationProperty ("timeToLive", typeof (int), 1, null, new IntegerValidator (0, int.MaxValue), ConfigurationPropertyOptions.None);
                        properties = new ConfigurationPropertyCollection ();
                        ConfigurationProperty [] props = {duplicate_message_history_length, max_buffer_pool_size, max_multicast_retransmit_count, max_pending_message_count, max_received_message_size, max_unicast_retransmit_count, multicast_interface_id, ttl};
@@ -116,6 +117,36 @@ namespace System.ServiceModel.Discovery.Configuration
                        get { return (int) base [ttl]; }
                        set { base [ttl] = value; }
                }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get { return properties; }
+               }
+
+               internal void ApplyConfiguration (UdpTransportSettings t)
+               {
+                       t.DuplicateMessageHistoryLength = DuplicateMessageHistoryLength;
+                       t.MaxBufferPoolSize = MaxBufferPoolSize;
+                       t.MaxMulticastRetransmitCount = MaxMulticastRetransmitCount;
+                       t.MaxPendingMessageCount = MaxPendingMessageCount;
+                       t.MaxReceivedMessageSize = MaxReceivedMessageSize;
+                       t.MaxUnicastRetransmitCount = MaxUnicastRetransmitCount;
+                       t.MulticastInterfaceId = MulticastInterfaceId;
+                       t.SocketReceiveBufferSize = SocketReceiveBufferSize;
+                       t.TimeToLive = TimeToLive;
+               }
+
+               internal void InitializeFrom (UdpTransportSettings t)
+               {
+                       DuplicateMessageHistoryLength = t.DuplicateMessageHistoryLength;
+                       MaxBufferPoolSize = t.MaxBufferPoolSize;
+                       MaxMulticastRetransmitCount = t.MaxMulticastRetransmitCount;
+                       MaxPendingMessageCount = t.MaxPendingMessageCount;
+                       MaxReceivedMessageSize = t.MaxReceivedMessageSize;
+                       MaxUnicastRetransmitCount = t.MaxUnicastRetransmitCount;
+                       MulticastInterfaceId = t.MulticastInterfaceId;
+                       SocketReceiveBufferSize = t.SocketReceiveBufferSize;
+                       TimeToLive = t.TimeToLive;
+               }
        }
 }
 
index 1bcf85e72ba6109bb67a3ebd04f6584aec66d515..68fb458ee338fb09a42840c830eeb8fafec16cf6 100644 (file)
@@ -99,7 +99,6 @@ namespace System.ServiceModel.Discovery
                        if (rmp == null)
                                throw new ArgumentException ("This duplex channel from the channel listener cannot send messages without RemoteEndpointMessageProperty");
                        var cli = new UdpClient ();
-Console.Error.WriteLine ("Target: " + rmp.Address + ":" + rmp.Port);
                        cli.Connect (IPAddress.Parse (rmp.Address), rmp.Port);
                        return cli;
                }
index 295aec94282d2e86215287b50597541b293649cb..72e9bc6a3537953378647d7460c131fd3b876bc2 100644 (file)
@@ -1,6 +1,3 @@
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-../../build/common/MonoTODOAttribute.cs
 Assembly/AssemblyInfo.cs
 System.ServiceModel.Channels/DiscoveryChannelBase.cs
 System.ServiceModel.Channels/RequestChannelBase.cs
index 0e70f069446522bb2da0806967428dc3895289a6..45db7db572120b8fe177538c1f3cb113a6569067 100755 (executable)
@@ -34,8 +34,6 @@ namespace System.ServiceModel.Discovery
 {
        public class DiscoveryMessageSequenceGenerator
        {
-               static readonly Random rnd = new Random ();
-
                public DiscoveryMessageSequenceGenerator ()
                        : this (AppDomain.CurrentDomain.Id, null) // not sure what should be used for instanceId; multiple instances share the same Id
                {
index 83fee566630e7ac9bd343917be1d9545fe1667c5..d1746b94f2cb43a108d7e3260dab09edf81bb2d1 100644 (file)
@@ -41,7 +41,6 @@ namespace System.ServiceModel.Channels
 #endif
        {
                Encoding write_encoding;
-               XmlDictionaryReaderQuotas reader_quotas;
                WebContentTypeMapper content_type_mapper;
                int max_read_pool_size = 0x10000, max_write_pool_size = 0x10000;
 
@@ -58,7 +57,7 @@ namespace System.ServiceModel.Channels
                                throw new ArgumentNullException ("writeEncoding");
                        WriteEncoding = writeEncoding;
 #if !NET_2_1
-                       reader_quotas = new XmlDictionaryReaderQuotas ();
+                       ReaderQuotas = new XmlDictionaryReaderQuotas ();
 #endif
                }
 
@@ -91,9 +90,7 @@ namespace System.ServiceModel.Channels
                        }
                }
 
-               public XmlDictionaryReaderQuotas ReaderQuotas {
-                       get { return reader_quotas; }
-               }
+               public XmlDictionaryReaderQuotas ReaderQuotas { get; internal set; }
 
                public Encoding WriteEncoding {
                        get { return write_encoding; }
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointCollectionElement.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointCollectionElement.cs
new file mode 100644 (file)
index 0000000..8bf4c92
--- /dev/null
@@ -0,0 +1,40 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.ComponentModel;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Configuration
+{
+       public class WebHttpEndpointCollectionElement : StandardEndpointCollectionElement<WebHttpEndpoint, WebHttpEndpointElement>
+       {
+       }
+
+}
+
+#endif
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointElement.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebHttpEndpointElement.cs
new file mode 100644 (file)
index 0000000..380ac8f
--- /dev/null
@@ -0,0 +1,206 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Reflection;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.ServiceModel.Web;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public class WebHttpEndpointElement : StandardEndpointElement
+       {
+               static ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection ();
+
+               static ConfigurationProperty content_type_mapper, cross_domain_script_access_enabled, host_name_comparison_mode, max_buffer_pool_size, max_buffer_size, max_received_message_size, reader_quotas, security, transfer_mode, write_encoding, automatic_format_selection_enabled, default_outgoing_response_format, fault_exception_enabled, help_enabled;
+
+               static WebHttpEndpointElement ()
+               {
+                       content_type_mapper = new ConfigurationProperty ("contentTypeMapper", typeof (string), "", null, null, ConfigurationPropertyOptions.None);
+                       cross_domain_script_access_enabled = new ConfigurationProperty ("crossDomainScriptAccessEnabled", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+                       host_name_comparison_mode = new ConfigurationProperty ("hostNameComparisonMode", typeof (HostNameComparisonMode), HostNameComparisonMode.StrongWildcard, null, null, ConfigurationPropertyOptions.None);
+                       max_buffer_pool_size = new ConfigurationProperty ("maxBufferPoolSize", typeof (long), 0x80000, null, null, ConfigurationPropertyOptions.None);
+                       max_buffer_size = new ConfigurationProperty ("maxBufferSize", typeof (int), 0x10000, null, null, ConfigurationPropertyOptions.None);
+                       max_received_message_size = new ConfigurationProperty ("maxReceivedMessageSize", typeof (long), 0x10000, null, null, ConfigurationPropertyOptions.None);
+                       reader_quotas = new ConfigurationProperty ("readerQuotas", typeof (XmlDictionaryReaderQuotas), null, null, null, ConfigurationPropertyOptions.None);
+                       security = new ConfigurationProperty ("security", typeof (WebHttpSecurity), null, null, null, ConfigurationPropertyOptions.None);
+                       transfer_mode = new ConfigurationProperty ("transferMode", typeof (TransferMode), TransferMode.Buffered, null, null, ConfigurationPropertyOptions.None);
+                       write_encoding = new ConfigurationProperty ("writeEncoding", typeof (Encoding), "utf-8", new EncodingConverter (), null, ConfigurationPropertyOptions.None);
+                       automatic_format_selection_enabled = new ConfigurationProperty ("automaticFormatSelectionEnabled", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+                       default_outgoing_response_format = new ConfigurationProperty ("defaultOutgoingResponseFormat", typeof (WebMessageFormat), WebMessageFormat.Xml, null, null, ConfigurationPropertyOptions.None);
+                       fault_exception_enabled = new ConfigurationProperty ("faultExceptionEnabled", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+                       help_enabled = new ConfigurationProperty ("helpEnabled", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+
+                       foreach (var item in new ConfigurationProperty [] {content_type_mapper, cross_domain_script_access_enabled, host_name_comparison_mode, max_buffer_pool_size, max_buffer_size, max_received_message_size, reader_quotas, security, transfer_mode, write_encoding, automatic_format_selection_enabled, default_outgoing_response_format, fault_exception_enabled, help_enabled})
+                               properties.Add (item);
+               }
+
+               protected internal override Type EndpointType {
+                       get { return typeof (WebHttpEndpoint); }
+               }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get { return properties; }
+               }
+
+               [ConfigurationProperty ("contentTypeMapper", DefaultValue = "")]
+               [StringValidator (MinLength = 0)]
+               public string ContentTypeMapper {
+                       get { return (string) this ["contentTypeMapper"]; }
+                       set { this ["contentTypeMapper"] = value; }
+               }
+
+               [ConfigurationProperty ("crossDomainScriptAccessEnabled", DefaultValue = false)]
+               public bool CrossDomainScriptAccessEnabled {
+                       get { return (bool) this ["crossDomainScriptAccessEnabled"]; }
+                       set { this ["crossDomainScriptAccessEnabled"] = value; }
+               }
+
+               [ConfigurationProperty ("hostNameComparisonMode", DefaultValue = HostNameComparisonMode.StrongWildcard)]
+               public HostNameComparisonMode HostNameComparisonMode {
+                       get { return (HostNameComparisonMode) this ["hostNameComparisonMode"]; }
+                       set { this ["hostNameComparisonMode"] = value; }
+               }
+
+               [LongValidator (MinValue = 0, MaxValue = long.MaxValue, ExcludeRange = false)]
+               [ConfigurationProperty ("maxBufferPoolSize", DefaultValue = 0x80000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public long MaxBufferPoolSize {
+                       get { return (long) this ["maxBufferPoolSize"]; }
+                       set { this ["maxBufferPoolSize"] = value; }
+               }
+
+               [IntegerValidator ( MinValue = 1,
+                       MaxValue = int.MaxValue,
+                       ExcludeRange = false)]
+               [ConfigurationProperty ("maxBufferSize", DefaultValue = 0x10000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public int MaxBufferSize {
+                       get { return (int) this ["maxBufferSize"]; }
+                       set { this ["maxBufferSize"] = value; }
+               }
+
+               [LongValidator ( MinValue = 1, MaxValue = long.MaxValue, ExcludeRange = false)]
+               [ConfigurationProperty ("maxReceivedMessageSize", DefaultValue = 0x10000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public long MaxReceivedMessageSize {
+                       get { return (long) this ["maxReceivedMessageSize"]; }
+                       set { this ["maxReceivedMessageSize"] = value; }
+               }
+
+               [ConfigurationProperty ("readerQuotas")]
+               public XmlDictionaryReaderQuotasElement ReaderQuotas {
+                       get { return (XmlDictionaryReaderQuotasElement) this ["readerQuotas"]; }
+               }
+
+               [ConfigurationProperty ("security")]
+               public WebHttpSecurityElement Security {
+                       get { return (WebHttpSecurityElement) this ["security"]; }
+               }
+
+               [ConfigurationProperty ("transferMode", DefaultValue = TransferMode.Buffered)]
+               public TransferMode TransferMode {
+                       get { return (TransferMode) this ["transferMode"]; }
+                       set { this ["transferMode"] = value; }
+               }
+
+               [TypeConverter (typeof (EncodingConverter))]
+               [ConfigurationProperty ("writeEncoding", DefaultValue = "utf-8")]
+               public Encoding WriteEncoding {
+                       get { return (Encoding) this ["writeEncoding"]; }
+                       set { this ["writeEncoding"] = value; }
+               }
+
+
+               [ConfigurationProperty ("automaticFormatSelectionEnabled", DefaultValue = false)]
+               public bool AutomaticFormatSelectionEnabled {
+                       get { return (bool) this ["automaticFormatSelectionEnabled"]; }
+                       set { this ["automaticFormatSelectionEnabled"] = value; }
+               }
+
+               [ConfigurationProperty ("defaultOutgoingResponseFormat", DefaultValue = WebMessageFormat.Xml)]
+               public WebMessageFormat DefaultOutgoingResponseFormat {
+                       get { return (WebMessageFormat) this ["defaultOutgoingResponseFormat"]; }
+                       set { this ["defaultOutgoingResponseFormat"] = value; }
+               }
+
+               [ConfigurationProperty ("faultExceptionEnabled", DefaultValue = false)]
+               public bool FaultExceptionEnabled {
+                       get { return (bool) this ["faultExceptionEnabled"]; }
+                       set { this ["faultExceptionEnabled"] = value; }
+               }
+
+               [ConfigurationProperty ("helpEnabled", DefaultValue = false)]
+               public bool HelpEnabled {
+                       get { return (bool) this ["helpEnabled"]; }
+                       set { this ["helpEnabled"] = value; }
+               }
+
+
+               protected internal override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
+
+#endif
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointCollectionElement.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointCollectionElement.cs
new file mode 100644 (file)
index 0000000..7a5a9ec
--- /dev/null
@@ -0,0 +1,40 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.ComponentModel;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Configuration
+{
+       public class WebScriptEndpointCollectionElement : StandardEndpointCollectionElement<WebScriptEndpoint, WebScriptEndpointElement>
+       {
+       }
+
+}
+
+#endif
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointElement.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Configuration/WebScriptEndpointElement.cs
new file mode 100644 (file)
index 0000000..e12f1f0
--- /dev/null
@@ -0,0 +1,176 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Reflection;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.ServiceModel.Web;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public class WebScriptEndpointElement : StandardEndpointElement
+       {
+               static ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection ();
+
+               static ConfigurationProperty content_type_mapper, cross_domain_script_access_enabled, host_name_comparison_mode, max_buffer_pool_size, max_buffer_size, max_received_message_size, reader_quotas, security, transfer_mode, write_encoding;
+
+               static WebScriptEndpointElement ()
+               {
+                       content_type_mapper = new ConfigurationProperty ("contentTypeMapper", typeof (string), "", null, null, ConfigurationPropertyOptions.None);
+                       cross_domain_script_access_enabled = new ConfigurationProperty ("crossDomainScriptAccessEnabled", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+                       host_name_comparison_mode = new ConfigurationProperty ("hostNameComparisonMode", typeof (HostNameComparisonMode), HostNameComparisonMode.StrongWildcard, null, null, ConfigurationPropertyOptions.None);
+                       max_buffer_pool_size = new ConfigurationProperty ("maxBufferPoolSize", typeof (long), 0x80000, null, null, ConfigurationPropertyOptions.None);
+                       max_buffer_size = new ConfigurationProperty ("maxBufferSize", typeof (int), 0x10000, null, null, ConfigurationPropertyOptions.None);
+                       max_received_message_size = new ConfigurationProperty ("maxReceivedMessageSize", typeof (long), 0x10000, null, null, ConfigurationPropertyOptions.None);
+                       reader_quotas = new ConfigurationProperty ("readerQuotas", typeof (XmlDictionaryReaderQuotas), null, null, null, ConfigurationPropertyOptions.None);
+                       security = new ConfigurationProperty ("security", typeof (WebHttpSecurity), null, null, null, ConfigurationPropertyOptions.None);
+                       transfer_mode = new ConfigurationProperty ("transferMode", typeof (TransferMode), TransferMode.Buffered, null, null, ConfigurationPropertyOptions.None);
+                       write_encoding = new ConfigurationProperty ("writeEncoding", typeof (Encoding), "utf-8", new EncodingConverter (), null, ConfigurationPropertyOptions.None);
+
+                       foreach (var item in new ConfigurationProperty [] {content_type_mapper, cross_domain_script_access_enabled, host_name_comparison_mode, max_buffer_pool_size, max_buffer_size, max_received_message_size, reader_quotas, security, transfer_mode, write_encoding})
+                               properties.Add (item);
+               }
+
+               protected internal override Type EndpointType {
+                       get { return typeof (WebScriptEndpoint); }
+               }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get { return properties; }
+               }
+
+               [ConfigurationProperty ("contentTypeMapper", DefaultValue = "")]
+               [StringValidator (MinLength = 0)]
+               public string ContentTypeMapper {
+                       get { return (string) this ["contentTypeMapper"]; }
+                       set { this ["contentTypeMapper"] = value; }
+               }
+
+               [ConfigurationProperty ("crossDomainScriptAccessEnabled", DefaultValue = false)]
+               public bool CrossDomainScriptAccessEnabled {
+                       get { return (bool) this ["crossDomainScriptAccessEnabled"]; }
+                       set { this ["crossDomainScriptAccessEnabled"] = value; }
+               }
+
+               [ConfigurationProperty ("hostNameComparisonMode", DefaultValue = HostNameComparisonMode.StrongWildcard)]
+               public HostNameComparisonMode HostNameComparisonMode {
+                       get { return (HostNameComparisonMode) this ["hostNameComparisonMode"]; }
+                       set { this ["hostNameComparisonMode"] = value; }
+               }
+
+               [LongValidator (MinValue = 0, MaxValue = long.MaxValue, ExcludeRange = false)]
+               [ConfigurationProperty ("maxBufferPoolSize", DefaultValue = 0x80000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public long MaxBufferPoolSize {
+                       get { return (long) this ["maxBufferPoolSize"]; }
+                       set { this ["maxBufferPoolSize"] = value; }
+               }
+
+               [IntegerValidator ( MinValue = 1,
+                       MaxValue = int.MaxValue,
+                       ExcludeRange = false)]
+               [ConfigurationProperty ("maxBufferSize", DefaultValue = 0x10000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public int MaxBufferSize {
+                       get { return (int) this ["maxBufferSize"]; }
+                       set { this ["maxBufferSize"] = value; }
+               }
+
+               [LongValidator ( MinValue = 1, MaxValue = long.MaxValue, ExcludeRange = false)]
+               [ConfigurationProperty ("maxReceivedMessageSize", DefaultValue = 0x10000,
+                        Options = ConfigurationPropertyOptions.None)]
+               public long MaxReceivedMessageSize {
+                       get { return (long) this ["maxReceivedMessageSize"]; }
+                       set { this ["maxReceivedMessageSize"] = value; }
+               }
+
+               [ConfigurationProperty ("readerQuotas")]
+               public XmlDictionaryReaderQuotasElement ReaderQuotas {
+                       get { return (XmlDictionaryReaderQuotasElement) this ["readerQuotas"]; }
+               }
+
+               [ConfigurationProperty ("security")]
+               public WebHttpSecurityElement Security {
+                       get { return (WebHttpSecurityElement) this ["security"]; }
+               }
+
+               [ConfigurationProperty ("transferMode", DefaultValue = TransferMode.Buffered)]
+               public TransferMode TransferMode {
+                       get { return (TransferMode) this ["transferMode"]; }
+                       set { this ["transferMode"] = value; }
+               }
+
+               [TypeConverter (typeof (EncodingConverter))]
+               [ConfigurationProperty ("writeEncoding", DefaultValue = "utf-8")]
+               public Encoding WriteEncoding {
+                       get { return (Encoding) this ["writeEncoding"]; }
+                       set { this ["writeEncoding"] = value; }
+               }
+
+               protected internal override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
+
+#endif
index 4c62750cc3148db88aaca1bc9cab186eddb45632..38b804ff4921ddbbd9e6c8f4e0b038a6a0aa8434 100644 (file)
@@ -75,6 +75,14 @@ namespace System.ServiceModel.Description
                        DefaultOutgoingResponseFormat = WebMessageFormat.Xml;
                }
 
+#if NET_4_0
+               public virtual bool AutomaticFormatSelectionEnabled { get; set; }
+
+               public virtual bool FaultExceptionEnabled { get; set; }
+
+               public virtual bool HelpEnabled { get; set; }
+#endif
+
                public virtual WebMessageBodyStyle DefaultBodyStyle { get; set; }
 
                public virtual WebMessageFormat DefaultOutgoingRequestFormat { get; set; }
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebHttpEndpoint.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebHttpEndpoint.cs
new file mode 100644 (file)
index 0000000..97d6ca0
--- /dev/null
@@ -0,0 +1,86 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections.ObjectModel;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Web;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Description
+{
+       [MonoTODO]
+       public class WebHttpEndpoint : WebServiceEndpoint
+       {
+               public WebHttpEndpoint (ContractDescription contract)
+                       : this (contract, null)
+               {
+               }
+
+               public WebHttpEndpoint (ContractDescription contract, EndpointAddress address)
+                       : base (contract, address)
+               {
+               }
+
+               WebHttpBehavior wb {
+                       get {
+                               var b = Behaviors.Find<WebHttpBehavior> ();
+                               if (b != null)
+                                       return b;
+                               throw new InvalidOperationException ("The preset WebHttpBehavior was unexpectedly removed.");
+                       }
+               }
+
+               public bool AutomaticFormatSelectionEnabled {
+                       get { return wb.AutomaticFormatSelectionEnabled; }
+                       set { wb.AutomaticFormatSelectionEnabled = value; }
+               }
+
+               public WebMessageFormat DefaultOutgoingResponseFormat {
+                       get { return wb.DefaultOutgoingResponseFormat; }
+                       set { wb.DefaultOutgoingResponseFormat = value; }
+               }
+
+               public bool FaultExceptionEnabled {
+                       get { return wb.FaultExceptionEnabled; }
+                       set { wb.FaultExceptionEnabled = value; }
+               }
+
+               public bool HelpEnabled {
+                       get { return wb.HelpEnabled; }
+                       set { wb.HelpEnabled = value; }
+               }
+
+               protected override Type WebEndpointType {
+                       get { throw new NotImplementedException (); }
+               }
+       }
+}
+#endif
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebScriptEndpoint.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebScriptEndpoint.cs
new file mode 100644 (file)
index 0000000..4b37bce
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections.ObjectModel;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+
+namespace System.ServiceModel.Description
+{
+       [MonoTODO]
+       public class WebScriptEndpoint : WebServiceEndpoint
+       {
+               public WebScriptEndpoint (ContractDescription contract)
+                       : this (contract, null)
+               {
+               }
+               
+               public WebScriptEndpoint (ContractDescription contract, EndpointAddress address)
+                       : base (contract, address)
+               {
+               }
+
+               protected override Type WebEndpointType {
+                       get { throw new NotImplementedException (); }
+               }
+       }
+}
+#endif
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebServiceEndpoint.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Description/WebServiceEndpoint.cs
new file mode 100644 (file)
index 0000000..9b2a9b6
--- /dev/null
@@ -0,0 +1,107 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections.ObjectModel;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Web;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Description
+{
+       public abstract class WebServiceEndpoint : ServiceEndpoint
+       {
+               internal WebServiceEndpoint (ContractDescription contract, EndpointAddress address)
+                       : base (contract, new WebHttpBinding (), address)
+               {
+                       Behaviors.Add (new WebHttpBehavior ());
+               }
+
+               protected abstract Type WebEndpointType { get; }
+
+               WebHttpBinding wbind {
+                       get {
+                               if (Binding is WebHttpBinding)
+                                       return (WebHttpBinding) Binding;
+                               throw new InvalidOperationException ("Binding on this standard endpoint is not supposed to be overwritten.");
+                       }
+               }
+
+               public WebContentTypeMapper ContentTypeMapper {
+                       get { return wbind.ContentTypeMapper; }
+                       set { wbind.ContentTypeMapper = value; }
+               }
+
+               public bool CrossDomainScriptAccessEnabled {
+                       get { return wbind.CrossDomainScriptAccessEnabled; }
+                       set { wbind.CrossDomainScriptAccessEnabled = value; }
+               }
+
+               public HostNameComparisonMode HostNameComparisonMode {
+                       get { return wbind.HostNameComparisonMode; }
+                       set { wbind.HostNameComparisonMode = value; }
+               }
+
+               public long MaxBufferPoolSize {
+                       get { return wbind.MaxBufferPoolSize; }
+                       set { wbind.MaxBufferPoolSize = value; }
+               }
+
+               public int MaxBufferSize {
+                       get { return wbind.MaxBufferSize; }
+                       set { wbind.MaxBufferSize = value; }
+               }
+
+               public long MaxReceivedMessageSize {
+                       get { return wbind.MaxReceivedMessageSize; }
+                       set { wbind.MaxReceivedMessageSize = value; }
+               }
+
+               public XmlDictionaryReaderQuotas ReaderQuotas {
+                       get { return wbind.ReaderQuotas; }
+                       set { wbind.ReaderQuotas = value; }
+               }
+
+               public WebHttpSecurity Security {
+                       get { return wbind.Security; }
+               }
+
+               public TransferMode TransferMode {
+                       get { return wbind.TransferMode; }
+                       set { wbind.TransferMode = value; }
+               }
+
+               public Encoding WriteEncoding {
+                       get { return wbind.WriteEncoding; }
+                       set { wbind.WriteEncoding = value; }
+               }
+       }
+}
+#endif
index 9194e24d7dec468cc3e6efcdf7f6b80fa9556ddc..e6db41560996538dd7d9295e2ca8f24150a9d730 100644 (file)
@@ -6,6 +6,7 @@ System.ServiceModel.Channels/WebBodyFormatMessagePropertyTest.cs
 System.ServiceModel.Channels/WebMessageEncodingBindingElementTest.cs
 System.ServiceModel.Configuration/WebHttpBindingElementTest.cs
 System.ServiceModel.Description/WebHttpBehaviorTest.cs
+System.ServiceModel.Description/WebHttpEndpointTest.cs
 System.ServiceModel.Description/WebScriptEnablingBehaviorTest.cs
 System.ServiceModel.Dispatcher/JsonQueryStringConverterTest.cs
 System.ServiceModel.Dispatcher/QueryStringConverterTest.cs
index 56e59eaadd25f244d404dfa888fb00483839472f..74035fcf2ab950f46db459900000fc5d2d7c1fcb 100644 (file)
@@ -60,12 +60,11 @@ namespace System.ServiceModel
                        throw new NotImplementedException ();
                }
 
-               XmlDictionaryReaderQuotas quotas;
                WebHttpSecurity security = new WebHttpSecurity ();
-               Encoding write_encoding = Encoding.UTF8;
                HttpTransportBindingElement t;
                // This can be changed only using <synchronousReceive> configuration element.
                bool receive_synchronously;
+               WebMessageEncodingBindingElement msgenc = new WebMessageEncodingBindingElement ();
 
                public EnvelopeVersion EnvelopeVersion {
                        get { return EnvelopeVersion.None; }
@@ -82,6 +81,16 @@ namespace System.ServiceModel
                        set { t.BypassProxyOnLocal = value; }
                }
 
+#if NET_4_0
+               [MonoTODO]
+               public bool CrossDomainScriptAccessEnabled { get; set; }
+
+               public WebContentTypeMapper ContentTypeMapper {
+                       get { return msgenc.ContentTypeMapper; }
+                       set { msgenc.ContentTypeMapper = value; }
+               }
+#endif
+
                public HostNameComparisonMode HostNameComparisonMode {
                        get { return t.HostNameComparisonMode; }
                        set { t.HostNameComparisonMode = value; }
@@ -120,8 +129,8 @@ namespace System.ServiceModel
 
 #if !NET_2_1
                public XmlDictionaryReaderQuotas ReaderQuotas {
-                       get { return quotas; }
-                       set { quotas = value; }
+                       get { return msgenc.ReaderQuotas; }
+                       set { msgenc.ReaderQuotas = value; }
                }
 #endif
 
@@ -134,23 +143,17 @@ namespace System.ServiceModel
                }
 
                public Encoding WriteEncoding {
-                       get { return write_encoding; }
+                       get { return msgenc.WriteEncoding; }
                        set {
                                if (value == null)
                                        throw new ArgumentNullException ("value");
-                               write_encoding = value; 
+                               msgenc.WriteEncoding = value; 
                        }
                }
 
                public override BindingElementCollection CreateBindingElements ()
                {
-                       WebMessageEncodingBindingElement m = new WebMessageEncodingBindingElement (WriteEncoding);
-#if !NET_2_1
-                       if (ReaderQuotas != null)
-                               ReaderQuotas.CopyTo (m.ReaderQuotas);
-#endif
-
-                       return new BindingElementCollection (new BindingElement [] { m, t.Clone () });
+                       return new BindingElementCollection (new BindingElement [] { msgenc, t.Clone () });
                }
 
 #if !NET_2_1
diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Description/WebHttpEndpointTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Description/WebHttpEndpointTest.cs
new file mode 100644 (file)
index 0000000..a3a64b5
--- /dev/null
@@ -0,0 +1,35 @@
+#if NET_4_0
+using System;
+using System.IO;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Web;
+using System.Text;
+using NUnit.Framework;
+
+namespace MonoTests.System.ServiceModel.Description
+{
+       [TestFixture]
+       public class WebHttpEndpointTest
+       {
+               [Test]
+               public void ReplaceBinding1 ()
+               {
+                       var se = new WebHttpEndpoint (ContractDescription.GetContract (typeof (IMetadataExchange)), null);
+                       se.Binding = new NetTcpBinding (); // this does not throw exception yet.
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ReplaceBinding2 ()
+               {
+                       var se = new WebHttpEndpoint (ContractDescription.GetContract (typeof (IMetadataExchange)), null);
+                       se.Binding = new NetTcpBinding ();
+                       se.WriteEncoding = Encoding.UTF8;
+               }
+       }
+}
+#endif
index d28218d4f622a14cb1c573430403868493d7bcee..5e01695dbc46780109286acad36efea77ec2b45b 100644 (file)
                maxReceivedMessageSize="16384"
                proxyAddress="proxy"
                writeEncoding="unicode"
-               transferMode="streamed">
+               transferMode="Streamed">
             <security mode="TransportCredentialOnly">
               <transport 
                clientCredentialType="Basic"
-               proxyCredentialType="NTLM"
+               proxyCredentialType="Ntlm"
                realm="realm" />
             </security>
           </binding>
         </webHttpBinding>
       </bindings>
     </system.serviceModel>
-</configuration>
\ No newline at end of file
+</configuration>
index 04dbe4f9bd70b8f571c93fa6bede68d9d4f9cc90..d9b9abcc1a27c9206afade6b8e2b350bd27f470f 100644 (file)
@@ -13,11 +13,18 @@ System.ServiceModel.Channels/WebMessageEncodingBindingElement.cs
 System.ServiceModel.Configuration/WebHttpBindingCollectionElement.cs
 System.ServiceModel.Configuration/WebHttpBindingElement.cs
 System.ServiceModel.Configuration/WebHttpElement.cs
+System.ServiceModel.Configuration/WebHttpEndpointCollectionElement.cs
+System.ServiceModel.Configuration/WebHttpEndpointElement.cs
 System.ServiceModel.Configuration/WebHttpSecurityElement.cs
 System.ServiceModel.Configuration/WebMessageEncodingElement.cs
 System.ServiceModel.Configuration/WebScriptEnablingElement.cs
+System.ServiceModel.Configuration/WebScriptEndpointCollectionElement.cs
+System.ServiceModel.Configuration/WebScriptEndpointElement.cs
 System.ServiceModel.Description/WebHttpBehavior.cs
+System.ServiceModel.Description/WebHttpEndpoint.cs
 System.ServiceModel.Description/WebScriptEnablingBehavior.cs
+System.ServiceModel.Description/WebScriptEndpoint.cs
+System.ServiceModel.Description/WebServiceEndpoint.cs
 System.ServiceModel.Dispatcher/JsonQueryStringConverter.cs
 System.ServiceModel.Dispatcher/QueryStringConverter.cs
 System.ServiceModel.Dispatcher/WebHttpDispatchOperationSelector.cs
diff --git a/mcs/class/System.ServiceModel.Web/mobile_System.ServiceModel.Web.dll.sources b/mcs/class/System.ServiceModel.Web/mobile_System.ServiceModel.Web.dll.sources
new file mode 100644 (file)
index 0000000..464d623
--- /dev/null
@@ -0,0 +1,39 @@
+Assembly/AssemblyInfo.cs
+System.Runtime.Serialization.Json/DataContractJsonSerializer.cs
+System.Runtime.Serialization.Json/IXmlJsonReaderInitializer.cs
+System.Runtime.Serialization.Json/IXmlJsonWriterInitializer.cs
+System.Runtime.Serialization.Json/JavaScriptObjectDeserializer.cs
+System.Runtime.Serialization.Json/JavaScriptReader.cs
+System.Runtime.Serialization.Json/JsonReader.cs
+System.Runtime.Serialization.Json/JsonReaderWriterFactory.cs
+System.Runtime.Serialization.Json/JsonSerializationReader.cs
+System.Runtime.Serialization.Json/JsonSerializationWriter.cs
+System.Runtime.Serialization.Json/JsonWriter.cs
+System.Runtime.Serialization.Json/TypeMap.cs
+System.ServiceModel.Channels/WebBodyFormatMessageProperty.cs
+System.ServiceModel.Channels/WebContentFormat.cs
+System.ServiceModel.Channels/WebContentTypeMapper.cs
+System.ServiceModel.Channels/WebMessageEncoder.cs
+System.ServiceModel.Channels/WebMessageEncoderFactory.cs
+System.ServiceModel.Channels/WebMessageEncodingBindingElement.cs
+System.ServiceModel.Description/WebHttpBehavior.cs
+System.ServiceModel.Dispatcher/JsonQueryStringConverter.cs
+System.ServiceModel.Dispatcher/QueryStringConverter.cs
+System.ServiceModel.Dispatcher/WebMessageFormatter.cs
+System.ServiceModel.Web/IncomingWebResponseContext.cs
+System.ServiceModel.Web/OutgoingWebRequestContext.cs
+System.ServiceModel.Web/WebAttributeInfo.cs
+System.ServiceModel.Web/WebChannelFactory.cs
+System.ServiceModel.Web/WebGetAttribute.cs
+System.ServiceModel.Web/WebInvokeAttribute.cs
+System.ServiceModel.Web/WebMessageBodyStyle.cs
+System.ServiceModel.Web/WebMessageFormat.cs
+System.ServiceModel.Web/WebOperationContext.cs
+System.ServiceModel/WebHttpBinding.cs
+System.ServiceModel/WebHttpSecurity.cs
+System.ServiceModel/WebHttpSecurityMode.cs
+System/UriTemplate.cs
+System/UriTemplateEquivalenceComparer.cs
+System/UriTemplateMatch.cs
+System/UriTemplateMatchException.cs
+System/UriTemplateTable.cs
diff --git a/mcs/class/System.ServiceModel.Web/monodroid_System.ServiceModel.Web.dll.sources b/mcs/class/System.ServiceModel.Web/monodroid_System.ServiceModel.Web.dll.sources
new file mode 100644 (file)
index 0000000..cbea0fa
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.ServiceModel.Web.dll.sources
index 464d6236d0a690f1934fce62670b8d70e3f5aab0..cbea0fae7b4f311d809f47f2f93e4b12a9b4cc4f 100644 (file)
@@ -1,39 +1 @@
-Assembly/AssemblyInfo.cs
-System.Runtime.Serialization.Json/DataContractJsonSerializer.cs
-System.Runtime.Serialization.Json/IXmlJsonReaderInitializer.cs
-System.Runtime.Serialization.Json/IXmlJsonWriterInitializer.cs
-System.Runtime.Serialization.Json/JavaScriptObjectDeserializer.cs
-System.Runtime.Serialization.Json/JavaScriptReader.cs
-System.Runtime.Serialization.Json/JsonReader.cs
-System.Runtime.Serialization.Json/JsonReaderWriterFactory.cs
-System.Runtime.Serialization.Json/JsonSerializationReader.cs
-System.Runtime.Serialization.Json/JsonSerializationWriter.cs
-System.Runtime.Serialization.Json/JsonWriter.cs
-System.Runtime.Serialization.Json/TypeMap.cs
-System.ServiceModel.Channels/WebBodyFormatMessageProperty.cs
-System.ServiceModel.Channels/WebContentFormat.cs
-System.ServiceModel.Channels/WebContentTypeMapper.cs
-System.ServiceModel.Channels/WebMessageEncoder.cs
-System.ServiceModel.Channels/WebMessageEncoderFactory.cs
-System.ServiceModel.Channels/WebMessageEncodingBindingElement.cs
-System.ServiceModel.Description/WebHttpBehavior.cs
-System.ServiceModel.Dispatcher/JsonQueryStringConverter.cs
-System.ServiceModel.Dispatcher/QueryStringConverter.cs
-System.ServiceModel.Dispatcher/WebMessageFormatter.cs
-System.ServiceModel.Web/IncomingWebResponseContext.cs
-System.ServiceModel.Web/OutgoingWebRequestContext.cs
-System.ServiceModel.Web/WebAttributeInfo.cs
-System.ServiceModel.Web/WebChannelFactory.cs
-System.ServiceModel.Web/WebGetAttribute.cs
-System.ServiceModel.Web/WebInvokeAttribute.cs
-System.ServiceModel.Web/WebMessageBodyStyle.cs
-System.ServiceModel.Web/WebMessageFormat.cs
-System.ServiceModel.Web/WebOperationContext.cs
-System.ServiceModel/WebHttpBinding.cs
-System.ServiceModel/WebHttpSecurity.cs
-System.ServiceModel/WebHttpSecurityMode.cs
-System/UriTemplate.cs
-System/UriTemplateEquivalenceComparer.cs
-System/UriTemplateMatch.cs
-System/UriTemplateMatchException.cs
-System/UriTemplateTable.cs
+#include mobile_System.ServiceModel.Web.dll.sources
index 851422f3c5ff0e4d88c2773735c1865c32ed58e0..7ad208512cc59fef3d7ee4b9d17bc5290ae7b2f1 100644 (file)
@@ -1,6 +1,17 @@
 using System.Reflection;
 using System.Runtime.Serialization;
 
+namespace System.Runtime.CompilerServices
+{
+       // introduced for silverlight sdk compatibility
+       internal class FriendAccessAllowedAttribute : Attribute
+       {
+               public FriendAccessAllowedAttribute ()
+               {
+               }
+       }
+}
+
 namespace System.ServiceModel
 {
        public class EndpointIdentity {}
index 3e4763cf5805f8104984aad44574fb1d6a473f6a..976d6699f1ca1e28ec7abd51da3f19e35ea2a36b 100755 (executable)
@@ -8,7 +8,6 @@ RESOURCE_FILES = \
 
 LIBRARY = System.ServiceModel.dll
 LIB_MCS_FLAGS = \
-               /d:USE_DATA_CONTRACT_IMPORTER \
                /nowarn:414,169,67,3005,436,219,618 \
                /unsafe \
                /r:System.dll \
index ba3a5511f31fb61f7efcd6bc4cf443d6c3525c23..f4f071d8ebb2010941e13c1c4bf96b8e94e95928 100644 (file)
@@ -41,7 +41,7 @@ namespace System.ServiceModel.Channels
        {
                HttpChannelFactory<IRequestChannel> source;
 
-               WebRequest web_request;
+               List<WebRequest> web_requests = new List<WebRequest> ();
 
                // Constructor
 
@@ -76,7 +76,9 @@ namespace System.ServiceModel.Channels
                                        destination = Via ?? RemoteAddress.Uri;
                        }
 
-                       web_request = HttpWebRequest.Create (destination);
+                       var web_request = HttpWebRequest.Create (destination);
+                       web_requests.Add (web_request);
+                       result.WebRequest = web_request;
                        web_request.Method = "POST";
                        web_request.ContentType = Encoder.ContentType;
 
@@ -192,7 +194,7 @@ namespace System.ServiceModel.Channels
                        WebResponse res;
                        Stream resstr;
                        try {
-                               res = web_request.EndGetResponse (result);
+                               res = channelResult.WebRequest.EndGetResponse (result);
                                resstr = res.GetResponseStream ();
                        } catch (WebException we) {
                                res = we.Response;
@@ -259,7 +261,7 @@ namespace System.ServiceModel.Channels
                {
                        ThrowIfDisposedOrNotOpen ();
 
-                       HttpChannelRequestAsyncResult result = new HttpChannelRequestAsyncResult (message, timeout, callback, state);
+                       HttpChannelRequestAsyncResult result = new HttpChannelRequestAsyncResult (message, timeout, this, callback, state);
                        BeginProcessRequest (result);
                        return result;
                }
@@ -279,25 +281,21 @@ namespace System.ServiceModel.Channels
 
                protected override void OnAbort ()
                {
-                       if (web_request != null)
+                       foreach (var web_request in web_requests)
                                web_request.Abort ();
-                       web_request = null;
+                       web_requests.Clear ();
                }
 
                // Close
 
                protected override void OnClose (TimeSpan timeout)
                {
-                       if (web_request != null)
-                               web_request.Abort ();
-                       web_request = null;
+                       OnAbort ();
                }
 
                protected override IAsyncResult OnBeginClose (TimeSpan timeout, AsyncCallback callback, object state)
                {
-                       if (web_request != null)
-                               web_request.Abort ();
-                       web_request = null;
+                       OnAbort ();
                        return base.OnBeginClose (timeout, callback, state);
                }
 
@@ -324,7 +322,7 @@ namespace System.ServiceModel.Channels
                        base.OnEndOpen (result);
                }
 
-               class HttpChannelRequestAsyncResult : IAsyncResult
+               class HttpChannelRequestAsyncResult : IAsyncResult, IDisposable
                {
                        public Message Message {
                                get; private set;
@@ -339,11 +337,13 @@ namespace System.ServiceModel.Channels
                        Exception error;
                        object locker = new object ();
                        bool is_completed;
+                       HttpRequestChannel owner;
 
-                       public HttpChannelRequestAsyncResult (Message message, TimeSpan timeout, AsyncCallback callback, object state)
+                       public HttpChannelRequestAsyncResult (Message message, TimeSpan timeout, HttpRequestChannel owner, AsyncCallback callback, object state)
                        {
                                Message = message;
                                Timeout = timeout;
+                               this.owner = owner;
                                this.callback = callback;
                                AsyncState = state;
                        }
@@ -352,6 +352,8 @@ namespace System.ServiceModel.Channels
                                get; set;
                        }
 
+                       public WebRequest WebRequest { get; set; }
+
                        public WaitHandle AsyncWaitHandle {
                                get {
                                        lock (locker) {
@@ -395,6 +397,7 @@ namespace System.ServiceModel.Channels
                                        lock (locker) {
                                                if (is_completed && wait != null)
                                                        wait.Set ();
+                                               Cleanup ();
                                        }
                                }
                        }
@@ -417,6 +420,16 @@ namespace System.ServiceModel.Channels
                                if (error != null)
                                        throw error;
                        }
+                       
+                       public void Dispose ()
+                       {
+                               Cleanup ();
+                       }
+                       
+                       void Cleanup ()
+                       {
+                               owner.web_requests.Remove (WebRequest);
+                       }
                }
        }
 }
index 145a98168e739dcb77020458201c42013f9999a7..3ca509187b74517459651adcefc412f76ce12c44 100644 (file)
@@ -68,6 +68,10 @@ namespace System.ServiceModel.Configuration
                static ConfigurationProperty headers;
                static ConfigurationProperty identity;
                static ConfigurationProperty name;
+#if NET_4_0
+               static ConfigurationProperty endpoint_configuration;
+               static ConfigurationProperty kind;
+#endif
 
                static ChannelEndpointElement ()
                {
@@ -104,6 +108,11 @@ namespace System.ServiceModel.Configuration
                                typeof (string), "", new StringConverter (), null,
                                ConfigurationPropertyOptions.IsKey);
 
+#if NET_4_0
+                       endpoint_configuration = new ConfigurationProperty ("endpointConfiguration", typeof (string), "", null, new StringValidator (0), ConfigurationPropertyOptions.IsKey);
+                       kind = new ConfigurationProperty ("kind", typeof (string), "", null, new StringValidator (0), ConfigurationPropertyOptions.IsKey);
+#endif
+
                        properties.Add (address);
                        properties.Add (behavior_configuration);
                        properties.Add (binding);
@@ -112,6 +121,11 @@ namespace System.ServiceModel.Configuration
                        properties.Add (headers);
                        properties.Add (identity);
                        properties.Add (name);
+
+#if NET_4_0
+                       properties.Add (endpoint_configuration);
+                       properties.Add (kind);
+#endif
                }
 
                public ChannelEndpointElement ()
@@ -197,6 +211,22 @@ namespace System.ServiceModel.Configuration
                        set { base [name] = value; }
                }
 
+#if NET_4_0
+               [StringValidator (MinLength = 0)]
+               [ConfigurationProperty ("endpointConfiguration", DefaultValue = "", Options = ConfigurationPropertyOptions.IsKey)]
+               public string EndpointConfiguration {
+                       get { return (string) base [endpoint_configuration]; }
+                       set { base [endpoint_configuration] = value; }
+               }
+
+               [ConfigurationProperty ("kind", DefaultValue = "", Options = ConfigurationPropertyOptions.IsKey)]
+               [StringValidator (MinLength = 0)]
+               public string Kind {
+                       get { return (string) base [kind]; }
+                       set { base [kind] = value; }
+               }
+#endif
+
                protected override ConfigurationPropertyCollection Properties {
                        get { return properties; }
                }
index 1786a93db541642509c4dadc1be9256272fe8688..bb24e605e05ae6ce84be245cd137d0c6be0a2fb9 100644 (file)
@@ -69,6 +69,20 @@ namespace System.ServiceModel.Configuration
                        get { return (ExtensionsSection) GetSection ("system.serviceModel/extensions"); }
                }
 
+#if NET_4_0
+               public static ProtocolMappingSection ProtocolMappingSection {
+                       get {
+                               return (ProtocolMappingSection) GetSection ("system.serviceModel/protocolMapping");
+                       }
+               }
+
+               public static StandardEndpointsSection StandardEndpointsSection {
+                       get {
+                               return (StandardEndpointsSection) GetSection ("system.serviceModel/standardEndpoints");
+                       }
+               }
+#endif
+
                public static Binding CreateBinding (string binding, string bindingConfiguration)
                {
                        BindingCollectionElement section = ConfigUtil.BindingsSection [binding];
@@ -84,6 +98,32 @@ namespace System.ServiceModel.Configuration
                        return b;
                }
 
+#if NET_4_0
+               public static ServiceEndpoint ConfigureStandardEndpoint (ContractDescription cd, ServiceEndpointElement element)
+               {
+                       string kind = element.Kind;
+                       string endpointConfiguration = element.EndpointConfiguration;
+
+                       EndpointCollectionElement section = ConfigUtil.StandardEndpointsSection [kind];
+                       if (section == null)
+                               throw new ArgumentException (String.Format ("standard endpoint section for '{0}' was not found.", kind));
+
+                       StandardEndpointElement e = section.GetDefaultStandardEndpointElement ();
+
+                       ServiceEndpoint inst = e.CreateServiceEndpoint (cd);
+
+                       foreach (StandardEndpointElement el in section.ConfiguredEndpoints) {
+                               if (el.Name == endpointConfiguration) {
+                                       el.InitializeAndValidate (element);
+                                       el.ApplyConfiguration (inst, element);
+                                       break;
+                               }
+                       }
+                       
+                       return inst;
+               }
+#endif
+
                public static KeyedByTypeCollection<IEndpointBehavior>  CreateEndpointBehaviors (string bindingConfiguration)
                {
                        var ec = BehaviorsSection.EndpointBehaviors [bindingConfiguration];
index 3bf01325480eb56dcfb6ed6353f7e0f9efb60eff..cea55b877cb33b7793f5fb174bd4cb7a688cca32 100644 (file)
@@ -62,7 +62,12 @@ namespace System.ServiceModel.Configuration
                public abstract ReadOnlyCollection<StandardEndpointElement> ConfiguredEndpoints { get; }
 
                public string EndpointName {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               foreach (ExtensionElement el in ConfigUtil.StandardEndpointsSection.Properties)
+                                       if (EndpointType.FullName == el.Type)
+                                               return el.Name;
+                               throw new InvalidOperationException (String.Format ("This EndpointCollectionElement '{0}' is not found in the configuration", GetType ()));
+                       }
                }
 
                public abstract Type EndpointType { get; }
index 4e888ef038c95261d014063724c195057460d6f9..0fd02c3395726d018ff63bd1eb702d72fc244d8a 100644 (file)
@@ -79,6 +79,14 @@ namespace System.ServiceModel.Configuration
                        get { return (ExtensionElementCollection) base ["bindingExtensions"]; }
                }
 
+#if NET_4_0
+               [ConfigurationProperty ("endpointExtensions",
+                        Options = ConfigurationPropertyOptions.None)]
+               public ExtensionElementCollection EndpointExtensions {
+                       get { return (ExtensionElementCollection) base ["endpointExtensions"]; }
+               }
+#endif
+
                protected override ConfigurationPropertyCollection Properties {
                        get {
                                if (_properties == null) {
@@ -86,6 +94,9 @@ namespace System.ServiceModel.Configuration
                                        _properties.Add (new ConfigurationProperty ("behaviorExtensions", typeof (ExtensionElementCollection), null, null, null, ConfigurationPropertyOptions.None));
                                        _properties.Add (new ConfigurationProperty ("bindingElementExtensions", typeof (ExtensionElementCollection), null, null, null, ConfigurationPropertyOptions.None));
                                        _properties.Add (new ConfigurationProperty ("bindingExtensions", typeof (ExtensionElementCollection), null, null, null, ConfigurationPropertyOptions.None));
+#if NET_4_0
+                                       _properties.Add (new ConfigurationProperty ("endpointExtensions", typeof (ExtensionElementCollection), null, null, null, ConfigurationPropertyOptions.None));
+#endif
                                }
                                return _properties;
                        }
@@ -95,6 +106,9 @@ namespace System.ServiceModel.Configuration
                        InitializeBehaviorExtensionsDefault ();
                        InitializeBindingElementExtensionsDefault ();
                        InitializeBindingExtensionsDefault ();
+#if NET_4_0
+                       InitializeEndpointExtensionsDefault ();
+#endif
                }
 
                void InitializeBindingExtensionsDefault () {
@@ -157,6 +171,11 @@ namespace System.ServiceModel.Configuration
                        BehaviorExtensions.Add (new ExtensionElement ("transactedBatching", typeof (TransactedBatchingElement).AssemblyQualifiedName));
                }
 
+#if NET_4_0
+               void InitializeEndpointExtensionsDefault () {
+                       EndpointExtensions.Add (new ExtensionElement ("mexEndpoint", typeof (ServiceMetadataEndpointCollectionElement).AssemblyQualifiedName));
+               }
+#endif
        }
 
 }
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElement.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElement.cs
new file mode 100644 (file)
index 0000000..fb829f4
--- /dev/null
@@ -0,0 +1,108 @@
+//
+// ProtocolMappingElement.cs
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Net;
+using System.Net.Security;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Principal;
+using System.IdentityModel.Claims;
+using System.IdentityModel.Policy;
+using System.IdentityModel.Tokens;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public sealed class ProtocolMappingElement : ConfigurationElement
+       {
+               static ConfigurationPropertyCollection properties;
+               static ConfigurationProperty binding, binding_configuration, scheme;
+
+               static ProtocolMappingElement ()
+               {
+                       properties = new ConfigurationPropertyCollection ();
+                       binding = new ConfigurationProperty ("binding", typeof (string), null, null, new StringValidator (0), ConfigurationPropertyOptions.IsRequired);
+                       binding_configuration = new ConfigurationProperty ("bindingConfiguration", typeof (string), null, null, new StringValidator (0), ConfigurationPropertyOptions.None);
+                       scheme = new ConfigurationProperty ("scheme", typeof (string), null, null, new StringValidator (0), ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey);
+
+                       foreach (var item in new ConfigurationProperty [] {binding, binding_configuration, scheme})
+                               properties.Add (item);
+               }
+               
+               public ProtocolMappingElement ()
+               {
+               }
+               
+               public ProtocolMappingElement (string schemeType, string binding, string bindingConfiguration)
+               {
+                       Binding = binding;
+                       BindingConfiguration = bindingConfiguration;
+                       Scheme = schemeType;
+               }
+
+               [ConfigurationProperty ("binding", Options = ConfigurationPropertyOptions.IsRequired)]
+               [StringValidator (MinLength = 0)]
+               public string Binding {
+                       get { return (string) base [binding]; }
+                       set { base [binding] = value; }
+               }
+
+               [StringValidator (MinLength = 0)]
+               [ConfigurationProperty ("bindingConfiguration", Options = ConfigurationPropertyOptions.None)]
+               public string BindingConfiguration {
+                       get { return (string) base [binding_configuration]; }
+                       set { base [binding_configuration] = value; }
+               }
+
+               [StringValidator (MinLength = 0)]
+               [ConfigurationProperty ("scheme", Options = ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey)]
+               public string Scheme {
+                       get { return (string) base [scheme]; }
+                       set { base [scheme] = value; }
+               }
+       }
+}
+
+#endif
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElementCollection.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingElementCollection.cs
new file mode 100644 (file)
index 0000000..d4843c4
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// ProtocolMappingElementCollection.cs
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Net;
+using System.Net.Security;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Principal;
+using System.IdentityModel.Claims;
+using System.IdentityModel.Policy;
+using System.IdentityModel.Tokens;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       [ConfigurationCollection (typeof (ProtocolMappingElement), AddItemName = "add")]
+       public sealed class ProtocolMappingElementCollection : ServiceModelEnhancedConfigurationElementCollection<ProtocolMappingElement>
+       {
+               public ProtocolMappingElementCollection ()
+               {
+                       AddElementName = "add";
+               }
+               
+               protected override object GetElementKey (ConfigurationElement element)
+               {
+                       return ((ProtocolMappingElement) element).Scheme;
+               }
+       }
+}
+#endif
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingSection.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ProtocolMappingSection.cs
new file mode 100644 (file)
index 0000000..66a8082
--- /dev/null
@@ -0,0 +1,93 @@
+//
+// ProtocolMappingSection.cs
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Net;
+using System.Net.Security;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Principal;
+using System.IdentityModel.Claims;
+using System.IdentityModel.Policy;
+using System.IdentityModel.Tokens;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public sealed class ProtocolMappingSection : ConfigurationSection
+       {
+               static ConfigurationPropertyCollection properties;
+               static ConfigurationProperty collection;
+
+               static ProtocolMappingSection ()
+               {
+                       collection = new ConfigurationProperty ("", typeof (ProtocolMappingElementCollection), null, null, null, ConfigurationPropertyOptions.IsDefaultCollection);
+                       properties = new ConfigurationPropertyCollection ();
+                       properties.Add (collection);
+               }
+
+               // Properties
+
+               [ConfigurationProperty ("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
+               public ProtocolMappingElementCollection ProtocolMappingCollection {
+                       get { return (ProtocolMappingElementCollection) base [collection]; }
+               }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get { return properties; }
+               }
+
+               protected override void InitializeDefault ()
+               {
+                       base.InitializeDefault ();
+                       // LAMESPEC: no https?
+                       ProtocolMappingCollection.Add (new ProtocolMappingElement ("http", "basicHttpBinding", null));
+                       ProtocolMappingCollection.Add (new ProtocolMappingElement ("net.tcp", "netTcpBinding", null));
+                       ProtocolMappingCollection.Add (new ProtocolMappingElement ("net.msmq", "netMsmqBinding", null));
+                       ProtocolMappingCollection.Add (new ProtocolMappingElement ("net.pipe", "netNamedPipeBinding", null));
+               }
+       }
+
+}
+#endif
index 8ae3569aa2f08cc6a4941df0166c2af8df3e5009..b44abe84190f00b6494e27aa7433fec0a882e18e 100644 (file)
@@ -71,6 +71,11 @@ namespace System.ServiceModel.Configuration
                static ConfigurationProperty listen_uri;
                static ConfigurationProperty listen_uri_mode;
                static ConfigurationProperty name;
+#if NET_4_0
+               static ConfigurationProperty endpoint_configuration;
+               static ConfigurationProperty is_system_endpoint;
+               static ConfigurationProperty kind;
+#endif
 
                static ServiceEndpointElement ()
                {
@@ -123,6 +128,12 @@ namespace System.ServiceModel.Configuration
                                typeof (string), "", new StringConverter (), new StringValidator (0, int.MaxValue, null),
                                ConfigurationPropertyOptions.None);
 
+#if NET_4_0
+                       endpoint_configuration = new ConfigurationProperty ("endpointConfiguration", typeof (string), "", null, new StringValidator (0), ConfigurationPropertyOptions.IsKey);
+                       is_system_endpoint = new ConfigurationProperty ("isSystemEndpoint", typeof (bool), false, null, null, ConfigurationPropertyOptions.None);
+                       kind = new ConfigurationProperty ("kind", typeof (string), "", null, new StringValidator (0), ConfigurationPropertyOptions.IsKey);
+#endif
+
                        properties.Add (address);
                        properties.Add (behavior_configuration);
                        properties.Add (binding);
@@ -135,6 +146,12 @@ namespace System.ServiceModel.Configuration
                        properties.Add (listen_uri);
                        properties.Add (listen_uri_mode);
                        properties.Add (name);
+
+#if NET_4_0
+                       properties.Add (endpoint_configuration);
+                       properties.Add (is_system_endpoint);
+                       properties.Add (kind);
+#endif
                }
 
                public ServiceEndpointElement ()
@@ -236,6 +253,28 @@ namespace System.ServiceModel.Configuration
                        get { return (IdentityElement) base [identity]; }
                }
 
+#if NET_4_0
+               [StringValidator (MinLength = 0)]
+               [ConfigurationProperty ("endpointConfiguration", DefaultValue = "", Options = ConfigurationPropertyOptions.IsKey)]
+               public string EndpointConfiguration {
+                       get { return (string) base [endpoint_configuration]; }
+                       set { base [endpoint_configuration] = value; }
+               }
+
+               [ConfigurationProperty ("isSystemEndpoint", DefaultValue = false)]
+               public bool IsSystemEndpoint {
+                       get { return (bool) base [is_system_endpoint]; }
+                       set { base [is_system_endpoint] = value; }
+               }
+
+               [ConfigurationProperty ("kind", DefaultValue = "", Options = ConfigurationPropertyOptions.IsKey)]
+               [StringValidator (MinLength = 0)]
+               public string Kind {
+                       get { return (string) base [kind]; }
+                       set { base [kind] = value; }
+               }
+#endif
+
                [ConfigurationProperty ("listenUri",
                         Options = ConfigurationPropertyOptions.None,
                         DefaultValue = null)]
index b5f5327c5ecb9c7209c4790d1883b76f63c5e639..3d8a380b37a8f76ba3b589a6bea6ef14aa55d610 100644 (file)
@@ -71,14 +71,22 @@ namespace System.ServiceModel.Configuration
                protected override object GetElementKey (ConfigurationElement element) {
                        ServiceEndpointElement el = (ServiceEndpointElement) element;
 
-                       return el.Address + ";" +
-                               el.Binding.GetHashCode () + ";" +
-                               el.BindingConfiguration.GetHashCode () + ";" +
-                               el.BindingName.GetHashCode () + ";" +
-                               el.BindingNamespace.GetHashCode () + ";" +
-                               el.Contract.GetHashCode ();
+                       return GetHashCode (el.Address) +
+                               GetHashCode (el.Binding) +
+                               GetHashCode (el.BindingConfiguration) +
+                               GetHashCode (el.BindingName) +
+                               GetHashCode (el.BindingNamespace) +
+#if NET_4_0
+                               GetHashCode (el.EndpointConfiguration) +
+                               GetHashCode (el.Kind) +
+#endif
+                               GetHashCode (el.Contract);
                }
 
+               static string GetHashCode (object obj)
+               {
+                       return (obj != null ? obj.GetHashCode () : 0) + ";";
+               }
        }
 
 }
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointCollectionElement.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointCollectionElement.cs
new file mode 100644 (file)
index 0000000..90ee434
--- /dev/null
@@ -0,0 +1,40 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.ComponentModel;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Configuration
+{
+       public class ServiceMetadataEndpointCollectionElement : StandardEndpointCollectionElement<ServiceMetadataEndpoint, ServiceMetadataEndpointElement>
+       {
+       }
+
+}
+
+#endif
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointElement.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ServiceMetadataEndpointElement.cs
new file mode 100644 (file)
index 0000000..1e1be8d
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Net;
+using System.Net.Security;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Principal;
+using System.IdentityModel.Claims;
+using System.IdentityModel.Policy;
+using System.IdentityModel.Tokens;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public class ServiceMetadataEndpointElement : StandardEndpointElement
+       {
+               static ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection ();
+
+               static ServiceMetadataEndpointElement ()
+               {
+                       foreach (var item in new ConfigurationProperty [] {})
+                               properties.Add (item);
+               }
+
+               protected internal override Type EndpointType {
+                       get { return typeof (ServiceMetadataEndpoint); }
+               }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get { return properties; }
+               }
+
+               protected internal override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
+               {
+                       return new ServiceMetadataEndpoint ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ChannelEndpointElement channelEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               protected override void OnInitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
+
+#endif
index b9c5433e09c27b82ba9f107f609c806f3ccf8fff..87dfb0a6a14057c259ba4cae04e922cd699c26af 100644 (file)
@@ -78,5 +78,15 @@ namespace System.ServiceModel.Configuration
                public ServicesSection Services {
                        get { return (ServicesSection) Sections ["services"]; }
                }
+
+#if NET_4_0
+               public ProtocolMappingSection ProtocolMapping {
+                       get { return (ProtocolMappingSection) Sections ["protocolMapping"]; }
+               }
+
+               public StandardEndpointsSection StandardEndpoints {
+                       get { return (StandardEndpointsSection) Sections ["standardEndpoints"]; }
+               }
+#endif
        }
 }
index 52477445f2545a8edf9ee6a32684647962547b9d..71b983a58b086ce9e56f06ee9df22683a57d43d9 100644 (file)
@@ -62,7 +62,7 @@ namespace System.ServiceModel.Configuration
                where TEndpointConfiguration : StandardEndpointElement, new()
        {
                static ConfigurationPropertyCollection properties;
-               static ConfigurationProperty endpoints = new ConfigurationProperty ("endpoints",
+               static ConfigurationProperty endpoints = new ConfigurationProperty ("",
                                typeof (StandardEndpointElementCollection<TEndpointConfiguration>), null, null, null,
                                ConfigurationPropertyOptions.IsDefaultCollection);
 
@@ -74,11 +74,18 @@ namespace System.ServiceModel.Configuration
                void FillProperties (ConfigurationPropertyCollection baseProps)
                {
                        properties = new ConfigurationPropertyCollection ();
+                       foreach (ConfigurationProperty prop in baseProps)
+                               properties.Add (prop);
                        properties.Add (endpoints);
                }
                
                public override ReadOnlyCollection<StandardEndpointElement> ConfiguredEndpoints {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               var l = new List<StandardEndpointElement> ();
+                               foreach (StandardEndpointElement e in Endpoints)
+                                       l.Add (e);
+                               return new ReadOnlyCollection<StandardEndpointElement> (l);
+                       }
                }
 
                [ConfigurationPropertyAttribute("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
@@ -102,12 +109,15 @@ namespace System.ServiceModel.Configuration
 
                public override bool ContainsKey (string name)
                {
-                       throw new NotImplementedException ();
+                       foreach (StandardEndpointElement e in Endpoints)
+                               if (e.Name == name)
+                                       return true;
+                       return false;
                }
                
                protected internal override StandardEndpointElement GetDefaultStandardEndpointElement ()
                {
-                       throw new NotImplementedException ();
+                       return (StandardEndpointElement) Activator.CreateInstance (typeof (TEndpointConfiguration));
                }
                
                protected internal override bool TryAdd (string name, ServiceEndpoint endpoint, ConfigurationType config)
index c10610fd33c45b6c51bb34b9fe383d651b57e6ff..00eca499191f4681058b8b43c4b0a67cd012996d 100644 (file)
@@ -81,11 +81,36 @@ namespace System.ServiceModel.Configuration
                        get { return properties; }
                }
 
+               public void ApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
+               {
+                       OnApplyConfiguration (endpoint, channelEndpointElement);
+               }
+
+               public void ApplyConfiguration (ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
+               {
+                       OnApplyConfiguration (endpoint, serviceEndpointElement);
+               }
+
                protected internal abstract ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription);
 
+               public void InitializeAndValidate (ChannelEndpointElement channelEndpointElement)
+               {
+                       OnInitializeAndValidate (channelEndpointElement);
+               }
+
+               public void InitializeAndValidate (ServiceEndpointElement serviceEndpointElement)
+               {
+                       OnInitializeAndValidate (serviceEndpointElement);
+               }
+
                protected internal virtual void InitializeFrom (ServiceEndpoint endpoint)
                {
-                       throw new NotImplementedException ();
+                       if (endpoint == null)
+                               throw new ArgumentNullException ("endpoint");
+                       if (!EndpointType.IsAssignableFrom (endpoint.GetType ()))
+                               throw new ArgumentNullException (String.Format ("Argument endpoint type is not of expected type '{0}'", EndpointType));
+
+                       // not sure if that's all, but that's what is documented.
                }
 
                protected abstract void OnApplyConfiguration (ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement);
index b5c0527d1d6306f44c0acfe38ce201ed7c857964..83b46e2aaf8b2cd33e592e3d0856f3adb3c46b90 100644 (file)
@@ -55,9 +55,19 @@ using System.Xml;
 
 namespace System.ServiceModel.Configuration
 {
+       // LAMESPEC: there should be ConfigurationPropertyAttribute whose AddElementName is "standardEndpoint" (see ServiceBehaviorElementCollection for reference).
        public sealed class StandardEndpointElementCollection<TEndpointConfiguration> : ServiceModelEnhancedConfigurationElementCollection<TEndpointConfiguration>
                where TEndpointConfiguration : StandardEndpointElement, new()
        {
+               public StandardEndpointElementCollection ()
+               {
+                       AddElementName = "standardEndpoint";
+               }
+
+               protected override bool ThrowOnDuplicate {
+                       get { return false; }
+               }
+
                protected override object GetElementKey (ConfigurationElement element)
                {
                        return ((StandardEndpointElement) element).Name;
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointsSection.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardEndpointsSection.cs
new file mode 100644 (file)
index 0000000..69fed1b
--- /dev/null
@@ -0,0 +1,120 @@
+//
+// BindingsSection.cs
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2006 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 NET_4_0
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Configuration;
+using System.Net;
+using System.Net.Security;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Principal;
+using System.IdentityModel.Claims;
+using System.IdentityModel.Policy;
+using System.IdentityModel.Tokens;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Diagnostics;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.MsmqIntegration;
+using System.ServiceModel.PeerResolvers;
+using System.ServiceModel.Security;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Configuration
+{
+       public sealed class StandardEndpointsSection : ConfigurationSection
+       {
+               ConfigurationPropertyCollection _properties;
+
+               // Properties
+
+               List<EndpointCollectionElement> endpoint_collections;
+
+               public List<EndpointCollectionElement> EndpointCollections {
+                       get {
+                               if (endpoint_collections != null)
+                                       return endpoint_collections;
+                               var list = new List<EndpointCollectionElement> ();
+                               foreach (ConfigurationProperty cp in Properties)
+                                       list.Add ((EndpointCollectionElement) this [cp]);
+                               endpoint_collections = list;
+                               return list;
+                       }
+               }
+
+
+               [ConfigurationProperty ("mexEndpoint", Options = ConfigurationPropertyOptions.None)]
+               public ServiceMetadataEndpointCollectionElement MexEndpoint {
+                       get { return (ServiceMetadataEndpointCollectionElement) this ["mexEndpoint"]; }
+               }
+
+               protected override ConfigurationPropertyCollection Properties {
+                       get {
+                               if (_properties == null) {
+                                       _properties = new ConfigurationPropertyCollection ();
+                                       ExtensionElementCollection extensions = ((ExtensionsSection) EvaluationContext.GetSection ("system.serviceModel/extensions")).EndpointExtensions;
+                                       for (int i = 0; i < extensions.Count; i++) {
+                                               ExtensionElement extension = extensions [i];
+                                               _properties.Add (new ConfigurationProperty (extension.Name, Type.GetType (extension.Type), null, null, null, ConfigurationPropertyOptions.None));
+                                       }
+                               }
+                               return _properties;
+                       }
+               }
+
+               public static StandardEndpointsSection GetSection (System.Configuration.Configuration config) {
+                       ServiceModelSectionGroup sm = ServiceModelSectionGroup.GetSectionGroup (config);
+                       if (sm == null)
+                               throw new SystemException ("Could not retrieve configuration section group 'system.serviceModel'");
+                       if (sm.StandardEndpoints == null)
+                               throw new SystemException ("Could not retrieve configuration sub section group 'standardEndpoints' in 'system.serviceModel'");
+                       return sm.StandardEndpoints;
+               }
+
+               public new EndpointCollectionElement this [string name] {
+                       get {
+                               object element = base [name];
+                               if (element is EndpointCollectionElement)
+                                       return (EndpointCollectionElement) element;
+                               throw new ArgumentException (String.Format ("Could not find {0}", name));
+                       }
+               }
+
+       }
+
+}
+
+#endif
index ea2249c4b92e567dd239c2e91b17318182643bf2..32b0d23119db4445840e6db5975334ab0905f36d 100644 (file)
@@ -72,7 +72,6 @@ namespace System.ServiceModel.Description
                        if (this.importer != null || this.context != null)
                                throw new SystemException ("INTERNAL ERROR: unexpected recursion of ImportContract method call");
 
-#if USE_DATA_CONTRACT_IMPORTER
                        dc_importer = new XsdDataContractImporter ();
                        schema_set_in_use = new XmlSchemaSet ();
                        schema_set_in_use.Add (importer.XmlSchemas);
@@ -80,7 +79,6 @@ namespace System.ServiceModel.Description
                                foreach (XmlSchema xs in wsdl.Types.Schemas)
                                        schema_set_in_use.Add (xs);
                        dc_importer.Import (schema_set_in_use);
-#endif
 
                        this.importer = importer;
                        this.context = context;
@@ -97,39 +95,7 @@ namespace System.ServiceModel.Description
 
                XsdDataContractImporter dc_importer;
 
-#if USE_DATA_CONTRACT_IMPORTER
                XmlSchemaSet schema_set_in_use;
-#else
-               XmlSchemaImporter schema_importer_;
-               XmlSchemaImporter schema_importer {
-                       get {
-                               if (schema_importer_ != null)
-                                       return schema_importer_;
-                               schema_importer_ = new XmlSchemaImporter (xml_schemas);
-                               return schema_importer_;
-                       }
-               }
-
-               XmlSchemas xml_schemas_;
-               XmlSchemas xml_schemas {
-                       get {
-                               if (xml_schemas_ != null)
-                                       return xml_schemas_;
-                               xml_schemas_ = new XmlSchemas ();
-
-                               foreach (WSDL wsdl in importer.WsdlDocuments)
-                                       foreach (XmlSchema schema in wsdl.Types.Schemas)
-                                               xml_schemas_.Add (schema);
-
-                               foreach (XmlSchema schema in importer.XmlSchemas.Schemas ())
-                                       xml_schemas_.Add (schema);
-
-                               xml_schemas_.Compile (null, true);
-
-                               return xml_schemas_;
-                       }
-               }
-#endif
 
                void DoImportContract ()
                {
@@ -197,7 +163,6 @@ namespace System.ServiceModel.Description
                        }
                }
                
-#if USE_DATA_CONTRACT_IMPORTER
                void resolveElement (QName qname, List<MessagePartDescription> parts, string ns)
                {
                        XmlSchemaElement element = (XmlSchemaElement) schema_set_in_use.GlobalElements [qname];
@@ -207,16 +172,6 @@ namespace System.ServiceModel.Description
 
                        resolveParticle (element, parts, ns, 2);
                }
-#else
-               void resolveElement (QName qname, List<MessagePartDescription> parts, string ns)
-               {
-                       XmlSchemaElement element = (XmlSchemaElement) xml_schemas.Find (qname, typeof (XmlSchemaElement));
-                       if (element == null)
-                               //FIXME: What to do here?
-                               throw new Exception ("Could not resolve : " + qname.ToString ());
-                       resolveParticle (element, parts, ns, 2);
-               }
-#endif
 
                void resolveType (QName qname, List<MessagePartDescription> parts, string ns)
                {
@@ -318,22 +273,10 @@ namespace System.ServiceModel.Description
                        XmlSchemaComplexType ct = elem.ElementSchemaType as XmlSchemaComplexType;
                        if (ct == null) {
                                //Not a complex type
-                               XmlSchemaSimpleType simple = elem.ElementSchemaType as XmlSchemaSimpleType;
-#if USE_DATA_CONTRACT_IMPORTER
                                msg_part = new MessagePartDescription (elem.QualifiedName.Name, elem.QualifiedName.Namespace);
                                msg_part.Importer = dc_importer;
                                msg_part.CodeTypeReference = dc_importer.GetCodeTypeReference (dc_importer.Import (schema_set_in_use, elem));
                                parts.Add (msg_part);
-#else
-                               msg_part = new MessagePartDescription (
-                                               elem.Name, ns);
-                               if (elem.SchemaType != null)
-                                       msg_part.XmlTypeMapping = schema_importer.ImportTypeMapping (elem.QualifiedName);
-                               else
-                                       msg_part.XmlTypeMapping = schema_importer.ImportSchemaType (elem.SchemaTypeName);
-                               msg_part.TypeName = new QName (GetCLRTypeName (elem.SchemaTypeName), "");
-                               parts.Add (msg_part);
-#endif
 
                                return;
                        }
@@ -344,21 +287,10 @@ namespace System.ServiceModel.Description
                        }
 
                        //depth <= 0
-#if USE_DATA_CONTRACT_IMPORTER
                        msg_part = new MessagePartDescription (elem.QualifiedName.Name, elem.QualifiedName.Namespace);
                        msg_part.Importer = dc_importer;
                        msg_part.CodeTypeReference = dc_importer.GetCodeTypeReference (dc_importer.Import (schema_set_in_use, elem));
                        parts.Add (msg_part);
-#else
-                       msg_part = new MessagePartDescription (elem.Name, ns);
-                       if (elem.SchemaType != null)
-                               msg_part.XmlTypeMapping = schema_importer.ImportTypeMapping (elem.QualifiedName);
-                       else
-                               msg_part.XmlTypeMapping = schema_importer.ImportSchemaType (elem.SchemaTypeName);
-                       msg_part.TypeName = elem.SchemaTypeName;
-
-                       parts.Add (msg_part);
-#endif
                }
 
                void IWsdlImportExtension.ImportEndpoint (WsdlImporter importer,
index 6c7ccc0af5010983b1a5bf2465369628ddf5d94d..fcfdba3afe4a525e468a4af44acc3d020cc0b732 100644 (file)
@@ -95,20 +95,8 @@ namespace System.ServiceModel.Description
                }
 
 #if !NET_2_1
-#if USE_DATA_CONTRACT_IMPORTER
                internal XsdDataContractImporter Importer { get; set; }
                internal System.CodeDom.CodeTypeReference CodeTypeReference { get; set; }
-#else
-               internal XmlQualifiedName TypeName {
-                       get { return xml_schema_type_name; }
-                       set { xml_schema_type_name = value; }
-               }
-
-               internal XmlTypeMapping XmlTypeMapping {
-                       get { return xml_type_mapping; }
-                       set { xml_type_mapping = value; }
-               }
-#endif
 #endif
 
                #region internals required for moonlight compatibility
index 907c22957d33a66b0f5583a56d19fd50caa3ca04..3168534dbeb28bfce37fbe4c94d164af5dfde60c 100644 (file)
@@ -62,9 +62,7 @@ namespace System.ServiceModel.Description
                ServiceContractGenerationContext contract_context;
                List<OPair> operation_contexts = new List<OPair> ();
 
-#if USE_DATA_CONTRACT_IMPORTER
                XsdDataContractImporter xsd_data_importer;
-#endif
 
                public ServiceContractGenerator ()
                        : this (null, null)
@@ -154,10 +152,8 @@ namespace System.ServiceModel.Description
                        if ((Options & ServiceContractGenerationOptions.ClientClass) != 0)
                                GenerateProxyClass (contractDescription, cns);
 
-#if USE_DATA_CONTRACT_IMPORTER
                        if (xsd_data_importer != null)
                                MergeCompileUnit (xsd_data_importer.CodeCompileUnit, ccu);
-#endif
 
                        // Process extensions. Class first, then methods.
                        // (built-in ones must present before processing class extensions).
@@ -389,7 +385,7 @@ namespace System.ServiceModel.Description
                        // [OperationContract (Action = "...", ReplyAction = "..")]
                        var ad = new CodeAttributeDeclaration (new CodeTypeReference (typeof (OperationContractAttribute)));
                        foreach (MessageDescription md in od.Messages) {
-                               if (md.IsRequest)
+                               if (md.Direction == MessageDirection.Input)
                                        ad.Arguments.Add (new CodeAttributeArgument ("Action", new CodePrimitiveExpression (md.Action)));
                                else
                                        ad.Arguments.Add (new CodeAttributeArgument ("ReplyAction", new CodePrimitiveExpression (md.Action)));
@@ -725,14 +721,10 @@ namespace System.ServiceModel.Description
                {
                        CodeExpression [] args = null;
                        foreach (MessageDescription md in messages) {
-                               if (!md.IsRequest) {
+                               if (md.Direction == MessageDirection.Output) {
                                        if (md.Body.ReturnValue != null) {
                                                ExportDataContract (md.Body.ReturnValue);
-#if USE_DATA_CONTRACT_IMPORTER
                                                method.ReturnType = md.Body.ReturnValue.CodeTypeReference;
-#else
-                                               method.ReturnType = new CodeTypeReference (GetCodeTypeName (md.Body.ReturnValue.TypeName));
-#endif
                                        }
                                        continue;
                                }
@@ -746,11 +738,7 @@ namespace System.ServiceModel.Description
 
                                        method.Parameters.Add (
                                                new CodeParameterDeclarationExpression (
-#if USE_DATA_CONTRACT_IMPORTER
                                                        parts [i].CodeTypeReference,
-#else
-                                                       new CodeTypeReference (GetCodeTypeName (parts [i].TypeName)),
-#endif
                                                        parts [i].Name));
 
                                        if (return_args)
@@ -771,7 +759,6 @@ namespace System.ServiceModel.Description
                        throw new NotImplementedException ();
                }
 
-#if USE_DATA_CONTRACT_IMPORTER
                void MergeCompileUnit (CodeCompileUnit from, CodeCompileUnit to)
                {
                        if (from == to)
@@ -804,123 +791,11 @@ namespace System.ServiceModel.Description
                                        to.Types.Add (ftd);
                        }
                }
-#endif
 
                private void ExportDataContract (MessagePartDescription md)
                {
-#if USE_DATA_CONTRACT_IMPORTER
                        if (xsd_data_importer == null)
                                xsd_data_importer = md.Importer;
-#else
-                       var mapping = md.XmlTypeMapping;
-
-                       if (mapping == null)
-                               return;
-
-                       QName qname = new QName (mapping.TypeName, mapping.Namespace);
-                       if (imported_names.ContainsKey (qname))
-                               return;
-
-                       CodeNamespace cns = new CodeNamespace ();
-
-                       XmlCodeExporter xce = new XmlCodeExporter (cns);
-                       xce.ExportTypeMapping (mapping);
-
-                       List <CodeTypeDeclaration> to_remove = new List <CodeTypeDeclaration> ();
-                       
-                       //Process the types just generated
-                       //FIXME: Iterate and assign the types to correct namespaces
-                       //At the end, add all those namespaces to the ccu
-                       foreach (CodeTypeDeclaration type in cns.Types) {
-                               string ns = GetXmlNamespace (type);
-                               if (ns == null)
-                                       //FIXME: do what here?
-                                       continue;
-
-                               QName type_name = new QName (type.Name, ns);
-                               if (imported_names.ContainsKey (type_name)) {
-                                       //Type got reemitted, so remove it!
-                                       to_remove.Add (type);
-                                       continue;
-                               }
-                               if (ns == ms_arrays_ns) {
-                                       //Do not emit arrays as an independent type.
-                                       to_remove.Add (type);
-                                       continue;
-                               }
-
-                               imported_names [type_name] = type_name;
-
-                               type.Comments.Clear ();
-                               //Custom Attributes
-                               type.CustomAttributes.Clear ();
-
-                               if (type.IsEnum)
-                                       continue;
-       
-                               type.CustomAttributes.Add (
-                                       new CodeAttributeDeclaration (
-                                               new CodeTypeReference ("System.CodeDom.Compiler.GeneratedCodeAttribute"),
-                                               new CodeAttributeArgument (new CodePrimitiveExpression ("System.Runtime.Serialization")),
-                                               new CodeAttributeArgument (new CodePrimitiveExpression ("3.0.0.0"))));
-                       
-                               type.CustomAttributes.Add (
-                                       new CodeAttributeDeclaration (
-                                               new CodeTypeReference ("System.Runtime.Serialization.DataContractAttribute")));
-
-                               //BaseType and interface
-                               type.BaseTypes.Add (new CodeTypeReference (typeof (object)));
-                               type.BaseTypes.Add (new CodeTypeReference ("System.Runtime.Serialization.IExtensibleDataObject"));
-
-                               foreach (CodeTypeMember mbr in type.Members) {
-                                       CodeMemberProperty p = mbr as CodeMemberProperty;
-                                       if (p == null)
-                                               continue;
-
-                                       if ((p.Attributes & MemberAttributes.Public) == MemberAttributes.Public) {
-                                               //FIXME: Clear all attributes or only XmlElementAttribute?
-                                               p.CustomAttributes.Clear ();
-                                               p.CustomAttributes.Add (new CodeAttributeDeclaration (
-                                                       new CodeTypeReference ("System.Runtime.Serialization.DataMemberAttribute")));
-
-                                               p.Comments.Clear ();
-                                       }
-                               }
-
-                               //Fields
-                               CodeMemberField field = new CodeMemberField (
-                                       new CodeTypeReference ("System.Runtime.Serialization.ExtensionDataObject"),
-                                       "extensionDataField");
-                               field.Attributes = MemberAttributes.Private | MemberAttributes.Final;
-                               type.Members.Add (field);
-
-                               //Property 
-                               CodeMemberProperty prop = new CodeMemberProperty ();
-                               prop.Type = new CodeTypeReference ("System.Runtime.Serialization.ExtensionDataObject");
-                               prop.Name = "ExtensionData";
-                               prop.Attributes = MemberAttributes.Public | MemberAttributes.Final;
-
-                               //Get
-                               prop.GetStatements.Add (new CodeMethodReturnStatement (
-                                       new CodeFieldReferenceExpression (
-                                       new CodeThisReferenceExpression (),
-                                       "extensionDataField")));
-
-                               //Set
-                               prop.SetStatements.Add (new CodeAssignStatement (
-                                       new CodeFieldReferenceExpression (
-                                       new CodeThisReferenceExpression (),
-                                       "extensionDataField"),
-                                       new CodePropertySetValueReferenceExpression ()));
-
-                               type.Members.Add (prop);
-                       }
-
-                       foreach (CodeTypeDeclaration type in to_remove)
-                               cns.Types.Remove (type);
-
-                       ccu.Namespaces.Add (cns);
-#endif
                }
                
                private string GetXmlNamespace (CodeTypeDeclaration type)
index 4ca4dd9555aae90c36c5de2a03b4cbcee71a018d..e18c9a98fab3dcdbd64c2ba52d0fc0c7a9609b09 100644 (file)
@@ -66,6 +66,13 @@ namespace System.ServiceModel.Description
 
                public ContractDescription Contract {
                        get { return contract; }
+#if NET_4_0
+                       set {
+                               if (value == null)
+                                       throw new ArgumentNullException ("value");
+                               contract = value;
+                       }
+#endif
                }
 
                public EndpointAddress Address {
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataEndpoint.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataEndpoint.cs
new file mode 100644 (file)
index 0000000..6abcf13
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Author:
+//     Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2010 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 NET_4_0
+using System;
+using System.Collections.ObjectModel;
+using System.Runtime.Serialization;
+using System.ServiceModel.Channels;
+
+namespace System.ServiceModel.Description
+{
+       public class ServiceMetadataEndpoint : ServiceEndpoint
+       {
+               public ServiceMetadataEndpoint ()
+                       : this (null)
+               {
+               }
+               
+               public ServiceMetadataEndpoint (EndpointAddress address)
+                       : this (MetadataExchangeBindings.CreateMexHttpBinding (), address)
+               {
+               }
+               
+               public ServiceMetadataEndpoint (Binding binding, EndpointAddress address)
+                       : base (ContractDescription.GetContract (typeof (IMetadataExchange)), binding, address)
+               {
+               }
+       }
+}
+
+#endif
index 344ac16f4d8356f217924cd5724a3cbbb627b88b..9b30fcc115e713916b7bc3e73f8edc6c52d1110c 100644 (file)
@@ -451,6 +451,9 @@ System.ServiceModel.Configuration/PolicyImporterElement.cs
 System.ServiceModel.Configuration/PolicyImporterElementCollection.cs
 System.ServiceModel.Configuration/PolicyVersionConverter.cs
 System.ServiceModel.Configuration/PrivacyNoticeElement.cs
+System.ServiceModel.Configuration/ProtocolMappingElement.cs
+System.ServiceModel.Configuration/ProtocolMappingElementCollection.cs
+System.ServiceModel.Configuration/ProtocolMappingSection.cs
 System.ServiceModel.Configuration/ReliableMessagingVersionConverter.cs
 System.ServiceModel.Configuration/ReliableSessionElement.cs
 System.ServiceModel.Configuration/RsaElement.cs
@@ -468,6 +471,8 @@ System.ServiceModel.Configuration/ServiceElementCollection.cs
 System.ServiceModel.Configuration/ServiceEndpointElement.cs
 System.ServiceModel.Configuration/ServiceEndpointElementCollection.cs
 System.ServiceModel.Configuration/ServiceHostingEnvironmentSection.cs
+System.ServiceModel.Configuration/ServiceMetadataEndpointCollectionElement.cs
+System.ServiceModel.Configuration/ServiceMetadataEndpointElement.cs
 System.ServiceModel.Configuration/ServiceMetadataPublishingElement.cs
 System.ServiceModel.Configuration/ServiceModelConfigurationElementCollection.cs
 System.ServiceModel.Configuration/ServiceModelEnhancedConfigurationElementCollection.cs
@@ -488,6 +493,7 @@ System.ServiceModel.Configuration/StandardBindingReliableSessionElement.cs
 System.ServiceModel.Configuration/StandardEndpointCollectionElement.cs
 System.ServiceModel.Configuration/StandardEndpointElement.cs
 System.ServiceModel.Configuration/StandardEndpointElementCollection.cs
+System.ServiceModel.Configuration/StandardEndpointsSection.cs
 System.ServiceModel.Configuration/SynchronousReceiveElement.cs
 System.ServiceModel.Configuration/TcpConnectionPoolSettingsElement.cs
 System.ServiceModel.Configuration/TcpTransportElement.cs
@@ -601,6 +607,7 @@ System.ServiceModel.Description/ServiceDescription.cs
 System.ServiceModel.Description/ServiceEndpoint.cs
 System.ServiceModel.Description/ServiceEndpointCollection.cs
 System.ServiceModel.Description/ServiceMetadataBehavior.cs
+System.ServiceModel.Description/ServiceMetadataEndpoint.cs
 System.ServiceModel.Description/ServiceMetadataExtension.cs
 System.ServiceModel.Description/ServiceSecurityAuditBehavior.cs
 System.ServiceModel.Description/ServiceThrottlingBehavior.cs
index a7e66db731893f9c598c4bda1c7503e4d5da1df9..cc12e2a8fd82aa8e81ef0d73c3e71b76783d8727 100644 (file)
@@ -218,7 +218,8 @@ namespace System.ServiceModel
                        if (endpoint.Binding == null)
                                throw new ArgumentException ("Binding on the argument endpoint is null");
 
-                       if (!ImplementedContracts.Values.Any (cd => cd.ContractType == endpoint.Contract.ContractType))
+                       if (!ImplementedContracts.Values.Any (cd => cd.ContractType == endpoint.Contract.ContractType) &&
+                           endpoint.Binding.Namespace != "http://schemas.microsoft.com/ws/2005/02/mex/bindings") // special case
                                throw new InvalidOperationException (String.Format ("Contract '{0}' is not implemented in this service '{1}'", endpoint.Contract.Name, Description.Name));
 
                        Description.Endpoints.Add (endpoint);
@@ -319,40 +320,10 @@ namespace System.ServiceModel
                                throw new InvalidOperationException ("ApplyConfiguration requires that the Description property be initialized. Either provide a valid ServiceDescription in the CreateDescription method or override the ApplyConfiguration method to provide an alternative implementation");
 
                        ServiceElement service = GetServiceElement ();
-                       if (service != null) {
-                               
-                               //base addresses
-                               HostElement host = service.Host;
-                               foreach (BaseAddressElement baseAddress in host.BaseAddresses) {
-                                       AddBaseAddress (new Uri (baseAddress.BaseAddress));
-                               }
+                       
+                       if (service != null)
+                               ApplyServiceElement (service);
 
-                               // behaviors
-                               ServiceBehaviorElement behavior = ConfigUtil.BehaviorsSection.ServiceBehaviors [service.BehaviorConfiguration];
-                               if (behavior != null) {
-                                       foreach (var bxe in behavior) {
-                                               IServiceBehavior b = (IServiceBehavior) bxe.CreateBehavior ();
-                                               Description.Behaviors.Add (b);
-                                       }
-                               }
-                               else
-                                       throw new ArgumentException (String.Format ("Service behavior {0} is specified, but was not found", service.BehaviorConfiguration));
-
-                               // services
-                               foreach (ServiceEndpointElement endpoint in service.Endpoints) {
-                                       ServiceEndpoint se = AddServiceEndpoint (
-                                               endpoint.Contract,
-                                               ConfigUtil.CreateBinding (endpoint.Binding, endpoint.BindingConfiguration),
-                                               endpoint.Address);
-                                       // endpoint behaviors
-                                       EndpointBehaviorElement epbehavior = ConfigUtil.BehaviorsSection.EndpointBehaviors [endpoint.BehaviorConfiguration];
-                                       if (epbehavior != null)
-                                               foreach (var bxe in epbehavior) {
-                                                       IEndpointBehavior b = (IEndpointBehavior) bxe.CreateBehavior ();
-                                                       se.Behaviors.Add (b);
-                                       }
-                               }
-                       }
                        // TODO: consider commonBehaviors here
 
                        // ensure ServiceAuthorizationBehavior
@@ -369,6 +340,74 @@ namespace System.ServiceModel
                                Description.Behaviors.Add (debugBehavior);
                        }
                }
+               
+               void ApplyServiceElement (ServiceElement service)
+               {
+                       //base addresses
+                       HostElement host = service.Host;
+                       foreach (BaseAddressElement baseAddress in host.BaseAddresses) {
+                               AddBaseAddress (new Uri (baseAddress.BaseAddress));
+                       }
+
+                       // behaviors
+                       ServiceBehaviorElement behavior = ConfigUtil.BehaviorsSection.ServiceBehaviors [service.BehaviorConfiguration];
+                       if (behavior != null) {
+                               foreach (var bxe in behavior) {
+                                       IServiceBehavior b = (IServiceBehavior) bxe.CreateBehavior ();
+                                       Description.Behaviors.Add (b);
+                               }
+                       }
+                       else if (!String.IsNullOrEmpty (service.BehaviorConfiguration))
+                               throw new ArgumentException (String.Format ("Service behavior configuration '{0}' was not found", service.BehaviorConfiguration));
+
+                       // services
+                       foreach (ServiceEndpointElement endpoint in service.Endpoints) {
+                               ServiceEndpoint se;
+
+#if NET_4_0
+                               var binding = String.IsNullOrEmpty (endpoint.Binding) ? null : ConfigUtil.CreateBinding (endpoint.Binding, endpoint.BindingConfiguration);
+
+                               if (!String.IsNullOrEmpty (endpoint.Kind)) {
+                                       var contract = String.IsNullOrEmpty (endpoint.Contract) ? null : GetContract (endpoint.Contract, false);
+                                       se = ConfigUtil.ConfigureStandardEndpoint (contract, endpoint);
+                                       if (se.Binding == null)
+                                               se.Binding = binding;
+                                       if (se.Address == null && se.Binding != null) // standard endpoint might have empty address
+                                               se.Address = new EndpointAddress (CreateUri (se.Binding.Scheme, endpoint.Address));
+                                       if (se.Binding == null && se.Address != null) // look for protocol mapping
+                                               se.Binding = GetBindingByProtocolMapping (se.Address.Uri);
+
+                                       AddServiceEndpoint (se);
+                               }
+                               else {
+                                       if (binding == null && endpoint.Address != null) // look for protocol mapping
+                                               binding = GetBindingByProtocolMapping (endpoint.Address);
+                                       se = AddServiceEndpoint (endpoint.Contract, binding, endpoint.Address);
+                               }
+#else
+                               var binding = ConfigUtil.CreateBinding (endpoint.Binding, endpoint.BindingConfiguration);
+                               se = AddServiceEndpoint (endpoint.Contract, binding, endpoint.Address);
+#endif
+
+                               // endpoint behaviors
+                               EndpointBehaviorElement epbehavior = ConfigUtil.BehaviorsSection.EndpointBehaviors [endpoint.BehaviorConfiguration];
+                               if (epbehavior != null)
+                                       foreach (var bxe in epbehavior) {
+                                               IEndpointBehavior b = (IEndpointBehavior) bxe.CreateBehavior ();
+                                               se.Behaviors.Add (b);
+                               }
+                       }
+               }
+
+#if NET_4_0
+               Binding GetBindingByProtocolMapping (Uri address)
+               {
+                       ProtocolMappingElement el = ConfigUtil.ProtocolMappingSection.ProtocolMappingCollection [address.Scheme];
+                       if (el == null)
+                               return null;
+                       return ConfigUtil.CreateBinding (el.Binding, el.BindingConfiguration);
+               }
+#endif
 
                private ServiceElement GetServiceElement() {
                        Type serviceType = Description.ServiceType;
@@ -439,6 +478,22 @@ namespace System.ServiceModel
                        foreach (ServiceEndpoint endPoint in Description.Endpoints)
                                endPoint.Validate ();
 
+#if NET_4_0
+                       // In 4.0, it seems that if there is no configured ServiceEndpoint, infer them from the service type.
+                       if (Description.Endpoints.Count == 0) {
+                               foreach (Type iface in Description.ServiceType.GetInterfaces ())
+                                       if (iface.GetCustomAttributes (typeof (ServiceContractAttribute), true).Length > 0)
+                                               foreach (var baddr in BaseAddresses) {
+                                                       if (!baddr.IsAbsoluteUri)
+                                                               continue;
+                                                       var binding = GetBindingByProtocolMapping (baddr);
+                                                       if (binding == null)
+                                                               continue;
+                                                       AddServiceEndpoint (iface.FullName, binding, baddr);
+                                               }
+                       }
+#endif
+
                        if (Description.Endpoints.FirstOrDefault (e => e.Contract != mex_contract && !e.IsSystemEndpoint) == null)
                                throw new InvalidOperationException ("The ServiceHost must have at least one application endpoint (that does not include metadata exchange endpoint) defined by either configuration, behaviors or call to AddServiceEndpoint methods.");
                }
index 2b8e7817b4ebcbc2f2a692d5c76d872829c4f2d9..285d31310d6855e2a6347c9c448aa7c141cf176a 100644 (file)
@@ -98,6 +98,7 @@ System.ServiceModel.Configuration/ServiceModelSectionGroupTest.cs
 System.ServiceModel.Configuration/StandardBindingCollectionElementTest.cs
 System.ServiceModel.Configuration/StandardBindingElementCollectionTest.cs
 System.ServiceModel.Configuration/StandardBindingElementTest.cs
+System.ServiceModel.Configuration/StandardEndpointsSectionTest.cs
 System.ServiceModel.Configuration/UserBinding.cs
 System.ServiceModel.Description/ClientCredentialsTest.cs
 System.ServiceModel.Description/ContractDescriptionTest.cs
@@ -111,6 +112,7 @@ System.ServiceModel.Description/ServiceCredentialsTest.cs
 System.ServiceModel.Description/ServiceDebugBehaviorTest.cs
 System.ServiceModel.Description/ServiceEndpointTest.cs
 System.ServiceModel.Description/ServiceMetadataBehaviorTest.cs
+System.ServiceModel.Description/ServiceMetadataEndpointTest.cs
 System.ServiceModel.Description/ServiceThrottlingBehaviorTest.cs
 System.ServiceModel.Description/TypedMessageConverterTest.cs
 System.ServiceModel.Description/WsdlExporterTest.cs
diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Configuration/StandardEndpointsSectionTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Configuration/StandardEndpointsSectionTest.cs
new file mode 100644 (file)
index 0000000..b294efc
--- /dev/null
@@ -0,0 +1,55 @@
+//
+// StandardEndpointsSectionTest.cs
+//
+// Author:
+//     Atsushi Enomoto  <atsushi@ximian.com>
+//
+// Copyright (C) 2010 Novell, Inc.  http://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 NET_4_0
+
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using NUnit.Framework;
+using System.ServiceModel;
+using System.ServiceModel.Configuration;
+using System.ServiceModel.Description;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Channels;
+
+namespace MonoTests.System.ServiceModel.Configuration
+{
+       [TestFixture]
+       public class StandardEndpointsSectionTest
+       {
+               [Test]
+               public void ServiceMetadataExists ()
+               {
+                       var cfg = ConfigurationManager.OpenMachineConfiguration ();
+                       Assert.IsNotNull (StandardEndpointsSection.GetSection (cfg).EndpointCollections.FirstOrDefault (e => e is ServiceMetadataEndpointCollectionElement), "#1");
+               }
+       }
+}
+#endif
diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceMetadataEndpointTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceMetadataEndpointTest.cs
new file mode 100644 (file)
index 0000000..2b36aea
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// ServiceEndpointTest.cs
+//
+// Author:
+//     Atsushi Enomoto  <atsushi@ximian.com>
+//
+// Copyright (C) 2009 Novell, Inc.  http://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 NET_4_0
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Channels;
+
+namespace MonoTests.System.ServiceModel.Description
+{
+       [TestFixture]
+       public class ServiceMetadataEndpointTest
+       {
+               [Test]
+               public void DefaultValues ()
+               {
+                       var se = new ServiceMetadataEndpoint ();
+                       Assert.IsNotNull (se.Contract, "#1");
+                       Assert.AreEqual (typeof (IMetadataExchange), se.Contract.ContractType, "#1.2");
+                       Assert.IsNotNull (se.Binding, "#2");
+                       // FIXME: enable once we get usable WSHttpBinding.
+                       // Assert.AreEqual (typeof (WSHttpBinding), se.Binding.GetType (), "#2.2");
+                       Assert.IsNull (se.Address, "#3");
+               }
+       }
+}
+#endif
index 96242586793ac5ea2aa2318d5f89296a0896b741..b29b970197aab4b16e67ed89b2ba9d8150c83a18 100644 (file)
@@ -164,7 +164,7 @@ namespace MonoTests.System.ServiceModel.Security
                }
 
                [Test]
-               [Category ("NotWorking")]
+               [Ignore ("This hangs on .NET")]
                // not sure how "good" this test is ... if it fails at
                // service side, it just results in timeout error.
                // The assertion makes sure that it passes all the tests, but
index 373411c9ec97cc157b4c94e4ed1f3ea154e78696..ac8ec625618c60f432588ef6f571c89f1eee00bb 100644 (file)
@@ -372,6 +372,34 @@ namespace MonoTests.System.ServiceModel
                        host.AddServiceEndpoint (new ServiceEndpoint (contract, binding, address));
                }
 
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void AddServiceEndpoint_Directly_NullAddress ()
+               {
+                       var host = new ServiceHost (typeof (DummyService));
+                       var binding = new BasicHttpBinding ();
+                       var contract = ContractDescription.GetContract (typeof (IDummyService));
+                       host.AddServiceEndpoint (new ServiceEndpoint (contract, binding, null));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void AddServiceEndpoint_Directly_NullBinding ()
+               {
+                       var host = new ServiceHost (typeof (DummyService));
+                       var address = new EndpointAddress ("http://localhost:8080");
+                       var contract = ContractDescription.GetContract (typeof (IDummyService));
+                       host.AddServiceEndpoint (new ServiceEndpoint (contract, null, address));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void AddServiceMetadataEndpoint ()
+               {
+                       var host = new ServiceHost (typeof (DummyService));
+                       host.AddServiceEndpoint (new ServiceMetadataEndpoint ());
+               }
+
                [Test]
                [ExpectedException (typeof (InvalidOperationException))]
                public void AddServiceEndpoint_Directly_ContractMismatch ()
diff --git a/mcs/class/System.ServiceModel/mobile_System.ServiceModel.dll.sources b/mcs/class/System.ServiceModel/mobile_System.ServiceModel.dll.sources
new file mode 100644 (file)
index 0000000..fbaa524
--- /dev/null
@@ -0,0 +1,3 @@
+../../build/common/Consts.cs
+../../build/common/MonoTODOAttribute.cs
+#include moonlight_raw_System.ServiceModel.dll.sources
diff --git a/mcs/class/System.ServiceModel/monodroid_System.ServiceModel.dll.sources b/mcs/class/System.ServiceModel/monodroid_System.ServiceModel.dll.sources
new file mode 100644 (file)
index 0000000..22ece5c
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.ServiceModel.dll.sources
index fbaa524eab33dbd671abc9f909d43965a62b8ddc..22ece5ce8cecec3c77352d476eb79729ef1877f9 100644 (file)
@@ -1,3 +1 @@
-../../build/common/Consts.cs
-../../build/common/MonoTODOAttribute.cs
-#include moonlight_raw_System.ServiceModel.dll.sources
+#include mobile_System.ServiceModel.dll.sources
index c91ced43f9756f1ff631284d2a1d23fb6f202b06..9320a7a29e28bbd02811b636d3224a72f04b8d22 100644 (file)
@@ -8,7 +8,7 @@ LIB_MCS_FLAGS = /r:$(corlib) /r:System.dll
 TEST_MCS_FLAGS = /nowarn:1595 $(LIB_MCS_FLAGS)
 
 # This is a .NET 2.0+ only assembly
-VALID_PROFILE := $(filter net_2_0_bootstrap net_2_0 net_4_0 monotouch, $(PROFILE))
+VALID_PROFILE := $(filter net_2_0_bootstrap net_2_0 net_4_0 monotouch monodroid, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Transactions.dll
 NO_INSTALL = yes
index 9d109b76bd7f8d068339339c38c746bde12dc4f5..666ebdbcf36f1ede9671b71274191d1964b86b1b 100644 (file)
@@ -3,7 +3,8 @@ SUBDIRS =
 include ../../build/rules.make
 
 LIBRARY = System.Web.Services.dll
-ifeq (monotouch, $(PROFILE))
+MOBILE := $(filter monotouch monodroid, $(PROFILE))
+ifdef MOBILE
 LIB_MCS_FLAGS = \
        -nowarn:649 -nowarn:169                 \
        -r:$(corlib)                            \
index 68661f708d0fd8670ad115b47981c9fc4f64ad49..19396416171c2666aea7cddbcc3b8941ef880f84 100644 (file)
@@ -73,9 +73,9 @@ namespace System.Web.Services.Description
                        RegisterExtensionType (typeof (Soap12OperationBinding));
 #endif
 
-#if !MONOTOUCH
+#if !MOBILE
                        /*
-                        * Currently, the MonoTouch build has not support for
+                        * Currently, the mobile profile has not support for
                         * System.Configuration, so there are no external modules
                         * defined
                         */
@@ -169,9 +169,9 @@ namespace System.Web.Services.Description
                }
 
                /*
-                * MonoTouch lacks support for configuration
+                * The mobile profile lacks support for configuration
                 */
-#if MONOTOUCH
+#if MOBILE
                public static ArrayList BuildExtensionImporters ()
                {
                        return new ArrayList (0);
index e61a93ca8566bd48b1490ddcdf96466e251bc68b..120e9ca16d460e3875a16a587bd37049bea8c1a3 100644 (file)
@@ -42,7 +42,7 @@ using System.Collections;
 using System.Collections.Specialized;
 using System.Configuration;
 
-#if !MONOTOUCH
+#if !MOBILE
 using Microsoft.CSharp;
 #endif
 
@@ -56,7 +56,7 @@ namespace System.Web.Services.Description {
                ServiceDescriptionCollection serviceDescriptions;
                ServiceDescriptionImportStyle style;
                
-#if NET_2_0 && !MONOTOUCH
+#if NET_2_0 && !MOBILE
                CodeGenerationOptions options;
                CodeDomProvider codeGenerator = new CSharpCodeProvider ();
                ImportContext context;
@@ -100,7 +100,7 @@ namespace System.Web.Services.Description {
                        set { style = value; }
                }
                
-#if NET_2_0 && !MONOTOUCH
+#if NET_2_0 && !MOBILE
                [System.Runtime.InteropServices.ComVisible(false)]
                public CodeGenerationOptions CodeGenerationOptions {
                        get { return options; }
@@ -142,7 +142,7 @@ namespace System.Web.Services.Description {
                                schemas.Add (serviceDescription.Types.Schemas);
                }
 
-#if !MONOTOUCH
+#if !MOBILE
                public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
                {
                        foreach (ProtocolImporter importer in GetSupportedImporters ()) {
@@ -167,7 +167,7 @@ namespace System.Web.Services.Description {
                }
 #endif
                
-#if NET_2_0 && !MONOTOUCH
+#if NET_2_0 && !MOBILE
 
                [MonoTODO] // where to use Verbose and Extensions in options?
                public static StringCollection GenerateWebReferences (
index 6919567d2a559756f5756e99b71dce4869b993dd..1115955437305c4c05ad666bc1e2d6a74b1bcdac 100644 (file)
@@ -42,7 +42,7 @@ namespace System.Web.Services.Description
        sealed class WebReference
        {
                DiscoveryClientDocumentCollection _documents;
-#if !TARGET_J2EE && !MONOTOUCH
+#if !TARGET_J2EE && !MOBILE
                CodeNamespace _proxyCode;
                ServiceDescriptionImportWarnings _warnings;
 #endif
@@ -51,7 +51,7 @@ namespace System.Web.Services.Description
                string _appSettingBaseUrl;
                StringCollection _validationWarnings;
                
-#if !TARGET_J2EE && !MONOTOUCH
+#if !TARGET_J2EE && !MOBILE
                public WebReference (DiscoveryClientDocumentCollection documents, CodeNamespace proxyCode)
                {
                        if (documents == null) throw new ArgumentNullException ("documents");
@@ -94,7 +94,7 @@ namespace System.Web.Services.Description
                        get { return _protocolName; }
                        set { _protocolName = value; }
                }
-#if !TARGET_J2EE && !MONOTOUCH
+#if !TARGET_J2EE && !MOBILE
                public CodeNamespace ProxyCode {
                        get { return _proxyCode; }
                }
index 1179a9e7ab8a096b88414cdc561a338f764ba054..87fae3c049b53ce0fe9607cff40b6b854a634d06 100644 (file)
@@ -37,7 +37,7 @@ using System.Xml.Schema;
 using System.Xml.Serialization;
 using System.Net;
 using System.Text.RegularExpressions;
-#if !MONOTOUCH
+#if !MOBILE
 using System.Web.Services.Description;
 #endif
 
@@ -150,7 +150,7 @@ namespace System.Web.Services.Discovery {
                                        refe = new DiscoveryDocumentReference ();
                                        AddDiscoReferences (doc);
                                }
-#if !MONOTOUCH
+#if !MOBILE
                                else if (ServiceDescription.CanRead (reader))
                                {
                                        ServiceDescription wsdl = ServiceDescription.Read (reader);
index b4f897786fd21e5bd0664751c10e994e7ecfc8f0..c7fb9b793cff5a8d317562cb74c1c64c673cd8cd 100644 (file)
@@ -36,7 +36,7 @@ using System.Text;
 using System.IO;
 using System.Reflection;
 using System.Xml.Serialization;
-#if !MONOTOUCH
+#if !MOBILE
 using System.Web.Services.Description;
 #endif
 
index 0821d02f5dc4608bec54bee39ec4539e28a43863..afd489715814b6e9734e84c4eb6ca48f9a003b5a 100644 (file)
@@ -491,7 +491,7 @@ namespace System.Web.Services.Protocols {
                        xmlImporter.IncludeTypes (Type);
                        soapImporter.IncludeTypes (Type);
 
-#if MONOTOUCH
+#if MOBILE
                        SoapExtensions = new SoapExtensionRuntimeConfig [2][];
 #else
                        SoapExtensions = SoapExtension.GetTypeExtensions (Type);
index f9600c65109ba185f30fba0aa5d3cd6206309395..544c9ee6c100061100c4ab9953642f0f24763705 100644 (file)
@@ -221,7 +221,7 @@ namespace System.Web.Services.Protocols
                                                soap12Protocol.Initialize ();
                                        }
                                        return soap12Protocol;
-#if !MONOTOUCH
+#if !MOBILE
                                case "HttpGet":
                                        if (httpGetProtocol == null){
                                                httpGetProtocol = new HttpGetTypeStubInfo (this);
index 4f38b6b5eba4c602fd6a6876ba42c944fd7a5e80..854cc1a4dce51a068cca3dc0634f3cafb0f98f57 100644 (file)
@@ -111,7 +111,7 @@ namespace System.Web.Services.Protocols {
                        return pos;
                }
 
-#if !MONOTOUCH
+#if !MOBILE
                static void InitializeGlobalExtensions ()
                {
                        globalExtensions = new ArrayList[2];
index 876aac998bb50052cd4ad031cfa8283bc926286b..e319bb5bc2ce69601b7105295002fedf7d35bf49 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if !TARGET_J2EE && !MONOTOUCH
+#if !TARGET_J2EE && !MOBILE
 using System.EnterpriseServices;
 #endif
 
 namespace System.Web.Services {
 
-#if TARGET_J2EE || MONOTOUCH
+#if TARGET_J2EE || MOBILE
        public enum TransactionOption {Disabled , NotSupported , Required , RequiresNew , Supported }
 #endif
 
diff --git a/mcs/class/System.Web.Services/mobile_System.Web.Services.dll.sources b/mcs/class/System.Web.Services/mobile_System.Web.Services.dll.sources
new file mode 100644 (file)
index 0000000..b14648a
--- /dev/null
@@ -0,0 +1,152 @@
+Assembly/AssemblyInfo.cs
+../../build/common/Consts.cs
+../../build/common/MonoTODOAttribute.cs
+System.Web.Services/WebServiceBindingAttribute.cs
+System.Web.Services/WebServiceAttribute.cs
+System.Web.Services.Protocols/SoapHttpClientProtocol.cs
+System.Web.Services.Protocols/HttpWebClientProtocol.cs
+System.Web.Services.Protocols/WebClientAsyncResult.cs
+System.Web.Services.Protocols/WebClientProtocol.cs
+System.Web.Services.Protocols/Methods.cs
+System.Web.Services.Protocols/TypeStubManager.cs
+System.Web.Services.Protocols/SoapClientMessage.cs
+System.Web.Services.Protocols/SoapExtension.cs
+System.Web.Services.Protocols/LogicalMethodInfo.cs
+System.Web.Services.Protocols/SoapMessage.cs
+System.Web.Services/WebMethodAttribute.cs
+System.Web.Services.Protocols/SoapParameterStyle.cs
+System.Web.Services.Description/SoapBindingUse.cs
+System.Web.Services.Protocols/SoapHeaderMapping.cs
+System.Web.Services.Protocols/SoapHeaderDirection.cs
+System.Web.Services.Protocols/SoapHeaderCollection.cs
+System.Web.Services.Description/SoapBindingStyle.cs
+System.Web.Services.Protocols/SoapServiceRoutingStyle.cs
+System.Web.Services.Protocols/SoapExtensionAttribute.cs
+System.Web.Services.Protocols/SoapException.cs
+System.Web.Services.Protocols/SoapHeader.cs
+System.Web.Services.Protocols/SoapMessageStage.cs
+System.Web.Services.Protocols/SoapHeaderAttribute.cs
+System.Web.Services.Protocols/ServerType.cs
+System.Web.Services.Protocols/LogicalMethodTypes.cs
+System.Web.Services/WebServicesDescriptionAttribute.cs
+System.Web.Services.Protocols/WebServiceHelper.cs
+System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs
+System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs
+System.Web.Services.Protocols/SoapRpcMethodAttribute.cs
+System.Web.Services.Protocols/SoapRpcServiceAttribute.cs
+System.Web.Services.Discovery/DiscoveryClientProtocol.cs
+System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs
+System.Web.Services.Discovery/DiscoveryDocument.cs
+System.Web.Services.Discovery/DiscoveryClientResultCollection.cs
+System.Web.Services.Discovery/DiscoveryClientResult.cs
+System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs
+System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs
+System.Web.Services.Discovery/DiscoveryReference.cs
+System.Web.Services.Discovery/SoapBinding.cs
+System.Web.Services.Protocols/Fault.cs
+System.Web.Services.Protocols/InvokeCompletedEventArgs.cs
+System.Web.Services.Protocols/InvokeCompletedEventHandler.cs
+System.Web.Services.Protocols/SoapUnknownHeader.cs
+System.Web.Services/WsiProfiles.cs
+System.Web.Services.Protocols/SoapProtocolVersion.cs
+System.Web.Services.Protocols/SoapFaultSubcode.cs
+System.Web.Services.Protocols/Soap12FaultCodes.cs
+System.Web.Services.Protocols/Fault12.cs
+System.Web.Services.Protocols/MimeFormatter.cs
+System.Web.Services.Description/ServiceDescription.cs
+System.Web.Services.Description/NamedItem.cs
+System.Web.Services.Description/DocumentableItem.cs
+System.Web.Services.Description/ServiceDescriptionCollection.cs
+System.Web.Services.Description/ServiceCollection.cs
+System.Web.Services.Description/ServiceDescriptionBaseCollection.cs
+System.Web.Services.Description/ServiceDescriptionFormatExtension.cs
+System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs
+System.Web.Services.Description/Service.cs
+System.Web.Services.Description/Binding.cs
+System.Web.Services.Description/Port.cs
+System.Web.Services.Description/PortCollection.cs
+System.Web.Services.Description/MessageCollection.cs
+System.Web.Services.Description/Message.cs
+System.Web.Services.Description/MessagePart.cs
+System.Web.Services.Description/MessagePartCollection.cs
+System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs
+System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs
+System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs
+System.Web.Services.Description/BindingCollection.cs
+System.Web.Services.Description/Import.cs
+System.Web.Services.Description/ImportCollection.cs
+System.Web.Services.Description/PortType.cs
+System.Web.Services.Description/PortTypeCollection.cs
+System.Web.Services.Description/OperationBinding.cs
+System.Web.Services.Description/OperationBindingCollection.cs
+System.Web.Services.Description/InputBinding.cs
+System.Web.Services.Description/OutputBinding.cs
+System.Web.Services.Description/MessageBinding.cs
+System.Web.Services.Description/FaultBindingCollection.cs
+System.Web.Services.Description/FaultBinding.cs
+System.Web.Services.Description/OperationCollection.cs
+System.Web.Services.Description/Operation.cs
+System.Web.Services.Description/Types.cs
+System.Web.Services.Description/OperationFault.cs
+System.Web.Services.Description/OperationFaultCollection.cs
+System.Web.Services.Description/OperationMessage.cs
+System.Web.Services.Description/OperationMessageCollection.cs
+System.Web.Services.Description/OperationFlow.cs
+System.Web.Services.Description/OperationInput.cs
+System.Web.Services.Description/OperationOutput.cs
+System.Web.Services.Description/ServiceDescriptionImporter.cs
+System.Web.Services.Description/WebReference.cs
+System.Web.Services.Description/ServiceDescriptionImportStyle.cs
+System.Web.Services.Discovery/DiscoveryDocumentReference.cs
+System.Web.Services.Discovery/ContractReference.cs
+System.Web.Services.Discovery/SchemaReference.cs
+System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs
+
+System.Web.Services.Discovery/ContractSearchPattern.cs
+System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs
+System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs
+System.Web.Services.Discovery/DiscoveryReferenceCollection.cs
+System.Web.Services.Discovery/DiscoverySearchPattern.cs
+System.Web.Services.Discovery/DynamicDiscoveryDocument.cs
+System.Web.Services.Discovery/ExcludePathInfo.cs
+System.Web.Services.Discovery/XmlSchemaSearchPattern.cs
+
+System.Web.Services.Protocols/Fault12Serializer.cs
+System.Web.Services.Protocols/HttpMethodAttribute.cs
+System.Web.Services.Protocols/NopReturnReader.cs
+System.Web.Services.Protocols/MimeReturnReader.cs
+System.Web.Services.Protocols/XmlReturnReader.cs
+System.Web.Services.Protocols/UrlParameterWriter.cs
+System.Web.Services.Protocols/UrlEncodedParameterWriter.cs
+System.Web.Services.Protocols/MimeParameterWriter.cs
+System.Web.Services.Description/SoapBinding.cs
+System.Web.Services.Description/Soap12Binding.cs
+System.Web.Services.Description/HttpBinding.cs
+System.Web.Services.Description/MimeContentBinding.cs
+System.Web.Services.Description/MimeTextBinding.cs
+System.Web.Services.Description/MimeTextMatch.cs
+System.Web.Services.Description/MimeTextMatchCollection.cs
+System.Web.Services.Description/ExtensionManager.cs
+System.Web.Services.Description/ServiceDescriptionSerializerBase2.cs
+../System.Web/System.Web.Util/Helpers.cs
+../System.Web/System.Web.Util/HttpEncoder.cs
+../System.Web/System.Web/HttpUtility.cs
+System.Web.Services.Description/MimePart.cs
+System.Web.Services.Description/MimePartCollection.cs
+System.Web.Services.Description/HttpAddressBinding.cs
+System.Web.Services.Description/HttpOperationBinding.cs
+System.Web.Services.Description/HttpUrlEncodedBinding.cs
+System.Web.Services.Description/HttpUrlReplacementBinding.cs
+System.Web.Services.Description/MimeMultipartRelatedBinding.cs
+System.Web.Services.Description/MimeXmlBinding.cs
+System.Web.Services.Description/SoapAddressBinding.cs
+System.Web.Services.Description/SoapBodyBinding.cs
+System.Web.Services.Description/SoapFaultBinding.cs
+System.Web.Services.Description/SoapHeaderBinding.cs
+System.Web.Services.Description/SoapOperationBinding.cs
+System.Web.Services.Description/Soap12AddressBinding.cs
+System.Web.Services.Description/Soap12BodyBinding.cs
+System.Web.Services.Description/Soap12FaultBinding.cs
+System.Web.Services.Description/Soap12HeaderBinding.cs
+System.Web.Services.Description/Soap12OperationBinding.cs
+System.Web.Services.Description/SoapHeaderFaultBinding.cs
diff --git a/mcs/class/System.Web.Services/monodroid_System.Web.Services.dll.sources b/mcs/class/System.Web.Services/monodroid_System.Web.Services.dll.sources
new file mode 100644 (file)
index 0000000..9e39dcc
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.Web.Services.dll.sources
index b14648a84438e8c7272f4878ea7c946c31c0a293..9e39dcc73b13fed8593e8900a8653287d10c8ed3 100644 (file)
@@ -1,152 +1 @@
-Assembly/AssemblyInfo.cs
-../../build/common/Consts.cs
-../../build/common/MonoTODOAttribute.cs
-System.Web.Services/WebServiceBindingAttribute.cs
-System.Web.Services/WebServiceAttribute.cs
-System.Web.Services.Protocols/SoapHttpClientProtocol.cs
-System.Web.Services.Protocols/HttpWebClientProtocol.cs
-System.Web.Services.Protocols/WebClientAsyncResult.cs
-System.Web.Services.Protocols/WebClientProtocol.cs
-System.Web.Services.Protocols/Methods.cs
-System.Web.Services.Protocols/TypeStubManager.cs
-System.Web.Services.Protocols/SoapClientMessage.cs
-System.Web.Services.Protocols/SoapExtension.cs
-System.Web.Services.Protocols/LogicalMethodInfo.cs
-System.Web.Services.Protocols/SoapMessage.cs
-System.Web.Services/WebMethodAttribute.cs
-System.Web.Services.Protocols/SoapParameterStyle.cs
-System.Web.Services.Description/SoapBindingUse.cs
-System.Web.Services.Protocols/SoapHeaderMapping.cs
-System.Web.Services.Protocols/SoapHeaderDirection.cs
-System.Web.Services.Protocols/SoapHeaderCollection.cs
-System.Web.Services.Description/SoapBindingStyle.cs
-System.Web.Services.Protocols/SoapServiceRoutingStyle.cs
-System.Web.Services.Protocols/SoapExtensionAttribute.cs
-System.Web.Services.Protocols/SoapException.cs
-System.Web.Services.Protocols/SoapHeader.cs
-System.Web.Services.Protocols/SoapMessageStage.cs
-System.Web.Services.Protocols/SoapHeaderAttribute.cs
-System.Web.Services.Protocols/ServerType.cs
-System.Web.Services.Protocols/LogicalMethodTypes.cs
-System.Web.Services/WebServicesDescriptionAttribute.cs
-System.Web.Services.Protocols/WebServiceHelper.cs
-System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs
-System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs
-System.Web.Services.Protocols/SoapRpcMethodAttribute.cs
-System.Web.Services.Protocols/SoapRpcServiceAttribute.cs
-System.Web.Services.Discovery/DiscoveryClientProtocol.cs
-System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs
-System.Web.Services.Discovery/DiscoveryDocument.cs
-System.Web.Services.Discovery/DiscoveryClientResultCollection.cs
-System.Web.Services.Discovery/DiscoveryClientResult.cs
-System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs
-System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs
-System.Web.Services.Discovery/DiscoveryReference.cs
-System.Web.Services.Discovery/SoapBinding.cs
-System.Web.Services.Protocols/Fault.cs
-System.Web.Services.Protocols/InvokeCompletedEventArgs.cs
-System.Web.Services.Protocols/InvokeCompletedEventHandler.cs
-System.Web.Services.Protocols/SoapUnknownHeader.cs
-System.Web.Services/WsiProfiles.cs
-System.Web.Services.Protocols/SoapProtocolVersion.cs
-System.Web.Services.Protocols/SoapFaultSubcode.cs
-System.Web.Services.Protocols/Soap12FaultCodes.cs
-System.Web.Services.Protocols/Fault12.cs
-System.Web.Services.Protocols/MimeFormatter.cs
-System.Web.Services.Description/ServiceDescription.cs
-System.Web.Services.Description/NamedItem.cs
-System.Web.Services.Description/DocumentableItem.cs
-System.Web.Services.Description/ServiceDescriptionCollection.cs
-System.Web.Services.Description/ServiceCollection.cs
-System.Web.Services.Description/ServiceDescriptionBaseCollection.cs
-System.Web.Services.Description/ServiceDescriptionFormatExtension.cs
-System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs
-System.Web.Services.Description/Service.cs
-System.Web.Services.Description/Binding.cs
-System.Web.Services.Description/Port.cs
-System.Web.Services.Description/PortCollection.cs
-System.Web.Services.Description/MessageCollection.cs
-System.Web.Services.Description/Message.cs
-System.Web.Services.Description/MessagePart.cs
-System.Web.Services.Description/MessagePartCollection.cs
-System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs
-System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs
-System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs
-System.Web.Services.Description/BindingCollection.cs
-System.Web.Services.Description/Import.cs
-System.Web.Services.Description/ImportCollection.cs
-System.Web.Services.Description/PortType.cs
-System.Web.Services.Description/PortTypeCollection.cs
-System.Web.Services.Description/OperationBinding.cs
-System.Web.Services.Description/OperationBindingCollection.cs
-System.Web.Services.Description/InputBinding.cs
-System.Web.Services.Description/OutputBinding.cs
-System.Web.Services.Description/MessageBinding.cs
-System.Web.Services.Description/FaultBindingCollection.cs
-System.Web.Services.Description/FaultBinding.cs
-System.Web.Services.Description/OperationCollection.cs
-System.Web.Services.Description/Operation.cs
-System.Web.Services.Description/Types.cs
-System.Web.Services.Description/OperationFault.cs
-System.Web.Services.Description/OperationFaultCollection.cs
-System.Web.Services.Description/OperationMessage.cs
-System.Web.Services.Description/OperationMessageCollection.cs
-System.Web.Services.Description/OperationFlow.cs
-System.Web.Services.Description/OperationInput.cs
-System.Web.Services.Description/OperationOutput.cs
-System.Web.Services.Description/ServiceDescriptionImporter.cs
-System.Web.Services.Description/WebReference.cs
-System.Web.Services.Description/ServiceDescriptionImportStyle.cs
-System.Web.Services.Discovery/DiscoveryDocumentReference.cs
-System.Web.Services.Discovery/ContractReference.cs
-System.Web.Services.Discovery/SchemaReference.cs
-System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs
-
-System.Web.Services.Discovery/ContractSearchPattern.cs
-System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs
-System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs
-System.Web.Services.Discovery/DiscoveryReferenceCollection.cs
-System.Web.Services.Discovery/DiscoverySearchPattern.cs
-System.Web.Services.Discovery/DynamicDiscoveryDocument.cs
-System.Web.Services.Discovery/ExcludePathInfo.cs
-System.Web.Services.Discovery/XmlSchemaSearchPattern.cs
-
-System.Web.Services.Protocols/Fault12Serializer.cs
-System.Web.Services.Protocols/HttpMethodAttribute.cs
-System.Web.Services.Protocols/NopReturnReader.cs
-System.Web.Services.Protocols/MimeReturnReader.cs
-System.Web.Services.Protocols/XmlReturnReader.cs
-System.Web.Services.Protocols/UrlParameterWriter.cs
-System.Web.Services.Protocols/UrlEncodedParameterWriter.cs
-System.Web.Services.Protocols/MimeParameterWriter.cs
-System.Web.Services.Description/SoapBinding.cs
-System.Web.Services.Description/Soap12Binding.cs
-System.Web.Services.Description/HttpBinding.cs
-System.Web.Services.Description/MimeContentBinding.cs
-System.Web.Services.Description/MimeTextBinding.cs
-System.Web.Services.Description/MimeTextMatch.cs
-System.Web.Services.Description/MimeTextMatchCollection.cs
-System.Web.Services.Description/ExtensionManager.cs
-System.Web.Services.Description/ServiceDescriptionSerializerBase2.cs
-../System.Web/System.Web.Util/Helpers.cs
-../System.Web/System.Web.Util/HttpEncoder.cs
-../System.Web/System.Web/HttpUtility.cs
-System.Web.Services.Description/MimePart.cs
-System.Web.Services.Description/MimePartCollection.cs
-System.Web.Services.Description/HttpAddressBinding.cs
-System.Web.Services.Description/HttpOperationBinding.cs
-System.Web.Services.Description/HttpUrlEncodedBinding.cs
-System.Web.Services.Description/HttpUrlReplacementBinding.cs
-System.Web.Services.Description/MimeMultipartRelatedBinding.cs
-System.Web.Services.Description/MimeXmlBinding.cs
-System.Web.Services.Description/SoapAddressBinding.cs
-System.Web.Services.Description/SoapBodyBinding.cs
-System.Web.Services.Description/SoapFaultBinding.cs
-System.Web.Services.Description/SoapHeaderBinding.cs
-System.Web.Services.Description/SoapOperationBinding.cs
-System.Web.Services.Description/Soap12AddressBinding.cs
-System.Web.Services.Description/Soap12BodyBinding.cs
-System.Web.Services.Description/Soap12FaultBinding.cs
-System.Web.Services.Description/Soap12HeaderBinding.cs
-System.Web.Services.Description/Soap12OperationBinding.cs
-System.Web.Services.Description/SoapHeaderFaultBinding.cs
+#include mobile_System.Web.Services.dll.sources
index 400dccd60cbe32bcb1064436a7a00d7797c216ca..6a0f23f1859bb36f4b85d0fe0ef33b32f6bf121a 100644 (file)
@@ -144,6 +144,9 @@ using System.Web.UI;
 [assembly: WebResource ("computer.gif", "image/gif")]
 [assembly: WebResource ("TreeView.js", "text/javascript")]
 [assembly: WebResource ("Menu.js", "text/javascript")]
+#if NET_4_0
+[assembly: WebResource ("MenuModern.js", "text/javascript")]
+#endif
 [assembly: WebResource ("GridView.js", "text/javascript")]
 [assembly: WebResource ("webform.js", "text/javascript")]
 [assembly: WebResource ("WebUIValidation_2.0.js", "text/javascript")]
index 7327b014cbbd9b5c9d9c4f7cde0d67db52dab712..a7ee8821e07db3739d42d1450ebfd9d247e1caf2 100644 (file)
@@ -73,6 +73,9 @@ RESOURCE_FILES_2 = \
        System.Web.UI.WebControls/TreeView.js \
        System.Web.UI.WebControls/Menu.js
 
+RESOURCE_FILES_4 = \
+       System.Web.UI.WebControls/MenuModern.js
+
 OTHER_RES = $(RESOURCE_FILES_1)
 TEST_APP_CODE_FILES = \
        Test/mainsoft/NunitWebResources/App_Code/EnumConverterControl.cs \
@@ -247,6 +250,7 @@ endif
 
 ifeq (4, $(FRAMEWORK_VERSION_MAJOR))
 OTHER_LIB_MCS_FLAGS += -r:System.Web.ApplicationServices.dll
+OTHER_RES += $(RESOURCE_FILES_4)
 endif
 
 LIB_MCS_FLAGS = \
@@ -291,6 +295,7 @@ TEST_MCS_FLAGS += -r:System.Web.Extensions.dll
 endif
 
 EXTRA_DISTFILES = \
+       $(RESOURCE_FILES_4) \
        $(RESOURCE_FILES_2) \
        $(RESOURCE_FILES_1) \
        $(TEST_RESOURCE_FILES) \
@@ -442,4 +447,4 @@ ifdef STANDALONE_TEST_COMPILABLE_TESTS
        done
 endif
  
\ No newline at end of file
index e8eaf1e7516e6b7b7327f057b7b2907c7f8e9413..4e866c0b4ac621cf5c183a42fac00663ec2b7ec6 100644 (file)
@@ -143,7 +143,7 @@ namespace System.Web.UI.WebControls
                        int r = new Random ().Next (total_imp);
 
                        foreach (Hashtable a in ads) {
-                               if (keywordFilterEmpty && KeywordFilter != (string) a ["Keyword"])
+                               if (!keywordFilterEmpty && KeywordFilter != (string) a ["Keyword"])
                                        continue;
                                cur_imp += a ["Impressions"] != null ? int.Parse ((string) a ["Impressions"]) : 1;
                                
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/BaseMenuRenderer.cs b/mcs/class/System.Web/System.Web.UI.WebControls/BaseMenuRenderer.cs
new file mode 100644 (file)
index 0000000..e74a093
--- /dev/null
@@ -0,0 +1,506 @@
+//
+// Authors:
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2010 Novell, Inc (http://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.
+//
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+
+namespace System.Web.UI.WebControls
+{
+       abstract class BaseMenuRenderer : IMenuRenderer
+       {
+               protected sealed class OwnerContext
+               {
+                       BaseMenuRenderer container;
+                       
+                       string staticPopOutImageTextFormatString;
+                       string dynamicPopOutImageTextFormatString;
+                       string dynamicTopSeparatorImageUrl;
+                       string dynamicBottomSeparatorImageUrl;
+                       string staticTopSeparatorImageUrl;
+                       string staticBottomSeparatorImageUrl;
+                       List <Style> levelMenuItemLinkStyles;
+                       List<Style> levelSelectedLinkStyles;
+                       Style staticMenuItemLinkStyle;
+                       Style dynamicMenuItemLinkStyle;
+                       MenuItemStyle staticSelectedStyle;
+                       Style staticSelectedLinkStyle;
+                       MenuItemStyle dynamicSelectedStyle;
+                       Style dynamicSelectedLinkStyle;
+                       MenuItemStyleCollection levelSelectedStyles;
+                       ITemplate dynamicItemTemplate;
+                       bool dynamicItemTemplateQueried;
+                       
+                       public readonly MenuItemStyle StaticMenuItemStyle;
+                       public readonly MenuItemStyle DynamicMenuItemStyle;
+                       public readonly MenuItemStyleCollection LevelMenuItemStyles;
+                       public readonly Style ControlLinkStyle;
+                       public readonly HtmlHead Header;
+                       public readonly string ClientID;
+                       public readonly int StaticDisplayLevels;
+                       public readonly bool IsVertical;
+                       public readonly MenuItem SelectedItem;
+                       public readonly Unit StaticSubMenuIndent;
+                       
+                       public string StaticPopOutImageTextFormatString {
+                               get {
+                                       if (staticPopOutImageTextFormatString == null)
+                                               staticPopOutImageTextFormatString = container.Owner.StaticPopOutImageTextFormatString;
+
+                                       return staticPopOutImageTextFormatString;
+                               }
+                       }
+
+                       public string DynamicPopOutImageTextFormatString {
+                               get {
+                                       if (dynamicPopOutImageTextFormatString == null)
+                                               dynamicPopOutImageTextFormatString = container.Owner.DynamicPopOutImageTextFormatString;
+
+                                       return dynamicPopOutImageTextFormatString;
+                               }
+                       }
+
+                       public string DynamicTopSeparatorImageUrl {
+                               get {
+                                       if (dynamicTopSeparatorImageUrl == null)
+                                               dynamicTopSeparatorImageUrl = container.Owner.DynamicTopSeparatorImageUrl;
+
+                                       return dynamicTopSeparatorImageUrl;
+                               }
+                       }
+                       
+                       public string DynamicBottomSeparatorImageUrl {
+                               get {
+                                       if (dynamicBottomSeparatorImageUrl == null)
+                                               dynamicBottomSeparatorImageUrl = container.Owner.DynamicBottomSeparatorImageUrl;
+
+                                       return dynamicBottomSeparatorImageUrl;
+                               }
+                       }
+
+                       public string StaticTopSeparatorImageUrl {
+                               get {
+                                       if (staticTopSeparatorImageUrl == null)
+                                               staticTopSeparatorImageUrl = container.Owner.StaticTopSeparatorImageUrl;
+
+                                       return staticBottomSeparatorImageUrl;
+                               }
+                       }
+                       
+                       public string StaticBottomSeparatorImageUrl {
+                               get {
+                                       if (staticBottomSeparatorImageUrl == null)
+                                               staticBottomSeparatorImageUrl = container.Owner.StaticBottomSeparatorImageUrl;
+
+                                       return staticBottomSeparatorImageUrl;
+                               }
+                       }
+                       
+                       public List <Style> LevelMenuItemLinkStyles {
+                               get {
+                                       if (levelMenuItemLinkStyles == null)
+                                               levelMenuItemLinkStyles = container.Owner.LevelMenuItemLinkStyles;
+
+                                       return levelMenuItemLinkStyles;
+                               }
+                       }
+
+                       public List<Style> LevelSelectedLinkStyles {
+                               get {
+                                       if (levelSelectedLinkStyles == null)
+                                               levelSelectedLinkStyles = container.Owner.LevelSelectedLinkStyles;
+
+                                       return levelSelectedLinkStyles;
+                               }
+                       }
+                       
+               
+                       public Style StaticMenuItemLinkStyle {
+                               get {
+                                       if (staticMenuItemLinkStyle == null)
+                                               staticMenuItemLinkStyle = container.Owner.StaticMenuItemLinkStyle;
+
+                                       return staticMenuItemLinkStyle;
+                               }
+                       }
+
+                       public Style DynamicMenuItemLinkStyle {
+                               get {
+                                       if (dynamicMenuItemLinkStyle == null)
+                                               dynamicMenuItemLinkStyle = container.Owner.DynamicMenuItemLinkStyle;
+
+                                       return dynamicMenuItemLinkStyle;
+                               }
+                       }
+
+                       public MenuItemStyle StaticSelectedStyle {
+                               get {
+                                       if (staticSelectedStyle == null)
+                                               staticSelectedStyle = container.Owner.StaticSelectedStyle;
+
+                                       return staticSelectedStyle;
+                               }
+                       }
+               
+                       public MenuItemStyle DynamicSelectedStyle {
+                               get {
+                                       if (dynamicSelectedStyle == null)
+                                               dynamicSelectedStyle = container.Owner.DynamicSelectedStyle;
+
+                                       return dynamicSelectedStyle;
+                               }
+                       }
+
+                       public Style StaticSelectedLinkStyle {
+                               get {
+                                       if (staticSelectedLinkStyle == null)
+                                               staticSelectedLinkStyle = container.Owner.StaticSelectedLinkStyle;
+
+                                       return staticSelectedLinkStyle;
+                               }
+                       }
+               
+                       public Style DynamicSelectedLinkStyle {
+                               get {
+                                       if (dynamicSelectedLinkStyle == null)
+                                               dynamicSelectedLinkStyle = container.Owner.DynamicSelectedLinkStyle;
+
+                                       return dynamicSelectedLinkStyle;
+                               }
+                       }
+
+                       public MenuItemStyleCollection LevelSelectedStyles {
+                               get {
+                                       if (levelSelectedStyles == null)
+                                               levelSelectedStyles = container.Owner.LevelSelectedStyles;
+
+                                       return levelSelectedStyles;
+                               }
+                       }
+                       
+                       public ITemplate DynamicItemTemplate {
+                               get {
+                                       if (!dynamicItemTemplateQueried && dynamicItemTemplate == null) {
+                                               dynamicItemTemplate = container.Owner.DynamicItemTemplate;
+                                               dynamicItemTemplateQueried = true;
+                                       }
+
+                                       return dynamicItemTemplate;
+                               }
+                       }
+               
+                       public OwnerContext (BaseMenuRenderer container)
+                       {
+                               if (container == null)
+                                       throw new ArgumentNullException ("container");
+
+                               this.container = container;
+                               Menu owner = container.Owner;
+                               Page page = owner.Page;
+
+                               Header = page != null ? page.Header : null;
+                               ClientID = owner.ClientID;
+                               IsVertical = owner.Orientation == Orientation.Vertical;
+                               StaticSubMenuIndent = owner.StaticSubMenuIndent;
+                               SelectedItem = owner.SelectedItem;
+                               ControlLinkStyle = owner.ControlLinkStyle;
+                               StaticDisplayLevels = owner.StaticDisplayLevels;
+                               StaticMenuItemStyle = owner.StaticMenuItemStyleInternal;
+                               DynamicMenuItemStyle = owner.DynamicMenuItemStyleInternal;
+                               LevelMenuItemStyles = owner.LevelMenuItemStyles;
+                       }
+               }
+
+               int registeredStylesCounter = -1;
+               
+               public abstract HtmlTextWriterTag Tag { get; }
+               
+               protected Menu Owner {
+                       get;
+                       private set;
+               }
+               
+               public BaseMenuRenderer (Menu owner)
+               {
+                       if (owner == null)
+                               throw new ArgumentNullException ("owner");
+
+                       this.Owner = owner;
+               }
+               
+               public virtual void AddAttributesToRender (HtmlTextWriter writer)
+               {
+                       Menu owner = Owner;
+                       Page page = owner.Page;
+                       SubMenuStyle staticMenuStyle = owner.StaticMenuStyleInternal;
+                       SubMenuStyleCollection levelSubMenuStyles = owner.LevelSubMenuStylesInternal;
+                       bool haveSubStyles = levelSubMenuStyles != null && levelSubMenuStyles.Count > 0;
+                       Style controlStyle = haveSubStyles || staticMenuStyle != null ? owner.ControlStyle : null;
+                       
+                       if (page != null && page.Header != null) {      
+                               // styles are registered
+                               if (staticMenuStyle != null) {
+                                       AddCssClass (controlStyle, staticMenuStyle.CssClass);
+                                       AddCssClass (controlStyle, staticMenuStyle.RegisteredCssClass);
+                               }
+                               if (haveSubStyles) {
+                                       AddCssClass (controlStyle, levelSubMenuStyles [0].CssClass);
+                                       AddCssClass (controlStyle, levelSubMenuStyles [0].RegisteredCssClass);
+                               }
+                       } else {
+                               // styles are not registered
+                               if (staticMenuStyle != null)
+                                       controlStyle.CopyFrom (staticMenuStyle);
+                               if (haveSubStyles)
+                                       controlStyle.CopyFrom (levelSubMenuStyles [0]);
+                       }
+               }
+               
+               public abstract void PreRender (Page page, HtmlHead head, ClientScriptManager csm, string cmenu, StringBuilder script);
+               public abstract void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel);
+               public abstract void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast);
+               public abstract void RenderBeginTag (HtmlTextWriter writer, string skipLinkText);
+               public abstract void RenderEndTag (HtmlTextWriter writer);
+               public abstract void RenderContents (HtmlTextWriter writer);
+               public abstract bool IsDynamicItem (Menu owner, MenuItem item);
+               
+               protected abstract void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool vertical, bool notLast, bool isFirst, OwnerContext oc);
+               
+               public virtual void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool notLast, bool isFirst)
+               {
+                       var oc = new OwnerContext (this);
+                       RenderMenuItem (writer, item, oc.IsVertical, notLast, isFirst, oc);
+               }
+               
+               public virtual void RenderMenuEndTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
+               {
+                       writer.RenderEndTag ();
+               }
+
+               public virtual void RenderItemContent (HtmlTextWriter writer, MenuItem item, bool isDynamicItem)
+               {
+                       Menu owner = Owner;
+                       
+                       if (!String.IsNullOrEmpty (item.ImageUrl)) {
+                               writer.AddAttribute (HtmlTextWriterAttribute.Src, owner.ResolveClientUrl (item.ImageUrl));
+                               writer.AddAttribute (HtmlTextWriterAttribute.Alt, item.ToolTip);
+                               writer.AddStyleAttribute (HtmlTextWriterStyle.BorderStyle, "none");
+                               writer.AddStyleAttribute (HtmlTextWriterStyle.VerticalAlign, "middle");
+                               writer.RenderBeginTag (HtmlTextWriterTag.Img);
+                               writer.RenderEndTag (); // IMG
+                       }
+
+                       string format;
+                       if (isDynamicItem && (format = owner.DynamicItemFormatString).Length > 0)
+                               writer.Write (String.Format (format, item.Text));
+                       else if (!isDynamicItem && (format = owner.StaticItemFormatString).Length > 0)
+                               writer.Write (String.Format (format, item.Text));
+                       else
+                               writer.Write (item.Text);
+               }
+
+               public void AddCssClass (Style style, string cssClass)
+               {
+                       style.AddCssClass (cssClass);
+               }
+               
+               public string GetItemClientId (string ownerClientID, MenuItem item, string suffix)
+               {
+                       return ownerClientID + "_" + item.Path + suffix;
+               }
+
+               public virtual void RenderItemHref (Menu owner, HtmlTextWriter writer, MenuItem item)
+               {
+                       if (!item.BranchEnabled)
+                               writer.AddAttribute ("disabled", "true", false);
+                       else if (!item.Selectable) {
+                               writer.AddAttribute ("href", "#", false);
+                               writer.AddStyleAttribute ("cursor", "text");
+                       } else if (item.NavigateUrl != String.Empty) {
+                               string target = item.Target != String.Empty ? item.Target : owner.Target;
+#if TARGET_J2EE
+                               string navUrl = owner.ResolveClientUrl (item.NavigateUrl, String.Compare (target, "_blank", StringComparison.InvariantCultureIgnoreCase) != 0);
+#else
+                               string navUrl = owner.ResolveClientUrl (item.NavigateUrl);
+#endif
+                               writer.AddAttribute ("href", navUrl);
+                               if (target != String.Empty)
+                                       writer.AddAttribute ("target", target);
+                       } else
+                               writer.AddAttribute ("href", GetClientEvent (owner, item));
+               }
+
+               public string GetPopOutImage (Menu owner, MenuItem item, bool isDynamicItem)
+               {
+                       if (owner == null)
+                               owner = Owner;
+                       
+                       if (item.PopOutImageUrl != String.Empty)
+                               return item.PopOutImageUrl;
+
+                       bool needArrowResource = false;
+                       if (isDynamicItem) {
+                               if (owner.DynamicPopOutImageUrl != String.Empty)
+                                       return owner.DynamicPopOutImageUrl;
+                               if (owner.DynamicEnableDefaultPopOutImage)
+                                       needArrowResource = true;               
+                       } else {
+                               if (owner.StaticPopOutImageUrl != String.Empty)
+                                       return owner.StaticPopOutImageUrl;
+                               if (owner.StaticEnableDefaultPopOutImage)
+                                       needArrowResource = true;
+                       }
+
+                       if (needArrowResource)
+                               return GetArrowResourceUrl (owner);
+                       
+                       return null;
+               }
+
+               public string GetArrowResourceUrl (Menu owner) 
+               {
+                       Page page = owner.Page;
+                       ClientScriptManager csm = page != null ? page.ClientScript : null;
+                       if (csm != null)
+                               return csm.GetWebResourceUrl (typeof (Menu), "arrow_plus.gif");
+
+                       return null;
+               }
+               
+               public void FillMenuStyle (HtmlHead header, bool dynamic, int menuLevel, SubMenuStyle style)
+               {
+                       Menu owner = Owner;
+                       if (header == null) {
+                               Page page = owner.Page;
+                               header = page != null ? page.Header : null;
+                       }
+                       
+                       SubMenuStyle staticMenuStyle = owner.StaticMenuStyleInternal;
+                       MenuItemStyle dynamicMenuItemStyle = owner.DynamicMenuItemStyleInternal;
+                       SubMenuStyle dynamicMenuStyle = owner.DynamicMenuStyleInternal;
+                       SubMenuStyleCollection levelSubMenuStyles = owner.LevelSubMenuStylesInternal;
+                       
+                       if (header != null) {
+                               // styles are registered
+                               if (!dynamic && staticMenuStyle != null) {
+                                       AddCssClass (style, staticMenuStyle.CssClass);
+                                       AddCssClass (style, staticMenuStyle.RegisteredCssClass);
+                               }
+                               if (dynamic && dynamicMenuStyle != null) {
+                                       AddCssClass (style, dynamicMenuStyle.CssClass);
+                                       AddCssClass (style, dynamicMenuStyle.RegisteredCssClass);
+                               }
+                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > menuLevel) {
+                                       AddCssClass (style, levelSubMenuStyles [menuLevel].CssClass);
+                                       AddCssClass (style, levelSubMenuStyles [menuLevel].RegisteredCssClass);
+                               }
+                       } else {
+                               // styles are not registered
+                               if (!dynamic && staticMenuStyle != null)
+                                       style.CopyFrom (staticMenuStyle);
+                               if (dynamic && dynamicMenuStyle != null)
+                                       style.CopyFrom (dynamicMenuStyle);
+                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > menuLevel)
+                                       style.CopyFrom (levelSubMenuStyles [menuLevel]);
+                       }
+               }
+
+               public void RegisterStyle (Style baseStyle, Style linkStyle, HtmlHead head)
+               {
+                       RegisterStyle (baseStyle, linkStyle, null, head);
+               }
+
+               public void RegisterStyle (Style baseStyle, Style linkStyle, string className, HtmlHead head)
+               {
+                       if (head == null)
+                               return;
+                       
+                       linkStyle.CopyTextStylesFrom (baseStyle);
+                       linkStyle.BorderStyle = BorderStyle.None;
+                       RegisterStyle (linkStyle, className, head);
+                       RegisterStyle (baseStyle, className, head);
+               }
+               
+               public void RegisterStyle (Style baseStyle, HtmlHead head)
+               {
+                       RegisterStyle (baseStyle, (string)null, head);
+               }
+
+               public void RegisterStyle (Style baseStyle, string className, HtmlHead head)
+               {
+                       if (head == null)
+                               return;
+                       if (String.IsNullOrEmpty (className))
+                               className = IncrementStyleClassName ();
+                       baseStyle.SetRegisteredCssClass (className);
+                       head.StyleSheet.CreateStyleRule (baseStyle, Owner, "." + className);
+               }
+
+               public void RenderSeparatorImage (Menu owner, HtmlTextWriter writer, string url, bool standardsCompliant)
+               {
+                       if (String.IsNullOrEmpty (url))
+                               return;
+                       
+                       writer.AddAttribute (HtmlTextWriterAttribute.Src, owner.ResolveClientUrl (url));
+                       if (standardsCompliant) {
+                               writer.AddAttribute (HtmlTextWriterAttribute.Alt, String.Empty);
+                               writer.AddAttribute (HtmlTextWriterAttribute.Class, "separator");
+                       }
+                       
+                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
+                       writer.RenderEndTag ();
+               }
+               
+               public bool IsDynamicItem (MenuItem item)
+               {
+                       return IsDynamicItem (Owner, item);
+               }
+               
+               string GetClientEvent (Menu owner, MenuItem item)
+               {
+                       if (owner == null)
+                               owner = Owner;
+
+                       Page page = owner.Page;
+                       ClientScriptManager csm = page != null ? page.ClientScript : null;
+
+                       if (csm == null)
+                               return String.Empty;
+                       
+                       return csm.GetPostBackClientHyperlink (owner, item.Path, true);
+               }
+
+               string IncrementStyleClassName ()
+               {
+                       registeredStylesCounter++;
+                       return Owner.ClientID + "_" + registeredStylesCounter;
+               }
+       }
+}
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IMenuRenderer.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IMenuRenderer.cs
new file mode 100644 (file)
index 0000000..be85413
--- /dev/null
@@ -0,0 +1,55 @@
+//
+// Authors:
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2004-2010 Novell, Inc (http://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.
+//
+using System;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+
+namespace System.Web.UI.WebControls
+{
+       interface IMenuRenderer
+       {
+               HtmlTextWriterTag Tag { get; }
+               
+               void AddAttributesToRender (HtmlTextWriter writer);
+               void PreRender (Page page, HtmlHead head, ClientScriptManager csm, string cmenu, StringBuilder script);
+               void RenderBeginTag (HtmlTextWriter writer, string skipLinkText);
+               void RenderEndTag (HtmlTextWriter writer);
+               void RenderContents (HtmlTextWriter writer);
+               
+               void RenderItemContent (HtmlTextWriter writer, MenuItem item, bool isDynamicItem);
+               void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel);
+               void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast);
+               void RenderMenuEndTag (HtmlTextWriter writer, bool dynamic, int menuLevel);
+               void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool notLast, bool isFirst);
+
+               bool IsDynamicItem (MenuItem item);
+               bool IsDynamicItem (Menu owner, MenuItem item);
+       }
+}
index 291e2afbc3a307756450cdcbb9ab2917c68111cb..14da2b4034e8bab7904511d775a84c1c234ffa8f 100644 (file)
@@ -5,7 +5,7 @@
 //     Lluis Sanchez Gual (lluis@novell.com)
 //     Igor Zelmanovich (igorz@mainsoft.com)
 //
-// (C) 2004 Novell, Inc (http://www.novell.com)
+// (C) 2004-2010 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -36,6 +36,7 @@ using System.Collections;
 using System.Text;
 using System.ComponentModel;
 using System.Web.UI;
+using System.Web.UI.HtmlControls;
 using System.Web.Handlers;
 using System.Collections.Specialized;
 using System.IO;
@@ -50,6 +51,8 @@ namespace System.Web.UI.WebControls
        [SupportsEventValidation]
        public class Menu : HierarchicalDataBoundControl, IPostBackEventHandler, INamingContainer
        {
+               IMenuRenderer renderer;
+               
                MenuItemStyle dynamicMenuItemStyle;
                SubMenuStyle dynamicMenuStyle;
                MenuItemStyle dynamicSelectedStyle;
@@ -74,7 +77,6 @@ namespace System.Web.UI.WebControls
                Hashtable _menuItemControls;
                bool _requiresChildControlsDataBinding;
                SiteMapNode _currSiteMapNode;
-               int registeredStylesCounter = -1;
                List<Style> levelSelectedLinkStyles;
                List<Style> levelMenuItemLinkStyles;
                Style popOutBoxStyle;
@@ -86,6 +88,7 @@ namespace System.Web.UI.WebControls
                Style dynamicHoverLinkStyle;
                Style staticHoverLinkStyle;
 #if NET_4_0
+               bool? renderList;
                bool includeStyleBlock = true;
                MenuRenderingMode renderingMode = MenuRenderingMode.Default;
 #endif
@@ -119,7 +122,41 @@ namespace System.Web.UI.WebControls
                                if (eh != null) eh (this, e);
                        }
                }
+
+               IMenuRenderer Renderer {
+                       get {
+                               if (renderer == null)
+                                       renderer = CreateRenderer (null);
+                               
+                               return renderer;
+                       }
+               }
 #if NET_4_0
+               bool RenderList {
+                       get {
+                               if (renderList == null) {
+                                       switch (RenderingMode) {
+                                               case MenuRenderingMode.List:
+                                                       renderList = true;
+                                                       break;
+
+                                               case MenuRenderingMode.Table:
+                                                       renderList = false;
+                                                       break;
+
+                                               default:
+                                                       if (RenderingCompatibilityLessThan40)
+                                                               renderList = false;
+                                                       else
+                                                               renderList = true;
+                                                       break;
+                                       }
+                               }
+
+                               return renderList.Value;
+                       }
+               }
+               
                [DefaultValue (true)]
                [Description ("Determines whether or not to render the inline style block (only used in standards compliance mode)")]
                public bool IncludeStyleBlock {
@@ -135,6 +172,7 @@ namespace System.Web.UI.WebControls
                                        throw new ArgumentOutOfRangeException ("value");
 
                                renderingMode = value;
+                               renderer = CreateRenderer (renderer);
                        }
                }
 #endif
@@ -173,8 +211,9 @@ namespace System.Web.UI.WebControls
                public string DynamicBottomSeparatorImageUrl {
                        get {
                                object o = ViewState ["dbsiu"];
-                               if (o != null) return (string)o;
-                               return "";
+                               if (o != null)
+                                       return (string)o;
+                               return String.Empty;
                        }
                        set {
                                ViewState["dbsiu"] = value;
@@ -396,7 +435,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style PopOutBoxStyle {
+               internal Style PopOutBoxStyle {
                        get {
                                if (popOutBoxStyle == null) {
                                        popOutBoxStyle = new Style ();
@@ -406,7 +445,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style ControlLinkStyle {
+               internal Style ControlLinkStyle {
                        get {
                                if (controlLinkStyle == null) {
                                        controlLinkStyle = new Style ();
@@ -416,7 +455,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style DynamicMenuItemLinkStyle {
+               internal Style DynamicMenuItemLinkStyle {
                        get {
                                if (dynamicMenuItemLinkStyle == null) {
                                        dynamicMenuItemLinkStyle = new Style ();
@@ -425,7 +464,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style StaticMenuItemLinkStyle {
+               internal Style StaticMenuItemLinkStyle {
                        get {
                                if (staticMenuItemLinkStyle == null) {
                                        staticMenuItemLinkStyle = new Style ();
@@ -434,7 +473,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style DynamicSelectedLinkStyle {
+               internal Style DynamicSelectedLinkStyle {
                        get {
                                if (dynamicSelectedLinkStyle == null) {
                                        dynamicSelectedLinkStyle = new Style ();
@@ -443,7 +482,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style StaticSelectedLinkStyle {
+               internal Style StaticSelectedLinkStyle {
                        get {
                                if (staticSelectedLinkStyle == null) {
                                        staticSelectedLinkStyle = new Style ();
@@ -452,7 +491,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style DynamicHoverLinkStyle {
+               internal Style DynamicHoverLinkStyle {
                        get {
                                if (dynamicHoverLinkStyle == null) {
                                        dynamicHoverLinkStyle = new Style ();
@@ -461,7 +500,7 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               Style StaticHoverLinkStyle {
+               internal Style StaticHoverLinkStyle {
                        get {
                                if (staticHoverLinkStyle == null) {
                                        staticHoverLinkStyle = new Style ();
@@ -470,6 +509,58 @@ namespace System.Web.UI.WebControls
                        }
                }
 
+               internal MenuItemStyle StaticMenuItemStyleInternal {
+                       get { return staticMenuItemStyle; }
+               }
+
+               internal SubMenuStyle StaticMenuStyleInternal {
+                       get { return staticMenuStyle; }
+               }
+
+               internal MenuItemStyle DynamicMenuItemStyleInternal {
+                       get { return dynamicMenuItemStyle; }
+               }
+
+               internal SubMenuStyle DynamicMenuStyleInternal {
+                       get { return dynamicMenuStyle; }
+               }
+
+               internal MenuItemStyleCollection LevelMenuItemStylesInternal {
+                       get { return levelMenuItemStyles; }
+               }
+
+               internal List<Style> LevelMenuItemLinkStyles {
+                       get { return levelMenuItemLinkStyles; }
+               }
+
+               internal SubMenuStyleCollection LevelSubMenuStylesInternal {
+                       get { return levelSubMenuStyles; }
+               }
+
+               internal MenuItemStyle StaticSelectedStyleInternal {
+                       get { return staticSelectedStyle; }
+               }
+
+               internal MenuItemStyle DynamicSelectedStyleInternal {
+                       get { return dynamicSelectedStyle; }
+               }
+
+               internal MenuItemStyleCollection LevelSelectedStylesInternal {
+                       get { return levelSelectedStyles; }
+               }
+
+               internal List<Style> LevelSelectedLinkStyles {
+                       get { return levelSelectedLinkStyles; }
+               }
+
+               internal Style StaticHoverStyleInternal {
+                       get { return staticHoverStyle; }
+               }
+
+               internal Style DynamicHoverStyleInternal {
+                       get { return dynamicHoverStyle; }
+               }
+               
                [PersistenceMode (PersistenceMode.InnerProperty)]
                [NotifyParentProperty (true)]
                [DefaultValue (null)]
@@ -805,7 +896,40 @@ namespace System.Web.UI.WebControls
                        }
                }
                
+               IMenuRenderer CreateRenderer (IMenuRenderer current)
+               {
+#if NET_4_0
+                       Type newType = null;
+                       
+                       switch (RenderingMode) {
+                               case MenuRenderingMode.Default:
+                                       if (RenderingCompatibilityLessThan40)
+                                               newType = typeof (MenuTableRenderer);
+                                       else
+                                               newType = typeof (MenuListRenderer);
+                                       break;
+                                       
+                               case MenuRenderingMode.Table:
+                                       newType = typeof (MenuTableRenderer);
+                                       break;
 
+                               case MenuRenderingMode.List:
+                                       newType = typeof (MenuListRenderer);
+                                       break;
+                       }
+
+                       if (newType == null)
+                               return null;
+
+                       if (current == null || current.GetType () != newType)
+                               return Activator.CreateInstance (newType, this) as IMenuRenderer;
+#else
+                       if (current == null)
+                               return new MenuTableRenderer (this);
+#endif
+                       return current;
+               }
+               
                internal void SetSelectedItem (MenuItem item)
                {
                        if (selectedItem == item) return;
@@ -964,7 +1088,7 @@ namespace System.Web.UI.WebControls
                }
                
                protected override HtmlTextWriterTag TagKey {
-                       get { return HtmlTextWriterTag.Table; }
+                       get { return Renderer.Tag; }
                }
                
                protected override void TrackViewState()
@@ -1109,9 +1233,11 @@ namespace System.Web.UI.WebControls
                        _requiresChildControlsDataBinding = true;
                }
 
-               void CreateChildControlsForItems (MenuItemCollection items ) {
+               void CreateChildControlsForItems (MenuItemCollection items )
+               {
+                       IMenuRenderer renderer = Renderer;
                        foreach (MenuItem item in items) {
-                               bool isDynamicItem = IsDynamicItem (item);
+                               bool isDynamicItem = renderer.IsDynamicItem (this, item);
                                if (isDynamicItem && dynamicItemTemplate != null) {
                                        MenuItemTemplateContainer cter = new MenuItemTemplateContainer (item.Index, item);
                                        dynamicItemTemplate.InstantiateIn (cter);
@@ -1180,94 +1306,31 @@ namespace System.Web.UI.WebControls
                        EnsureChildControls ();
                        base.OnDataBinding (e);
                }
-
-               const string onPreRenderScript = "var {0} = new Object ();\n{0}.webForm = {1};\n{0}.disappearAfter = {2};\n{0}.vertical = {3};";
                
                protected internal override void OnPreRender (EventArgs e)
                {
                        base.OnPreRender (e);
-                       
-                       if (!Page.ClientScript.IsClientScriptIncludeRegistered (typeof(Menu), "Menu.js")) {
-                               string url = Page.ClientScript.GetWebResourceUrl (typeof(Menu), "Menu.js");
-                               Page.ClientScript.RegisterClientScriptInclude (typeof(Menu), "Menu.js", url);
-                       }
-                       
-                       string cmenu = ClientID + "_data";
-                       string script = String.Format (onPreRenderScript,
-                                                      cmenu,
-                                                      Page.IsMultiForm ? Page.theForm : "window",
-                                                      ClientScriptManager.GetScriptLiteral (DisappearAfter),
-                                                      ClientScriptManager.GetScriptLiteral (Orientation == Orientation.Vertical));                     
-
-                       if (DynamicHorizontalOffset != 0)
-                               script += String.Concat (cmenu, ".dho = ", ClientScriptManager.GetScriptLiteral (DynamicHorizontalOffset), ";\n");
-                       if (DynamicVerticalOffset != 0)
-                               script += String.Concat (cmenu, ".dvo = ", ClientScriptManager.GetScriptLiteral (DynamicVerticalOffset), ";\n");
-                       
-                       // The order in which styles are defined matters when more than one class
-                       // is assigned to an element
-                       RegisterStyle (PopOutBoxStyle);
-                       RegisterStyle (ControlStyle, ControlLinkStyle);
-                       
-                       if (staticMenuItemStyle != null)
-                               RegisterStyle (StaticMenuItemStyle, StaticMenuItemLinkStyle);
-
-                       if (staticMenuStyle != null)
-                               RegisterStyle (StaticMenuStyle);
-                       
-                       if (dynamicMenuItemStyle != null)
-                               RegisterStyle (DynamicMenuItemStyle, DynamicMenuItemLinkStyle);
-
-                       if (dynamicMenuStyle != null)
-                               RegisterStyle (DynamicMenuStyle);
-
-                       if (levelMenuItemStyles != null && levelMenuItemStyles.Count > 0) {
-                               levelMenuItemLinkStyles = new List<Style> (levelMenuItemStyles.Count);
-                               foreach (Style style in levelMenuItemStyles) {
-                                       Style linkStyle = new Style ();
-                                       levelMenuItemLinkStyles.Add (linkStyle);
-                                       RegisterStyle (style, linkStyle);
-                               }
-                       }
-               
-                       if (levelSubMenuStyles != null)
-                               foreach (Style style in levelSubMenuStyles)
-                                       RegisterStyle (style);
 
-                       if (staticSelectedStyle != null)
-                               RegisterStyle (staticSelectedStyle, StaticSelectedLinkStyle);
-                       
-                       if (dynamicSelectedStyle != null)
-                               RegisterStyle (dynamicSelectedStyle, DynamicSelectedLinkStyle);
-
-                       if (levelSelectedStyles != null && levelSelectedStyles.Count > 0) {
-                               levelSelectedLinkStyles = new List<Style> (levelSelectedStyles.Count);
-                               foreach (Style style in levelSelectedStyles) {
-                                       Style linkStyle = new Style ();
-                                       levelSelectedLinkStyles.Add (linkStyle);
-                                       RegisterStyle (style, linkStyle);
-                               }
-                       }
-                       
-                       if (staticHoverStyle != null) {
-                               if (Page.Header == null)
-                                       throw new InvalidOperationException ("Using Menu.StaticHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
-                               RegisterStyle (staticHoverStyle, StaticHoverLinkStyle);
-                               script += string.Concat (cmenu, ".staticHover = ", ClientScriptManager.GetScriptLiteral (staticHoverStyle.RegisteredCssClass), ";\n");
-                               script += string.Concat (cmenu, ".staticLinkHover = ", ClientScriptManager.GetScriptLiteral (StaticHoverLinkStyle.RegisteredCssClass), ";\n");
+                       string cmenu = ClientID + "_data";
+                       StringBuilder script = new StringBuilder ();
+                       Page page = Page;
+                       HtmlHead header;
+                       ClientScriptManager csm;
+
+                       if (page != null) {
+                               header = page.Header;
+                               csm = page.ClientScript;
+                       } else {
+                               header = null;
+                               csm = null;
                        }
                        
-                       if (dynamicHoverStyle != null) {
-                               if (Page.Header == null)
-                                       throw new InvalidOperationException ("Using Menu.DynamicHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
-                               RegisterStyle (dynamicHoverStyle, DynamicHoverLinkStyle);
-                               script += string.Concat (cmenu, ".dynamicHover = ", ClientScriptManager.GetScriptLiteral (dynamicHoverStyle.RegisteredCssClass), ";\n");
-                               script += string.Concat (cmenu, ".dynamicLinkHover = ", ClientScriptManager.GetScriptLiteral (DynamicHoverLinkStyle.RegisteredCssClass), ";\n");
-                       }
-
-                       Page.ClientScript.RegisterWebFormClientScript ();
-                       Page.ClientScript.RegisterStartupScript (typeof(Menu), ClientID, script, true);
+                       Renderer.PreRender (page, header, csm, cmenu, script);
 
+                       if (csm != null) {
+                               csm.RegisterWebFormClientScript ();
+                               csm.RegisterStartupScript (typeof(Menu), ClientID, script.ToString (), true);
+                       }
                }
 
                void InitializeDataBindings () {
@@ -1281,27 +1344,6 @@ namespace System.Web.UI.WebControls
                        else
                                bindings = null;
                }
-
-               string IncrementStyleClassName () {
-                       registeredStylesCounter++;
-                       return ClientID + "_" + registeredStylesCounter;
-               }
-
-               void RegisterStyle (Style baseStyle, Style linkStyle) {
-                       linkStyle.CopyTextStylesFrom (baseStyle);
-                       linkStyle.BorderStyle = BorderStyle.None;
-                       RegisterStyle (linkStyle);
-                       RegisterStyle (baseStyle);
-               }
-
-               void RegisterStyle (Style baseStyle)
-               {
-                       if (Page.Header == null)
-                               return;
-                       string className = IncrementStyleClassName ();
-                       baseStyle.SetRegisteredCssClass (className);
-                       Page.Header.StyleSheet.CreateStyleRule (baseStyle, this, "." + className);
-               }
                
                protected internal override void Render (HtmlTextWriter writer)
                {
@@ -1311,63 +1353,15 @@ namespace System.Web.UI.WebControls
                
                protected override void AddAttributesToRender (HtmlTextWriter writer)
                {
-                       writer.AddAttribute ("cellpadding", "0", false);
-                       writer.AddAttribute ("cellspacing", "0", false);
-                       writer.AddAttribute ("border", "0", false);
-                       if (Page.Header != null) {
-                               // styles are registered
-                               if (staticMenuStyle != null) {
-                                       AddCssClass (ControlStyle, staticMenuStyle.CssClass);
-                                       AddCssClass (ControlStyle, staticMenuStyle.RegisteredCssClass);
-                               }
-                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > 0) {
-                                       AddCssClass (ControlStyle, levelSubMenuStyles [0].CssClass);
-                                       AddCssClass (ControlStyle, levelSubMenuStyles [0].RegisteredCssClass);
-                               }
-                       }
-                       else {
-                               // styles are not registered
-                               if (staticMenuStyle != null){
-                                       ControlStyle.CopyFrom (staticMenuStyle);
-                               }
-                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > 0) {
-                                       ControlStyle.CopyFrom (levelSubMenuStyles [0]);
-                               }
-                       }
+                       Renderer.AddAttributesToRender (writer);
                        base.AddAttributesToRender (writer);
                }
-
-               void AddCssClass (Style style, string cssClass) {
-                       style.AddCssClass (cssClass);
-               }
                
                public override void RenderBeginTag (HtmlTextWriter writer)
                {
                        string skipLinkText = SkipLinkText;
-                       if (!String.IsNullOrEmpty (skipLinkText)) {
-                               // <a href="#ID_SkipLink">
-                               writer.AddAttribute (HtmlTextWriterAttribute.Href, "#" + ClientID + "_SkipLink");
-                               writer.RenderBeginTag (HtmlTextWriterTag.A);
-                               
-                               // <img alt="" height="0" width="0" src="" style="border-width:0px;"/>
-                               writer.AddAttribute (HtmlTextWriterAttribute.Alt, skipLinkText);
-                               writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
-                               writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
-                               
-                               Page page = Page;
-                               ClientScriptManager csm;
-                               
-                               if (page != null)
-                                       csm = page.ClientScript;
-                               else
-                                       csm = new ClientScriptManager (null);
-                               writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
-                               writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
-                               writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                               writer.RenderEndTag ();
-                               
-                               writer.RenderEndTag (); // </a>
-                       }
+                       if (!String.IsNullOrEmpty (skipLinkText))
+                               Renderer.RenderBeginTag (writer, skipLinkText);
                        base.RenderBeginTag (writer);
                }
                
@@ -1375,12 +1369,11 @@ namespace System.Web.UI.WebControls
                {
                        base.RenderEndTag (writer);
 
-                       if (StaticDisplayLevels == 1 && MaximumDynamicDisplayLevels > 0)
-                               RenderDynamicMenu (writer, Items);
-
+                       Renderer.RenderEndTag (writer);
+                       
                        string skipLinkText = SkipLinkText;
                        if (!String.IsNullOrEmpty (skipLinkText)) {
-                               writer.AddAttribute (HtmlTextWriterAttribute.Id, "SkipLink");
+                               writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_SkipLink");
                                writer.RenderBeginTag (HtmlTextWriterTag.A);
                                writer.RenderEndTag ();
                        }
@@ -1388,10 +1381,11 @@ namespace System.Web.UI.WebControls
                
                protected internal override void RenderContents (HtmlTextWriter writer)
                {
-                       RenderMenuBody (writer, Items, Orientation == Orientation.Vertical, false, false);
+                       Renderer.RenderContents (writer);
                }
 
-               void RenderDynamicMenu (HtmlTextWriter writer, MenuItemCollection items) {
+               internal void RenderDynamicMenu (HtmlTextWriter writer, MenuItemCollection items)
+               {
                        for (int n = 0; n < items.Count; n++) {
                                if (DisplayChildren (items [n])) {
                                        RenderDynamicMenu (writer, items [n]);
@@ -1545,108 +1539,22 @@ namespace System.Web.UI.WebControls
                        }
                }
 
-               void RenderMenuBeginTagAttributes (HtmlTextWriter writer, bool dynamic, int menuLevel) {
-                       writer.AddAttribute ("cellpadding", "0", false);
-                       writer.AddAttribute ("cellspacing", "0", false);
-                       writer.AddAttribute ("border", "0", false);
-
-                       if (!dynamic) {
-                               SubMenuStyle style = new SubMenuStyle ();
-                               FillMenuStyle (dynamic, menuLevel, style);
-                               style.AddAttributesToRender (writer);
-                       }
-               }
-
-               void FillMenuStyle (bool dynamic, int menuLevel, SubMenuStyle style) {
-                       if (Page.Header != null) {
-                               // styles are registered
-                               if (!dynamic && staticMenuStyle != null) {
-                                       AddCssClass (style, staticMenuStyle.CssClass);
-                                       AddCssClass (style, staticMenuStyle.RegisteredCssClass);
-                               }
-                               if (dynamic && dynamicMenuStyle != null) {
-                                       AddCssClass (style, dynamicMenuStyle.CssClass);
-                                       AddCssClass (style, dynamicMenuStyle.RegisteredCssClass);
-                               }
-                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > menuLevel) {
-                                       AddCssClass (style, levelSubMenuStyles [menuLevel].CssClass);
-                                       AddCssClass (style, levelSubMenuStyles [menuLevel].RegisteredCssClass);
-                               }
-                       }
-                       else {
-                               // styles are not registered
-                               if (!dynamic && staticMenuStyle != null) {
-                                       style.CopyFrom (staticMenuStyle);
-                               }
-                               if (dynamic && dynamicMenuStyle != null) {
-                                       style.CopyFrom (dynamicMenuStyle);
-                               }
-                               if (levelSubMenuStyles != null && levelSubMenuStyles.Count > menuLevel) {
-                                       style.CopyFrom (levelSubMenuStyles [menuLevel]);
-                               }
-                       }
-               }
-
-               void RenderMenu (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, int menuLevel, bool notLast)
-               {
-                       RenderMenuBeginTag (writer, dynamic, menuLevel);
-                       RenderMenuBody (writer, items, vertical, dynamic, notLast);
-                       RenderMenuEndTag (writer);
-               }
-               
-               void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
-               {
-                       RenderMenuBeginTagAttributes (writer, dynamic, menuLevel);
-                       writer.RenderBeginTag (HtmlTextWriterTag.Table);
-               }
-               
-               void RenderMenuEndTag (HtmlTextWriter writer)
+               internal void RenderMenu (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, int menuLevel, bool notLast)
                {
-                       writer.RenderEndTag ();
-               }
-
-               void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast) {
-                       if (!vertical)
-                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
-
-                       int count = items.Count;
-                       for (int n = 0; n < count; n++) {
-                               MenuItem item = items [n];
-                               Adapters.MenuAdapter adapter = Adapter as Adapters.MenuAdapter;
-                               if (adapter != null)
-                                       adapter.RenderItem (writer, item, n);
-                               else
-                                       RenderMenuItem (writer, item, (n + 1 == count) ? notLast : true, n == 0);
-                       }
-
-                       if (!vertical)
-                               writer.RenderEndTag (); // TR
-               }
-
-               void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing, bool vertical) {
-                       if (vertical) {
-                               writer.AddStyleAttribute ("height", itemSpacing.ToString ());
-                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
-                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                               writer.RenderEndTag ();
-                               writer.RenderEndTag ();
-                       }
-                       else {
-                               writer.AddStyleAttribute ("width", itemSpacing.ToString ());
-                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                               writer.RenderEndTag ();
-                       }
-               }
-               
-               bool IsDynamicItem (MenuItem item) {
-                       return item.Depth + 1 > StaticDisplayLevels;
+                       IMenuRenderer renderer = Renderer;
+                       
+                       renderer.RenderMenuBeginTag (writer, dynamic, menuLevel);
+                       renderer.RenderMenuBody (writer, items, vertical, dynamic, notLast);
+                       renderer.RenderMenuEndTag (writer, dynamic, menuLevel);
                }
 
-               bool DisplayChildren (MenuItem item) {
+               internal bool DisplayChildren (MenuItem item)
+               {
                        return (item.Depth + 1 < StaticDisplayLevels + MaximumDynamicDisplayLevels) && item.ChildItems.Count > 0;
                }
                
-               internal void RenderItem (HtmlTextWriter writer, MenuItem item, int position) {
+               internal void RenderItem (HtmlTextWriter writer, MenuItem item, int position)
+               {
                        // notLast should be true if item or any of its ancestors is not a
                        // last child.
                        bool notLast = false;
@@ -1659,314 +1567,18 @@ namespace System.Web.UI.WebControls
                                }
                                child = parent;
                        }
-                       
-                       RenderMenuItem (writer, item, notLast, position == 0);
-               }
-               
-               void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool notLast, bool isFirst) {
-                       bool displayChildren = DisplayChildren (item);
-                       bool dynamicChildren = displayChildren && (item.Depth + 1 >= StaticDisplayLevels);
-                       bool isDynamicItem = IsDynamicItem (item);
-                       bool vertical = (Orientation == Orientation.Vertical) || isDynamicItem;
-                       
-                       Unit itemSpacing = GetItemSpacing (item, isDynamicItem);
-
-                       if (itemSpacing != Unit.Empty && (item.Depth > 0 || !isFirst))
-                               RenderMenuItemSpacing (writer, itemSpacing, vertical);
-
-                       if(!String.IsNullOrEmpty(item.ToolTip))
-                               writer.AddAttribute (HtmlTextWriterAttribute.Title, item.ToolTip);
-                       if (vertical)
-                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
-
-                       string parentId = isDynamicItem ? "'" + item.Parent.Path + "'" : "null";
-                       if (dynamicChildren) {
-                               writer.AddAttribute ("onmouseover",
-                                                    "javascript:Menu_OverItem ('" + ClientID + "','" + item.Path + "'," + parentId + ")");
-                               writer.AddAttribute ("onmouseout",
-                                                    "javascript:Menu_OutItem ('" + ClientID + "','" + item.Path + "')");
-                       } else if (isDynamicItem) {
-                               writer.AddAttribute ("onmouseover",
-                                                    "javascript:Menu_OverDynamicLeafItem ('" + ClientID + "','" + item.Path + "'," + parentId + ")");
-                               writer.AddAttribute ("onmouseout",
-                                                    "javascript:Menu_OutItem ('" + ClientID + "','" + item.Path + "'," + parentId + ")");
-                       } else {
-                               writer.AddAttribute ("onmouseover",
-                                                    "javascript:Menu_OverStaticLeafItem ('" + ClientID + "','" + item.Path + "')");
-                               writer.AddAttribute ("onmouseout",
-                                                    "javascript:Menu_OutItem ('" + ClientID + "','" + item.Path + "')");
-                       }
-
-                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
-
-                       // Top separator image
-
-                       if (isDynamicItem && DynamicTopSeparatorImageUrl != "") {
-                               writer.AddAttribute ("src", ResolveClientUrl (DynamicTopSeparatorImageUrl));
-                               writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                               writer.RenderEndTag (); // IMG
-                       }
-                       else if (!isDynamicItem && StaticTopSeparatorImageUrl != "") {
-                               writer.AddAttribute ("src", ResolveClientUrl (StaticTopSeparatorImageUrl));
-                               writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                               writer.RenderEndTag (); // IMG
-                       }
-
-                       // Menu item box
-                       
-                       MenuItemStyle style = new MenuItemStyle ();
-                       if (Page.Header != null) {
-                               // styles are registered
-                               if (!isDynamicItem && staticMenuItemStyle != null) {
-                                       AddCssClass (style, staticMenuItemStyle.CssClass);
-                                       AddCssClass (style, staticMenuItemStyle.RegisteredCssClass);
-                               }
-                               if (isDynamicItem && dynamicMenuItemStyle != null) {
-                                       AddCssClass (style, dynamicMenuItemStyle.CssClass);
-                                       AddCssClass (style, dynamicMenuItemStyle.RegisteredCssClass);
-                               }
-                               if (levelMenuItemStyles != null && levelMenuItemStyles.Count > item.Depth) {
-                                       AddCssClass (style, levelMenuItemStyles [item.Depth].CssClass);
-                                       AddCssClass (style, levelMenuItemStyles [item.Depth].RegisteredCssClass);
-                               }
-                               if (item == SelectedItem) {
-                                       if (!isDynamicItem && staticSelectedStyle != null) {
-                                               AddCssClass (style, staticSelectedStyle.CssClass);
-                                               AddCssClass (style, staticSelectedStyle.RegisteredCssClass);
-                                       }
-                                       if (isDynamicItem && dynamicSelectedStyle != null) {
-                                               AddCssClass (style, dynamicSelectedStyle.CssClass);
-                                               AddCssClass (style, dynamicSelectedStyle.RegisteredCssClass);
-                                       }
-                                       if (levelSelectedStyles != null && levelSelectedStyles.Count > item.Depth) {
-                                               AddCssClass (style, levelSelectedStyles [item.Depth].CssClass);
-                                               AddCssClass (style, levelSelectedStyles [item.Depth].RegisteredCssClass);
-                                       }
-                               }
-                       }
-                       else {
-                               // styles are not registered
-                               if (!isDynamicItem && staticMenuItemStyle != null) {
-                                       style.CopyFrom (staticMenuItemStyle);
-                               }
-                               if (isDynamicItem && dynamicMenuItemStyle != null) {
-                                       style.CopyFrom (dynamicMenuItemStyle);
-                               }
-                               if (levelMenuItemStyles != null && levelMenuItemStyles.Count > item.Depth) {
-                                       style.CopyFrom (levelMenuItemStyles [item.Depth]);
-                               }
-                               if (item == SelectedItem) {
-                                       if (!isDynamicItem && staticSelectedStyle != null) {
-                                               style.CopyFrom (staticSelectedStyle);
-                                       }
-                                       if (isDynamicItem && dynamicSelectedStyle != null) {
-                                               style.CopyFrom (dynamicSelectedStyle);
-                                       }
-                                       if (levelSelectedStyles != null && levelSelectedStyles.Count > item.Depth) {
-                                               style.CopyFrom (levelSelectedStyles [item.Depth]);
-                                       }
-                               }
-                       }
-                       style.AddAttributesToRender (writer);
-
-                       writer.AddAttribute ("id", GetItemClientId (item, "i"));
-
-                       writer.AddAttribute ("cellpadding", "0", false);
-                       writer.AddAttribute ("cellspacing", "0", false);
-                       writer.AddAttribute ("border", "0", false);
-                       writer.AddAttribute ("width", "100%", false);
-                       writer.RenderBeginTag (HtmlTextWriterTag.Table);
-                       writer.RenderBeginTag (HtmlTextWriterTag.Tr);
-
-                       // Menu item text
-
-                       if (vertical)
-                               writer.AddStyleAttribute (HtmlTextWriterStyle.Width, "100%");
-                       if (!ItemWrap)
-                               writer.AddStyleAttribute ("white-space", "nowrap");
-                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
-
-                       RenderItemHref (writer, item);
-                       
-                       Style linkStyle = new Style ();
-                       if (Page.Header != null) {
-                               // styles are registered
-                               AddCssClass (linkStyle, ControlLinkStyle.RegisteredCssClass);
-
-                               if (!isDynamicItem && staticMenuItemStyle != null) {
-                                       AddCssClass (linkStyle, staticMenuItemStyle.CssClass);
-                                       AddCssClass (linkStyle, staticMenuItemLinkStyle.RegisteredCssClass);
-                               }
-                               if (isDynamicItem && dynamicMenuItemStyle != null) {
-                                       AddCssClass (linkStyle, dynamicMenuItemStyle.CssClass);
-                                       AddCssClass (linkStyle, dynamicMenuItemLinkStyle.RegisteredCssClass);
-                               }
-                               if (levelMenuItemStyles != null && levelMenuItemStyles.Count > item.Depth) {
-                                       AddCssClass (linkStyle, levelMenuItemStyles [item.Depth].CssClass);
-                                       AddCssClass (linkStyle, levelMenuItemLinkStyles [item.Depth].RegisteredCssClass);
-                               }
-                               if (item == SelectedItem) {
-                                       if (!isDynamicItem && staticSelectedStyle != null) {
-                                               AddCssClass (linkStyle, staticSelectedStyle.CssClass);
-                                               AddCssClass (linkStyle, staticSelectedLinkStyle.RegisteredCssClass);
-                                       }
-                                       if (isDynamicItem && dynamicSelectedStyle != null) {
-                                               AddCssClass (linkStyle, dynamicSelectedStyle.CssClass);
-                                               AddCssClass (linkStyle, dynamicSelectedLinkStyle.RegisteredCssClass);
-                                       }
-                                       if (levelSelectedStyles != null && levelSelectedStyles.Count > item.Depth) {
-                                               AddCssClass (linkStyle, levelSelectedStyles [item.Depth].CssClass);
-                                               AddCssClass (linkStyle, levelSelectedLinkStyles [item.Depth].RegisteredCssClass);
-                                       }
-                               }
-                       }
-                       else {
-                               // styles are not registered
-                               linkStyle.CopyFrom (ControlLinkStyle);
-
-                               if (!isDynamicItem && staticMenuItemStyle != null) {
-                                       linkStyle.CopyFrom (staticMenuItemLinkStyle);
-                               }
-                               if (isDynamicItem && dynamicMenuItemStyle != null) {
-                                       linkStyle.CopyFrom (dynamicMenuItemLinkStyle);
-                               }
-                               if (levelMenuItemStyles != null && levelMenuItemStyles.Count > item.Depth) {
-                                       linkStyle.CopyFrom (levelMenuItemLinkStyles [item.Depth]);
-                               }
-                               if (item == SelectedItem) {
-                                       if (!isDynamicItem && staticSelectedStyle != null) {
-                                               linkStyle.CopyFrom (staticSelectedLinkStyle);
-                                       }
-                                       if (isDynamicItem && dynamicSelectedStyle != null) {
-                                               linkStyle.CopyFrom (dynamicSelectedLinkStyle);
-                                       }
-                                       if (levelSelectedStyles != null && levelSelectedStyles.Count > item.Depth) {
-                                               linkStyle.CopyFrom (levelSelectedLinkStyles [item.Depth]);
-                                       }
-                               }
-
-                               linkStyle.AlwaysRenderTextDecoration = true;
-                       }
-                       linkStyle.AddAttributesToRender (writer);
-
-                       writer.AddAttribute ("id", GetItemClientId (item, "l"));
-                       
-                       if (item.Depth > 0 && !isDynamicItem) {
-                               double value;
-#if NET_4_0
-                               Unit unit = StaticSubMenuIndent;
-                               if (unit == Unit.Empty)
-                                       value = 16;
-                               else
-                                       value = unit.Value;
-#else
-                               value = StaticSubMenuIndent.Value;
-#endif
-                               Unit indent = new Unit (value * item.Depth, StaticSubMenuIndent.Type);
-                               writer.AddStyleAttribute (HtmlTextWriterStyle.MarginLeft, indent.ToString ());
-                       }
-                       writer.RenderBeginTag (HtmlTextWriterTag.A);
-                       RenderItemContent (writer, item, isDynamicItem);
-                       writer.RenderEndTag (); // A
-
-                       writer.RenderEndTag (); // TD
-
-                       // Popup image
-
-                       if (dynamicChildren) {
-                               string popOutImage = GetPopOutImage (item, isDynamicItem);
-                               if (popOutImage != null) {
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                                       writer.AddAttribute ("src", ResolveClientUrl (popOutImage));
-                                       writer.AddAttribute ("border", "0");
-                                       string toolTip = String.Format (isDynamicItem ? DynamicPopOutImageTextFormatString : StaticPopOutImageTextFormatString, item.Text);
-                                       writer.AddAttribute (HtmlTextWriterAttribute.Alt, toolTip);
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                                       writer.RenderEndTag (); // IMG
-                                       writer.RenderEndTag (); // TD
-                               }
-                       }
-
-                       writer.RenderEndTag (); // TR
-                       writer.RenderEndTag (); // TABLE
-                       
-                       writer.RenderEndTag (); // TD
-
-                       if (!vertical && itemSpacing == Unit.Empty && (notLast || (displayChildren && !dynamicChildren))) {
-                               writer.AddStyleAttribute ("width", "3px");
-                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                               writer.RenderEndTag ();
-                       }
-                       
-                       // Bottom separator image
-                       string separatorImg = item.SeparatorImageUrl;
-                       if (separatorImg.Length == 0) {
-                               if (isDynamicItem)
-                                       separatorImg = DynamicBottomSeparatorImageUrl;
-                               else
-                                       separatorImg = StaticBottomSeparatorImageUrl;
-                       }
-                       if (separatorImg.Length > 0) {
-                               if (!vertical)
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                               writer.AddAttribute ("src", ResolveClientUrl (separatorImg));
-                               writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                               writer.RenderEndTag (); // IMG
-                               if (!vertical)
-                                       writer.RenderEndTag (); // TD
-                       }
-
-                       if (vertical)
-                               writer.RenderEndTag (); // TR
-
-                       if (itemSpacing != Unit.Empty)
-                               RenderMenuItemSpacing (writer, itemSpacing, vertical);
-
-                       // Submenu
-
-                       if (displayChildren && !dynamicChildren) {
-                               if (vertical)
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Tr);
-                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
-                               writer.AddAttribute ("width", "100%");
-                               RenderMenu (writer, item.ChildItems, Orientation == Orientation.Vertical, false, item.Depth + 1, notLast);
-                               if (item.Depth + 2 == StaticDisplayLevels)
-                                       RenderDynamicMenu (writer, item.ChildItems);
-                               writer.RenderEndTag (); // TD
-                               if (vertical)
-                                       writer.RenderEndTag (); // TR
-                       }
-
+                       Renderer.RenderMenuItem (writer, item, notLast, position == 0);
                }
 
-               void RenderItemContent (HtmlTextWriter writer, MenuItem item, bool isDynamicItem) {
-                       if (_menuItemControls!=null && _menuItemControls [item] != null) {
+               internal void RenderItemContent (HtmlTextWriter writer, MenuItem item, bool isDynamicItem)
+               {
+                       if (_menuItemControls!=null && _menuItemControls [item] != null)
                                ((Control) _menuItemControls [item]).Render (writer);
-                       }
-                       else {
-
-                               if (!String.IsNullOrEmpty (item.ImageUrl)) {
-                                       writer.AddAttribute (HtmlTextWriterAttribute.Src, ResolveClientUrl (item.ImageUrl));
-                                       writer.AddAttribute (HtmlTextWriterAttribute.Alt, item.ToolTip);
-                                       writer.AddStyleAttribute (HtmlTextWriterStyle.BorderStyle, "none");
-                                       writer.AddStyleAttribute (HtmlTextWriterStyle.VerticalAlign, "middle");
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
-                                       writer.RenderEndTag (); // IMG
-                               }
 
-                               if (isDynamicItem && DynamicItemFormatString.Length > 0) {
-                                       writer.Write (String.Format (DynamicItemFormatString, item.Text));
-                               }
-                               else if (!isDynamicItem && StaticItemFormatString.Length > 0) {
-                                       writer.Write (String.Format (StaticItemFormatString, item.Text));
-                               }
-                               else {
-                                       writer.Write (item.Text);
-                               }
-                       }
+                       Renderer.RenderItemContent (writer, item, isDynamicItem);
                }
                        
-               Unit GetItemSpacing (MenuItem item, bool dynamic)
+               internal Unit GetItemSpacing (MenuItem item, bool dynamic)
                {
                        Unit itemSpacing = Unit.Empty;
                        
@@ -1996,61 +1608,6 @@ namespace System.Web.UI.WebControls
                        else
                                return Unit.Empty;
                }
-               
-               string GetPopOutImage (MenuItem item, bool isDynamicItem)
-               {
-                       if (item.PopOutImageUrl != "")
-                               return item.PopOutImageUrl;
-
-                       if (isDynamicItem) {
-                               if (DynamicPopOutImageUrl != "")
-                                       return DynamicPopOutImageUrl;
-                               if (DynamicEnableDefaultPopOutImage)
-                                       return Page.ClientScript.GetWebResourceUrl (typeof (Menu), "arrow_plus.gif");
-                       } else {
-                               if (StaticPopOutImageUrl != "")
-                                       return StaticPopOutImageUrl;
-                               if (StaticEnableDefaultPopOutImage)
-                                       return Page.ClientScript.GetWebResourceUrl (typeof (Menu), "arrow_plus.gif");
-                       }
-                       return null;
-               }
-                       
-               void RenderItemHref (HtmlTextWriter writer, MenuItem item)
-               {
-                       if (!item.BranchEnabled) {
-                               writer.AddAttribute ("disabled", "true", false);
-                       }
-                       else if (!item.Selectable) {
-                               writer.AddAttribute ("href", "#", false);
-                               writer.AddStyleAttribute ("cursor", "text");
-                       }
-                       else if (item.NavigateUrl != "") {
-                               string target = item.Target != "" ? item.Target : Target;
-#if TARGET_J2EE
-                               string navUrl = ResolveClientUrl (item.NavigateUrl, String.Compare (target, "_blank", StringComparison.InvariantCultureIgnoreCase) != 0);
-#else
-                               string navUrl = ResolveClientUrl (item.NavigateUrl);
-#endif
-                               writer.AddAttribute ("href", navUrl);
-                               if (target != "")
-                                       writer.AddAttribute ("target", target);
-                       }
-                       else {
-                               writer.AddAttribute ("href", GetClientEvent (item));
-                       }
-
-               }
-               
-               string GetItemClientId (MenuItem item, string sufix)
-               {
-                       return ClientID + "_" + item.Path + sufix;
-               }
-               
-               string GetClientEvent (MenuItem item)
-               {
-                       return Page.ClientScript.GetPostBackClientHyperlink (this, item.Path, true);
-               }
 
                class MenuTemplateWriter : TextWriter
                {
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuListRenderer.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MenuListRenderer.cs
new file mode 100644 (file)
index 0000000..174d2de
--- /dev/null
@@ -0,0 +1,404 @@
+//
+// Authors:
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2010 Novell, Inc (http://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.
+//
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Globalization;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+
+namespace System.Web.UI.WebControls
+{
+       sealed class MenuListRenderer : BaseMenuRenderer
+       {
+               bool haveDynamicPopOut;
+               
+               public override HtmlTextWriterTag Tag {
+                       get { return HtmlTextWriterTag.Div; }
+                       
+               }
+               
+               public MenuListRenderer (Menu owner)
+                       : base (owner)
+               {
+               }
+
+               public override void PreRender (Page page, HtmlHead head, ClientScriptManager csm, string cmenu, StringBuilder script)
+               {
+                       Menu owner = Owner;
+                       script.AppendFormat ("new Sys.WebForms.Menu ({{ element: '{0}', disappearAfter: {1}, orientation: '{2}', tabIndex: {3}, disabled: {4} }});",
+                                            owner.ClientID,
+                                            ClientScriptManager.GetScriptLiteral (owner.DisappearAfter),
+                                            owner.Orientation.ToString ().ToLowerInvariant (),
+                                            ClientScriptManager.GetScriptLiteral (owner.TabIndex),
+                                            (!owner.Enabled).ToString ().ToLowerInvariant ());
+
+                       Type mt = typeof (Menu);
+                       if (!csm.IsClientScriptIncludeRegistered (mt, "MenuModern.js")) {
+                               string url = csm.GetWebResourceUrl (mt, "MenuModern.js");
+                               csm.RegisterClientScriptInclude (mt, "MenuModern.js", url);
+                       }
+                       
+                       if (!owner.IncludeStyleBlock)
+                               return;
+                       
+                       if (head == null)
+                               throw new InvalidOperationException ("Using Menu.IncludeStyleBlock requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
+
+                       StyleBlock block = new StyleBlock (owner.ClientID);
+                       Style style = owner.ControlStyle;
+                       bool horizontal = owner.Orientation == Orientation.Horizontal;
+                       if (style != null)
+                               block.RegisterStyle (style);
+                       
+                       // #MenuId img.icon { border-style:none;vertical-align:middle; }
+                       block.RegisterStyle (HtmlTextWriterStyle.BorderStyle, "none", "img.icon")
+                               .Add (HtmlTextWriterStyle.VerticalAlign, "middle");
+
+                       // #MenuId img.separator { border-style:none;display:block; }
+                       block.RegisterStyle (HtmlTextWriterStyle.BorderStyle, "none", "img.separator")
+                               .Add (HtmlTextWriterStyle.Display, "block");
+
+                       // #MenuId img.horizontal-separator { border-style:none;vertical-align:middle; }
+                       if (horizontal)
+                               block.RegisterStyle (HtmlTextWriterStyle.BorderStyle, "none", "img.horizontal-separator")
+                                       .Add (HtmlTextWriterStyle.VerticalAlign, "middle");
+                       
+                       // #MenuId ul { list-style:none;margin:0;padding:0;width:auto; }
+                       block.RegisterStyle (HtmlTextWriterStyle.ListStyleType, "none", "ul")
+                               .Add (HtmlTextWriterStyle.Margin, "0")
+                               .Add (HtmlTextWriterStyle.Padding, "0")
+                               .Add (HtmlTextWriterStyle.Width, "auto");
+
+                       SubMenuStyle sms = owner.StaticMenuStyleInternal;
+                       if (sms != null) {
+                               // #MenuId ul.static { ... }
+                               block.RegisterStyle (sms, "ul.static");
+                       }
+
+                       // #MenuId ul.dynamic { ...; z-index:1; ... }
+                       NamedCssStyleCollection css = block.RegisterStyle ("ul.dynamic");
+                       sms = owner.DynamicMenuStyleInternal;
+                       if (sms != null) {
+                               sms.ForeColor = Color.Empty;
+                               css.Add (sms);
+                       }
+                       
+                       css.Add (HtmlTextWriterStyle.ZIndex, "1");
+                       int num = owner.DynamicHorizontalOffset;
+                       if (num != 0)
+                               css.Add (HtmlTextWriterStyle.MarginLeft, num + "px");
+                       num = owner.DynamicVerticalOffset;
+                       if (num != 0)
+                               css.Add (HtmlTextWriterStyle.MarginTop, num + "px");
+
+                       // BUG: rendering of LevelSubMenuStyles throws InvalidCastException on .NET
+                       // but I suspect the code it is supposed to generate is as follows:
+                       //
+                       // #MenuId ul.levelX { ... }
+                       //
+                       // so we will just ignore the bug and go with the above code.
+                       RenderLevelStyles (block, num, owner.LevelSubMenuStyles, "ul.level");
+                       
+                       // #MenuId a { text-decoration:none;white-space:nowrap;display:block; }
+                       block.RegisterStyle (HtmlTextWriterStyle.TextDecoration, "none", "a")
+                               .Add (HtmlTextWriterStyle.WhiteSpace, "nowrap")
+                               .Add (HtmlTextWriterStyle.Display, "block");
+
+                       // #MenuId a.static { ... }
+                       RenderAnchorStyle (block, owner.StaticMenuItemStyleInternal, "a.static");
+                       
+                       // #MenuId a.popout { background-image:url("...");background-repeat:no-repeat;background-position:right center;padding-right:14px; }
+                       bool needDynamicPopOut = false;
+                       string str = owner.StaticPopOutImageUrl;
+
+                       css = null;
+                       string urlFormat = "url(\"{0}\")";
+                       if (String.IsNullOrEmpty (str)) {
+                               if (owner.StaticEnableDefaultPopOutImage)
+                                       css = block.RegisterStyle (HtmlTextWriterStyle.BackgroundImage, String.Format (urlFormat, GetArrowResourceUrl (owner)), "a.popout");
+                               else
+                                       needDynamicPopOut = true;
+                       } else {
+                               css = block.RegisterStyle (HtmlTextWriterStyle.BackgroundImage, String.Format (urlFormat, str), "a.popout");
+                               needDynamicPopOut = true;
+                       }
+                       
+                       if (css != null)
+                               css.Add ("background-repeat", "no-repeat")
+                                       .Add ("background-position", "right center")
+                                       .Add (HtmlTextWriterStyle.PaddingRight, "14px");
+
+                       // #MenuId a.popout-dynamic { background:url("...") no-repeat right center;padding-right:14px; }
+                       str = owner.DynamicPopOutImageUrl;
+                       bool haveDynamicUrl = !String.IsNullOrEmpty (str);
+                       css = null;
+                       if (needDynamicPopOut || haveDynamicUrl) {
+                               urlFormat = "url(\"{0}\") no-repeat right center";
+                               if (!haveDynamicUrl) {
+                                       if (owner.DynamicEnableDefaultPopOutImage)
+                                               css = block.RegisterStyle (HtmlTextWriterStyle.BackgroundImage, String.Format (urlFormat, GetArrowResourceUrl (owner)), "a.popout-dynamic");
+                               } else
+                                       css = block.RegisterStyle (HtmlTextWriterStyle.BackgroundImage, String.Format (urlFormat, str), "a.popout-dynamic");
+                       }
+                       if (css != null) {
+                               haveDynamicPopOut = true;
+                               css.Add (HtmlTextWriterStyle.PaddingRight, "14px");
+                       }
+
+                       // #MenuId a.dynamic { ... }
+                       RenderAnchorStyle (block, owner.DynamicMenuItemStyleInternal, "a.dynamic");
+                       
+                       num = owner.StaticDisplayLevels;
+                       Unit ssmi = owner.StaticSubMenuIndent;
+                       string unitName;
+                       double indent;
+                               
+                       if (ssmi == Unit.Empty) {
+                               unitName = "em";
+                               indent = 1;
+                       } else {
+                               unitName = Unit.GetExtension (ssmi.Type);
+                               indent = ssmi.Value;
+                       }
+
+                       // #MenuId a.levelX { ... }
+                       RenderLevelStyles (block, num, owner.LevelMenuItemStyles, "a.level", unitName, indent);
+
+                       // #MenuId a.selected.levelX { ... }
+                       RenderLevelStyles (block, num, owner.LevelSelectedStyles, "a.selected.level");
+
+                       // #MenuId a.static.selected { ...;text-decoration:none; }
+                       RenderAnchorStyle (block, owner.StaticSelectedStyleInternal, "a.static.selected");
+                       
+                       // #MenuId a.dynamic.selected { ...;text-decoration:none;border-style:none; }
+                       RenderAnchorStyle (block, owner.DynamicSelectedStyleInternal, "a.dynamic.selected");
+
+                       // #MenuId a.static.highlighted { ... }
+                       style = owner.StaticHoverStyleInternal;
+                       if (style != null)
+                               block.RegisterStyle (style, "a.static.highlighted");
+                       
+                       // #MenuId a.dynamic.highlighted { ... }
+                       style = owner.DynamicHoverStyleInternal;
+                       if (style != null)
+                               block.RegisterStyle (style, "a.dynamic.highlighted");
+                       
+                       head.Controls.Add (block);
+               }
+               
+               public override void RenderBeginTag (HtmlTextWriter writer, string skipLinkText)
+               {
+                       Menu owner = Owner;
+                       
+                       // <a href="#ID_SkipLink">
+                       writer.AddAttribute (HtmlTextWriterAttribute.Href, "#" + owner.ClientID + "_SkipLink");
+                       writer.RenderBeginTag (HtmlTextWriterTag.A);
+                               
+                       // <img alt="" height="0" width="0" src="" style="border-width:0px;"/>
+                       writer.AddAttribute (HtmlTextWriterAttribute.Alt, skipLinkText);
+                       Page page = owner.Page;
+                       ClientScriptManager csm = page != null ? page.ClientScript : new ClientScriptManager (null);
+                               
+                       writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
+                       writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
+                       writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
+                       
+                       writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
+                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
+                       writer.RenderEndTag ();
+                               
+                       writer.RenderEndTag (); // </a>
+               }
+               
+               public override void RenderEndTag (HtmlTextWriter writer)
+               {
+               }
+               
+               public override void AddAttributesToRender (HtmlTextWriter writer)
+               {
+                       // do nothing
+               }
+
+               public override void RenderContents (HtmlTextWriter writer)
+               {
+                       Menu owner = Owner;
+                       MenuItemCollection items = owner.Items;
+                       owner.RenderMenu (writer, items, owner.Orientation == Orientation.Vertical, false, 0, items.Count > 1);
+               }
+               
+               public override void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
+               {
+                       if (dynamic || menuLevel == 0) {
+                               var style = new SubMenuStyle ();
+                               AddCssClass (style, "level" + (menuLevel + 1));
+                               FillMenuStyle (null, dynamic, menuLevel, style);
+                               style.AddAttributesToRender (writer);
+                               writer.RenderBeginTag (HtmlTextWriterTag.Ul);
+                       }
+               }
+
+               public override void RenderMenuEndTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
+               {
+                       if (dynamic || menuLevel == 0)
+                               base.RenderMenuEndTag (writer, dynamic, menuLevel);
+               }
+               
+               public override void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast)
+               {
+                       Menu owner = Owner;
+                       int count = items.Count;
+                       var oc = new OwnerContext (this);
+                       
+                       for (int n = 0; n < count; n++) {
+                               MenuItem item = items [n];
+                               Adapters.MenuAdapter adapter = owner.Adapter as Adapters.MenuAdapter;
+                               if (adapter != null)
+                                       adapter.RenderItem (writer, item, n);
+                               else
+                                       RenderMenuItem (writer, item, vertical, (n + 1) == count ? notLast : true, n == 0, oc);
+                       }
+               }
+
+               protected override void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool vertical, bool notLast, bool isFirst, OwnerContext oc)
+               {
+                       Menu owner = Owner;
+                       string clientID = oc.ClientID;
+                       bool displayChildren = owner.DisplayChildren (item);
+                       bool isDynamicItem = IsDynamicItem (owner, item);
+                       int itemLevel = item.Depth + 1;
+                       string str;
+                       
+                       writer.RenderBeginTag (HtmlTextWriterTag.Li);
+
+                       if (isDynamicItem)
+                               RenderSeparatorImage (owner, writer, oc.DynamicTopSeparatorImageUrl, true);
+                       else
+                               RenderSeparatorImage (owner, writer, oc.StaticTopSeparatorImageUrl, true);
+                       
+                       var linkStyle = new Style ();
+                       if (displayChildren && (isDynamicItem || itemLevel >= oc.StaticDisplayLevels))
+                               AddCssClass (linkStyle, isDynamicItem && haveDynamicPopOut ? "popout-dynamic" : "popout");
+                       AddCssClass (linkStyle, "level" + itemLevel);
+
+                       MenuItemStyleCollection levelStyles = oc.LevelMenuItemStyles;
+                       if (levelStyles != null && levelStyles.Count >= itemLevel) {
+                               MenuItemStyle style = levelStyles [itemLevel - 1];
+                               string cssClass = style.CssClass;
+                               if (!String.IsNullOrEmpty (cssClass))
+                                       AddCssClass (linkStyle, cssClass);
+                       }
+
+                       if (owner.SelectedItem == item)
+                               AddCssClass (linkStyle, "selected");
+                       
+                       str = item.ToolTip;
+                       if (!String.IsNullOrEmpty (str))
+                               writer.AddAttribute ("title", str);
+                       linkStyle.AddAttributesToRender (writer);
+                       RenderItemHref (owner, writer, item);
+                       writer.RenderBeginTag (HtmlTextWriterTag.A);
+                       owner.RenderItemContent (writer, item, isDynamicItem);
+                       writer.RenderEndTag ();
+
+                       str = item.SeparatorImageUrl;
+                       if (String.IsNullOrEmpty (str)) {
+                               if (isDynamicItem)
+                                       str = oc.DynamicBottomSeparatorImageUrl;
+                               else
+                                       str = oc.StaticBottomSeparatorImageUrl;
+                       }
+                       RenderSeparatorImage (owner, writer, str, true);
+
+                       // if (itemLevel == 1)
+                       //      writer.RenderEndTag (); // </li>
+                       
+                       if (displayChildren)
+                               owner.RenderMenu (writer, item.ChildItems, vertical, isDynamicItem, itemLevel, notLast);
+
+                       if (itemLevel > 1)
+                               writer.RenderEndTag (); // </li>
+               }
+
+               public override bool IsDynamicItem (Menu owner, MenuItem item)
+               {
+                       if (owner == null)
+                               throw new ArgumentNullException ("owner");
+
+                       if (item == null)
+                               throw new ArgumentNullException ("item");
+                       
+                       return item.Depth + 1 >= Owner.StaticDisplayLevels;
+               }
+               
+               NamedCssStyleCollection RenderAnchorStyle (StyleBlock block, Style style, string styleName)
+               {
+                       if (style == null || block == null)
+                               return null;
+
+                       style.AlwaysRenderTextDecoration = true;
+                       NamedCssStyleCollection css = block.RegisterStyle (style, styleName);
+                       if (style.BorderStyle == BorderStyle.NotSet)
+                               css.Add (HtmlTextWriterStyle.BorderStyle, "none");
+
+                       return css;
+               }
+
+               void RenderLevelStyles (StyleBlock block, int num, IList levelStyles, string name, string unitName = null, double indent = 0)
+               {
+                       int stylesCount = levelStyles != null ? levelStyles.Count : 0;
+                       bool haveStyles = stylesCount > 0;
+                       if (!haveStyles || block == null)
+                               return;
+
+                       NamedCssStyleCollection css;
+                       Style style;
+                       bool haveIndent = !String.IsNullOrEmpty (unitName) && indent != 0;
+                       for (int i = 0; i < stylesCount; i++) {
+                               if ((i == 0 && !haveStyles))
+                                       continue;
+                               
+                               css = block.RegisterStyle (name + (i + 1));
+                               if (haveStyles && stylesCount > i) {
+                                       style = levelStyles [i] as Style;
+                                       if (style != null) {
+                                               style.AlwaysRenderTextDecoration = true;
+                                               css.CopyFrom (style.GetStyleAttributes (null));
+                                       }
+                               }
+                               
+                               if (haveIndent && i > 0 && i < num) {
+                                       css.Add (HtmlTextWriterStyle.PaddingLeft, indent.ToString (CultureInfo.InvariantCulture) + unitName);
+                                       indent += indent;
+                               }
+                       }
+               }
+       }
+}
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuModern.js b/mcs/class/System.Web/System.Web.UI.WebControls/MenuModern.js
new file mode 100644 (file)
index 0000000..ee9a035
--- /dev/null
@@ -0,0 +1,400 @@
+/*
+ * Authors:
+ *     Marek Habersack <grendel@twistedcode.net>
+ *
+ * (C) 2010 Novell, Inc (http: *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.
+ *
+ * This code serves only the List rendering mode of the Menu control in Mono
+ *
+ */
+if (!window.Sys) { window.Sys = {}; }
+if (!Sys.WebForms) { Sys.WebForms = {}; }
+
+Sys.WebForms.Menu = function (options)
+{
+       if (options == null)
+               throw "Sys.WebForms.Menu constructor requires options to be not null.";
+
+       if (options.element == null)
+               throw "options.element is required.";
+
+       if (options.orientation == null)
+               throw "options.orientation is required.";
+
+       if (typeof (options.element) == "string")
+               this.menuID = options.element;
+       else
+               this.mainElement = options.element;
+
+       this.disappearAfter = options.disappearAfter || 500;
+       this.orientation = options.orientation;
+       this.tabIndex = options.tabIndex || 0;
+       this.disabled = options.disabled || false;
+       this.level = options.level || 0;
+       this.menuItemIndex = 0;
+
+       if (this.level != 0) {
+               if (options.parentMenu == null)
+                       throw "options.parentMenu is required for all submenus.";
+
+               this.parentMenu = options.parentMenu;
+       }
+
+       if (this.mainElement == null) {
+               this.mainElement = document.getElementById (this.menuID);
+               if (this.mainElement == null)
+                       throw "Unable to find menu element with id '" + this.menuID + "'.";
+
+               if (this.mainElement.tagName != "DIV")
+                       throw "This script must be used only when the menu containing element is DIV.";
+       }
+
+       /* Due to the way we generate the menu in the list mode, every submenu other than the root one is dynamic */
+       if (this.level > 1) {
+               this.menuType = "dynamic";
+               if (options.parentMenu == null)
+                       throw "options.parent is required for all submenus.";
+
+               var subMenuId = Sys.WebForms.Menu.Helpers.getNextSubMenuId ();
+               this.parentMenu = options.parentMenu;
+               this.orientation = this.parentMenu.orientation;
+               this.path = this.parentMenu.path + subMenuId;
+               this.menuID = this.parentMenu.menuID;
+               if (this.mainElement.id == null || this.mainElement.id == "")
+                       this.mainElement.id = this.menuID + ":submenu:" + subMenuId;
+       } else {
+               this.menuType = "static";
+               if (this.level == 1) {
+                       this.menuID = this.parentMenu.menuID;
+                       this.orientation = this.parentMenu.orientation;
+               }
+               this.parentMenu = null;
+               this.path = "0";
+               this.mainElement.setAttribute ("tabindex", this.tabIndex);
+               this.mainElement.setAttribute ("role", this.orientation == "vertical" ? "menu" : "menubar");
+               with (this.mainElement.style) {
+                       width = "auto";
+                       position = "relative";
+               }
+       }
+
+       if (this.level > 0) {
+               Sys.WebForms.Menu.Helpers.appendCssClass (this.mainElement, this.menuType);
+       }
+
+       if (this.level <= 1)
+               Sys.WebForms.Menu.Helpers.setFloat (this.mainElement, "left");
+
+       this.loadItems ();
+}
+
+Sys.WebForms.Menu.Helpers = {
+       __subMenuCounter: 0,
+       __menuItems: [],
+       __popupToClose: null,
+
+       setPopupToClose: function (element) {
+               this.__popupToClose = element;
+       },
+
+       getPopupToClose: function () {
+               return this.__popupToClose;
+       },
+
+       setFloat: function (element, side) {
+               /* For standards-compliant browsers */
+               element.style.cssFloat = "left";
+
+               /* For IE */
+               element.style.styleFloat = "left";
+       },
+
+       appendCssClass: function (element, className) {
+               if (element == null || className == null)
+                       return;
+
+               var cname = element.className;
+               if (cname == null || cname == "")
+                       cname = className;
+               else
+                       cname += " " + className;
+
+               element.className = cname;
+       },
+
+       getNextSubMenuId: function () {
+               return ++this.__subMenuCounter;
+       },
+
+       addMenuItem: function (item) {
+               if (item == null)
+                       return;
+
+               if (!(item instanceof Sys.WebForms.MenuItem))
+                       throw "item must be an instance of Sys.WebForms.MenuItem";
+
+               if (this.__menuItems [item.path] != null)
+                       throw "item already exists (path " + item.path + ")";
+
+               this.__menuItems [item.path] = item;
+       },
+
+       getMenuItem: function (element) {
+               if (element == null)
+                       return null;
+
+               var itemPath = element ["__MonoMenuItemPath"];
+               if (itemPath == null)
+                       return null;
+
+               return this.__menuItems [itemPath];
+       },
+
+       addEventHandler: function (element, eventType, handler, capture) {
+               /* There's also element.attachEvent, but it changes handler semantics on IE, so we don't
+                * even take it into consideration.
+                */
+               if (element.addEventListener)
+                       element.addEventListener(eventType, handler, !!capture);
+               else
+                       element ["on" + eventType] = handler;
+       }
+};
+
+Sys.WebForms.Menu.prototype.loadItems = function ()
+{
+       var children = this.mainElement.childNodes;
+       var count = children.length;
+       var child;
+
+       for (var i = 0; i < count; i++) {
+               child = children [i];
+               if (child.nodeType != 1)
+                       continue;
+
+               if (child.tagName == "UL") {
+                       var submenu = new Sys.WebForms.Menu ({ element: child, disappearAfter: this.disappearAfter, orientation: this.orientation,
+                                                              disabled: this.disabled, level: this.level + 1, tabIndex: this.tabIndex, parentMenu: this});
+               } else if (child.tagName == "LI") {
+                       var menuItem = new Sys.WebForms.MenuItem ({ element: child, menuType: this.menuType, disappearAfter: this.disappearAfter, orientation: this.orientation,
+                                                                   disabled: this.disabled, level: this.level + 1, tabIndex: this.tabIndex, parentMenu: this});
+               }
+       }
+}
+
+Sys.WebForms.Menu.prototype.getNextMenuItemId = function ()
+{
+       return ++this.menuItemIndex;
+}
+
+Sys.WebForms.MenuItem = function (options)
+{
+       if (options == null)
+               throw "Sys.WebForms.MenuItem constructor requires options to be not null.";
+
+       if (options.element == null)
+               throw "options.element must be set.";
+
+       if (options.menuType == null)
+               throw "options.menuType must be set.";
+
+       if (options.parentMenu == null)
+               throw "options.parentMenu is required.";
+
+       this.element = options.element;
+       this.menuType = options.menuType;
+       this.parentMenu = options.parentMenu;
+       this.path = this.parentMenu.path + this.parentMenu.getNextMenuItemId ();
+
+       var children = this.element.childNodes;
+       var child;
+       var subMenu = null;
+
+       for (var i = 0; i < children.length; i++) {
+               child = children [i];
+               if (child.nodeType != 1)
+                       continue;
+
+               switch (child.tagName) {
+                       case "A":
+                               Sys.WebForms.Menu.Helpers.appendCssClass (child, this.menuType);
+                               child.setAttribute ("tabindex", "-1");
+                               break;
+
+                       case "UL":
+                               this.subMenu = new Sys.WebForms.Menu ({ element: child, disappearAfter: options.disappearAfter, orientation: options.orientation,
+                                                                       disabled: options.disabled, level: options.level, tabIndex: options.tabIndex, parentMenu: options.parentMenu});
+                               if (this.subMenu.menuType == "dynamic") {
+                                       var topValue;
+                                       var leftValue;
+
+                                       if (this.subMenu.orientation == "horizontal" && this.subMenu.parentMenu != null && this.subMenu.parentMenu.menuType == "static") {
+                                               topValue = "100%";
+                                               leftValue = "0px";
+                                       } else {
+                                               topValue = "0px";
+                                               leftValue = "100%";
+                                       }
+
+                                       with (this.subMenu.mainElement.style) {
+                                               display = "none";
+                                               position = "absolute";
+                                               top = topValue;
+                                               left = leftValue;
+                                       }
+                               }
+
+                               Sys.WebForms.Menu.Helpers.appendCssClass (this.element, "has-popup");
+                               this.element.setAttribute ("aria-haspopup", this.subMenu.mainElement.id);
+                               Sys.WebForms.Menu.Helpers.addEventHandler (this.element, "mouseover", this.mouseOverHandler);
+                               Sys.WebForms.Menu.Helpers.addEventHandler (this.element, "mouseout", this.mouseOutHandler);
+                               break;
+               }
+       }
+
+       Sys.WebForms.Menu.Helpers.appendCssClass (this.element, this.menuType);
+       this.element.style.position = "relative";
+       this.element.setAttribute ("role", "menuitem");
+       this.element ["__MonoMenuItemPath"] = this.path;
+
+       if (this.parentMenu.orientation == "horizontal" && this.parentMenu.menuType == "static")
+               Sys.WebForms.Menu.Helpers.setFloat (this.element, "left");
+
+       Sys.WebForms.Menu.Helpers.addMenuItem (this);
+}
+
+Sys.WebForms.MenuItem.prototype.log = function (msg)
+{
+       if (console && console.log)
+               console.log (msg);
+}
+
+Sys.WebForms.MenuItem.prototype.hide = function (popup, leaveParentOpen)
+{
+       if (popup == null || popup.mainElement == null || popup.menuType == "static")
+               return;
+
+       var current = popup;
+       while (current != null) {
+               if (current.menuType == "static" || (leaveParentOpen && current == this.parentMenu))
+                       break;
+
+               if (current.mainElement != null)
+                       current.mainElement.style.display = "none";
+
+               if (current.hideTimerId != null) {
+                       window.clearTimeout (current.hideTimerId);
+                       current.hideTimerId = null;
+               }
+
+               current = current.parentMenu;
+       }
+}
+
+Sys.WebForms.MenuItem.prototype.onMouseOver = function (popupId)
+{
+       var cur = Sys.WebForms.Menu.Helpers.getPopupToClose ();
+       if (cur != null) {
+               if (cur.hideTimerId != null) {
+                       window.clearTimeout (cur.hideTimerId);
+                       cur.hideTimerId = null;
+               }
+               this.hide (cur, true);
+               Sys.WebForms.Menu.Helpers.setPopupToClose (null);
+       }
+       if (popupId == null || popupId == "")
+               return;
+
+       var popup = document.getElementById (popupId);
+       if (popup == null)
+               throw "Popup with id '" + popupId + "' could not be found.";
+
+       this.hide (cur, true);
+       popup.style.display = "block";
+}
+
+Sys.WebForms.MenuItem.prototype.onMouseOut = function (popupId)
+{
+       if (popupId == null || popupId == "")
+               return;
+
+       var popup = document.getElementById (popupId);
+       if (popup == null)
+               throw "Popup with id '" + popupId + "' could not be found.";
+
+       var cur = this.subMenu;
+       if (cur != null) {
+               var myself = this;
+               cur.hideTimerId = window.setTimeout (function () {
+                                                            myself.hide (cur, false);
+                                                    },
+                                                    this.subMenu.disappearAfter);
+
+       }
+       Sys.WebForms.Menu.Helpers.setPopupToClose (cur);
+}
+
+Sys.WebForms.MenuItem.prototype.mouseOverHandler = function (e)
+{
+       var menuItem = Sys.WebForms.Menu.Helpers.getMenuItem (this);
+       if (menuItem == null || !(menuItem instanceof Sys.WebForms.MenuItem)) {
+               e.returnResult = false;
+               e.cancelBuble = false;
+               throw "MenuItem could not be found in mouseover handler.";
+       }
+
+       menuItem.onMouseOver (this.getAttribute ("aria-haspopup"));
+       menuItem.finalizeEvent (e);
+}
+
+Sys.WebForms.MenuItem.prototype.mouseOutHandler = function (e)
+{
+       var menuItem = Sys.WebForms.Menu.Helpers.getMenuItem (this);
+
+       if (menuItem == null || !(menuItem instanceof Sys.WebForms.MenuItem)) {
+               e.returnResult = false;
+               e.cancelBuble = false;
+               throw "MenuItem could not be found in mouseout handler.";
+       }
+       menuItem.onMouseOut (this.getAttribute ("aria-haspopup"));
+       menuItem.finalizeEvent (e);
+}
+
+Sys.WebForms.MenuItem.prototype.finalizeEvent = function (e)
+{
+       /* For standards-compliant browsers */
+       if (e != null) {
+               if (e.preventDefault)
+                       e.preventDefault();
+               else
+                       e.returnResult = false;
+
+               if (e.stopPropagation)
+                       e.stopPropagation();
+               else
+                       e.cancelBubble = true;
+       }
+
+       /* For IE */
+       if (window.event != null)
+               window.event.cancelBubble = true;
+}
\ No newline at end of file
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuTableRenderer.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MenuTableRenderer.cs
new file mode 100644 (file)
index 0000000..ffe7309
--- /dev/null
@@ -0,0 +1,517 @@
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//     Igor Zelmanovich (igorz@mainsoft.com)
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2010 Novell, Inc (http://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.
+//
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+
+namespace System.Web.UI.WebControls
+{
+       sealed class MenuTableRenderer : BaseMenuRenderer
+       {
+               const string onPreRenderScript = "var {0} = new Object ();\n{0}.webForm = {1};\n{0}.disappearAfter = {2};\n{0}.vertical = {3};";
+
+               public override HtmlTextWriterTag Tag {
+                       get { return HtmlTextWriterTag.Table; }
+                       
+               }
+               
+               public MenuTableRenderer (Menu owner)
+                       : base (owner)
+               {
+               }
+               
+               public override void AddAttributesToRender (HtmlTextWriter writer)
+               {
+                       writer.AddAttribute ("cellpadding", "0", false);
+                       writer.AddAttribute ("cellspacing", "0", false);
+                       writer.AddAttribute ("border", "0", false);
+
+                       base.AddAttributesToRender (writer);
+               }
+               
+               public override void PreRender (Page page, HtmlHead head, ClientScriptManager csm, string cmenu, StringBuilder script)
+               {
+                       Menu owner = Owner;
+                       MenuItemStyle staticMenuItemStyle = owner.StaticMenuItemStyleInternal;
+                       SubMenuStyle staticMenuStyle = owner.StaticMenuStyleInternal;
+                       MenuItemStyle dynamicMenuItemStyle = owner.DynamicMenuItemStyleInternal;
+                       SubMenuStyle dynamicMenuStyle = owner.DynamicMenuStyleInternal;
+                       MenuItemStyleCollection levelMenuItemStyles = owner.LevelMenuItemStyles;
+                       List<Style> levelMenuItemLinkStyles = owner.LevelMenuItemLinkStyles;
+                       SubMenuStyleCollection levelSubMenuStyles = owner.LevelSubMenuStylesInternal;
+                       MenuItemStyle staticSelectedStyle = owner.StaticSelectedStyleInternal;
+                       MenuItemStyle dynamicSelectedStyle = owner.DynamicSelectedStyleInternal;
+                       MenuItemStyleCollection levelSelectedStyles = owner.LevelSelectedStylesInternal;
+                       List<Style> levelSelectedLinkStyles = owner.LevelSelectedLinkStyles;
+                       Style staticHoverStyle = owner.StaticHoverStyleInternal;
+                       Style dynamicHoverStyle = owner.DynamicHoverStyleInternal;
+                       
+                       if (!csm.IsClientScriptIncludeRegistered (typeof (Menu), "Menu.js")) {
+                               string url = csm.GetWebResourceUrl (typeof (Menu), "Menu.js");
+                               csm.RegisterClientScriptInclude (typeof (Menu), "Menu.js", url);
+                       }
+                       
+                       script.AppendFormat (onPreRenderScript,
+                                            cmenu,
+                                            page.IsMultiForm ? page.theForm : "window",
+                                            ClientScriptManager.GetScriptLiteral (owner.DisappearAfter),
+                                            ClientScriptManager.GetScriptLiteral (owner.Orientation == Orientation.Vertical));
+
+                       if (owner.DynamicHorizontalOffset != 0)
+                               script.Append (String.Concat (cmenu, ".dho = ", ClientScriptManager.GetScriptLiteral (owner.DynamicHorizontalOffset), ";\n"));
+                       if (owner.DynamicVerticalOffset != 0)
+                               script.Append (String.Concat (cmenu, ".dvo = ", ClientScriptManager.GetScriptLiteral (owner.DynamicVerticalOffset), ";\n"));
+
+                       // The order in which styles are defined matters when more than one class
+                       // is assigned to an element
+                       RegisterStyle (owner.PopOutBoxStyle, head);
+                       RegisterStyle (owner.ControlStyle, owner.ControlLinkStyle, head);
+                       
+                       if (staticMenuItemStyle != null)
+                               RegisterStyle (owner.StaticMenuItemStyle, owner.StaticMenuItemLinkStyle, head);
+
+                       if (staticMenuStyle != null)
+                               RegisterStyle (owner.StaticMenuStyle, head);
+                       
+                       if (dynamicMenuItemStyle != null)
+                               RegisterStyle (owner.DynamicMenuItemStyle, owner.DynamicMenuItemLinkStyle, head);
+
+                       if (dynamicMenuStyle != null)
+                               RegisterStyle (owner.DynamicMenuStyle, head);
+
+                       if (levelMenuItemStyles != null && levelMenuItemStyles.Count > 0) {
+                               levelMenuItemLinkStyles = new List<Style> (levelMenuItemStyles.Count);
+                               foreach (Style style in levelMenuItemStyles) {
+                                       Style linkStyle = new Style ();
+                                       levelMenuItemLinkStyles.Add (linkStyle);
+                                       RegisterStyle (style, linkStyle, head);
+                               }
+                       }
+               
+                       if (levelSubMenuStyles != null)
+                               foreach (Style style in levelSubMenuStyles)
+                                       RegisterStyle (style, head);
+
+                       if (staticSelectedStyle != null)
+                               RegisterStyle (staticSelectedStyle, owner.StaticSelectedLinkStyle, head);
+                       
+                       if (dynamicSelectedStyle != null)
+                               RegisterStyle (dynamicSelectedStyle, owner.DynamicSelectedLinkStyle, head);
+
+                       if (levelSelectedStyles != null && levelSelectedStyles.Count > 0) {
+                               levelSelectedLinkStyles = new List<Style> (levelSelectedStyles.Count);
+                               foreach (Style style in levelSelectedStyles) {
+                                       Style linkStyle = new Style ();
+                                       levelSelectedLinkStyles.Add (linkStyle);
+                                       RegisterStyle (style, linkStyle, head);
+                               }
+                       }
+                       
+                       if (staticHoverStyle != null) {
+                               if (head == null)
+                                       throw new InvalidOperationException ("Using Menu.StaticHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
+                               RegisterStyle (staticHoverStyle, owner.StaticHoverLinkStyle, head);
+                               script.Append (String.Concat (cmenu, ".staticHover = ", ClientScriptManager.GetScriptLiteral (staticHoverStyle.RegisteredCssClass), ";\n"));
+                               script.Append (String.Concat (cmenu, ".staticLinkHover = ", ClientScriptManager.GetScriptLiteral (owner.StaticHoverLinkStyle.RegisteredCssClass), ";\n"));
+                       }
+                       
+                       if (dynamicHoverStyle != null) {
+                               if (head == null)
+                                       throw new InvalidOperationException ("Using Menu.DynamicHoverStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
+                               RegisterStyle (dynamicHoverStyle, owner.DynamicHoverLinkStyle, head);
+                               script.Append (String.Concat (cmenu, ".dynamicHover = ", ClientScriptManager.GetScriptLiteral (dynamicHoverStyle.RegisteredCssClass), ";\n"));
+                               script.Append (String.Concat (cmenu, ".dynamicLinkHover = ", ClientScriptManager.GetScriptLiteral (owner.DynamicHoverLinkStyle.RegisteredCssClass), ";\n"));
+                       }
+               }
+
+               public override void RenderBeginTag (HtmlTextWriter writer, string skipLinkText)
+               {
+                       Menu owner = Owner;
+                       
+                       // <a href="#ID_SkipLink">
+                       writer.AddAttribute (HtmlTextWriterAttribute.Href, "#" + owner.ClientID + "_SkipLink");
+                       writer.RenderBeginTag (HtmlTextWriterTag.A);
+                               
+                       // <img alt="" height="0" width="0" src="" style="border-width:0px;"/>
+                       writer.AddAttribute (HtmlTextWriterAttribute.Alt, skipLinkText);
+                       writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
+                       writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
+                               
+                       Page page = owner.Page;
+                       ClientScriptManager csm = page != null ? page.ClientScript : new ClientScriptManager (null);
+                               
+                       writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
+                       writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
+                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
+                       writer.RenderEndTag ();
+                               
+                       writer.RenderEndTag (); // </a>
+               }
+               
+               public override void RenderEndTag (HtmlTextWriter writer)
+               {
+                       Menu owner = Owner;
+                       if (owner.StaticDisplayLevels == 1 && owner.MaximumDynamicDisplayLevels > 0)
+                               owner.RenderDynamicMenu (writer, owner.Items);
+               }
+
+               public override void RenderContents (HtmlTextWriter writer)
+               {
+                       Menu owner = Owner;
+                       RenderMenuBody (writer, owner.Items, owner.Orientation == Orientation.Vertical, false, false);
+               }
+               
+               void RenderMenuBeginTagAttributes (HtmlTextWriter writer, bool dynamic, int menuLevel)
+               {
+                       writer.AddAttribute ("cellpadding", "0", false);
+                       writer.AddAttribute ("cellspacing", "0", false);
+                       writer.AddAttribute ("border", "0", false);
+
+                       if (!dynamic) {
+                               SubMenuStyle style = new SubMenuStyle ();
+                               FillMenuStyle (null, dynamic, menuLevel, style);
+                               style.AddAttributesToRender (writer);
+                       }
+               }
+               
+               public override void RenderMenuBeginTag (HtmlTextWriter writer, bool dynamic, int menuLevel)
+               {
+                       RenderMenuBeginTagAttributes (writer, dynamic, menuLevel);
+                       writer.RenderBeginTag (HtmlTextWriterTag.Table);
+               }
+
+               void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing, bool vertical)
+               {
+                       if (vertical) {
+                               writer.AddStyleAttribute ("height", itemSpacing.ToString ());
+                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
+                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                               writer.RenderEndTag ();
+                               writer.RenderEndTag ();
+                       } else {
+                               writer.AddStyleAttribute ("width", itemSpacing.ToString ());
+                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                               writer.RenderEndTag ();
+                       }
+               }
+               
+               public override void RenderMenuBody (HtmlTextWriter writer, MenuItemCollection items, bool vertical, bool dynamic, bool notLast)
+               {
+                       Menu owner = Owner;
+                       if (!vertical)
+                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
+
+                       int count = items.Count;
+                       var oc = new OwnerContext (this);
+                       
+                       for (int n = 0; n < count; n++) {
+                               MenuItem item = items [n];
+                               Adapters.MenuAdapter adapter = owner.Adapter as Adapters.MenuAdapter;
+                               if (adapter != null)
+                                       adapter.RenderItem (writer, item, n);
+                               else
+                                       RenderMenuItem (writer, item, vertical, (n + 1) == count ? notLast : true, n == 0, oc);
+                       }
+
+                       if (!vertical)
+                               writer.RenderEndTag (); // TR
+               }
+
+               protected override void RenderMenuItem (HtmlTextWriter writer, MenuItem item, bool vertical, bool notLast, bool isFirst, OwnerContext oc)
+               {
+                       Menu owner = Owner;
+                       string clientID = oc.ClientID;
+                       bool displayChildren = owner.DisplayChildren (item);
+                       bool dynamicChildren = displayChildren && (item.Depth + 1 >= oc.StaticDisplayLevels);
+                       bool isDynamicItem = IsDynamicItem (owner, item);
+                       bool isVertical = oc.IsVertical || isDynamicItem;
+                       Unit itemSpacing = owner.GetItemSpacing (item, isDynamicItem);
+
+                       if (itemSpacing != Unit.Empty && (item.Depth > 0 || !isFirst))
+                               RenderMenuItemSpacing (writer, itemSpacing, isVertical);
+
+                       if(!String.IsNullOrEmpty(item.ToolTip))
+                               writer.AddAttribute (HtmlTextWriterAttribute.Title, item.ToolTip);
+                       if (isVertical)
+                               writer.RenderBeginTag (HtmlTextWriterTag.Tr);
+
+                       string parentId = isDynamicItem ? "'" + item.Parent.Path + "'" : "null";
+                       if (dynamicChildren) {
+                               writer.AddAttribute ("onmouseover",
+                                                    "javascript:Menu_OverItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
+                               writer.AddAttribute ("onmouseout",
+                                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
+                       } else if (isDynamicItem) {
+                               writer.AddAttribute ("onmouseover",
+                                                    "javascript:Menu_OverDynamicLeafItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
+                               writer.AddAttribute ("onmouseout",
+                                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
+                       } else {
+                               writer.AddAttribute ("onmouseover",
+                                                    "javascript:Menu_OverStaticLeafItem ('" + clientID + "','" + item.Path + "')");
+                               writer.AddAttribute ("onmouseout",
+                                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
+                       }
+
+                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
+
+                       // Top separator image
+
+                       if (isDynamicItem)
+                               RenderSeparatorImage (owner, writer, oc.DynamicTopSeparatorImageUrl, false);
+                       else
+                               RenderSeparatorImage (owner, writer, oc.StaticTopSeparatorImageUrl, false);
+
+                       // Menu item box
+                       
+                       MenuItemStyle style = new MenuItemStyle ();
+                               
+                       if (oc.Header != null) {
+                               // styles are registered
+                               if (!isDynamicItem && oc.StaticMenuItemStyle != null) {
+                                       AddCssClass (style, oc.StaticMenuItemStyle.CssClass);
+                                       AddCssClass (style, oc.StaticMenuItemStyle.RegisteredCssClass);
+                               }
+                               if (isDynamicItem && oc.DynamicMenuItemStyle != null) {
+                                       AddCssClass (style, oc.DynamicMenuItemStyle.CssClass);
+                                       AddCssClass (style, oc.DynamicMenuItemStyle.RegisteredCssClass);
+                               }
+                               if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth) {
+                                       AddCssClass (style, oc.LevelMenuItemStyles [item.Depth].CssClass);
+                                       AddCssClass (style, oc.LevelMenuItemStyles [item.Depth].RegisteredCssClass);
+                               }
+                               if (item == oc.SelectedItem) {
+                                       if (!isDynamicItem && oc.StaticSelectedStyle != null) {
+                                               AddCssClass (style, oc.StaticSelectedStyle.CssClass);
+                                               AddCssClass (style, oc.StaticSelectedStyle.RegisteredCssClass);
+                                       }
+                                       if (isDynamicItem && oc.DynamicSelectedStyle != null) {
+                                               AddCssClass (style, oc.DynamicSelectedStyle.CssClass);
+                                               AddCssClass (style, oc.DynamicSelectedStyle.RegisteredCssClass);
+                                       }
+                                       if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth) {
+                                               AddCssClass (style, oc.LevelSelectedStyles [item.Depth].CssClass);
+                                               AddCssClass (style, oc.LevelSelectedStyles [item.Depth].RegisteredCssClass);
+                                       }
+                               }
+                       } else {
+                               // styles are not registered
+                               if (!isDynamicItem && oc.StaticMenuItemStyle != null)
+                                       style.CopyFrom (oc.StaticMenuItemStyle);
+                               if (isDynamicItem && oc.DynamicMenuItemStyle != null)
+                                       style.CopyFrom (oc.DynamicMenuItemStyle);
+                               if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
+                                       style.CopyFrom (oc.LevelMenuItemStyles [item.Depth]);
+                               if (item == oc.SelectedItem) {
+                                       if (!isDynamicItem && oc.StaticSelectedStyle != null)
+                                               style.CopyFrom (oc.StaticSelectedStyle);
+                                       if (isDynamicItem && oc.DynamicSelectedStyle != null)
+                                               style.CopyFrom (oc.DynamicSelectedStyle);
+                                       if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
+                                               style.CopyFrom (oc.LevelSelectedStyles [item.Depth]);
+                               }
+                       }
+                       style.AddAttributesToRender (writer);
+
+                       writer.AddAttribute ("id", GetItemClientId (clientID, item, "i"));
+                       writer.AddAttribute ("cellpadding", "0", false);
+                       writer.AddAttribute ("cellspacing", "0", false);
+                       writer.AddAttribute ("border", "0", false);
+                       writer.AddAttribute ("width", "100%", false);
+                       writer.RenderBeginTag (HtmlTextWriterTag.Table);
+                       writer.RenderBeginTag (HtmlTextWriterTag.Tr);
+
+                       // Menu item text
+
+                       if (isVertical)
+                               writer.AddStyleAttribute (HtmlTextWriterStyle.Width, "100%");
+                       if (!owner.ItemWrap)
+                               writer.AddStyleAttribute ("white-space", "nowrap");
+                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
+
+                       RenderItemHref (owner, writer, item);
+                       
+                       Style linkStyle = new Style ();
+                       if (oc.Header != null) {
+                               // styles are registered
+                               AddCssClass (linkStyle, oc.ControlLinkStyle.RegisteredCssClass);
+
+                               if (!isDynamicItem && oc.StaticMenuItemStyle != null) {
+                                       AddCssClass (linkStyle, oc.StaticMenuItemStyle.CssClass);
+                                       AddCssClass (linkStyle, oc.StaticMenuItemLinkStyle.RegisteredCssClass);
+                               }
+                               if (isDynamicItem && oc.DynamicMenuItemStyle != null) {
+                                       AddCssClass (linkStyle, oc.DynamicMenuItemStyle.CssClass);
+                                       AddCssClass (linkStyle, oc.DynamicMenuItemLinkStyle.RegisteredCssClass);
+                               }
+                               if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth) {
+                                       AddCssClass (linkStyle, oc.LevelMenuItemStyles [item.Depth].CssClass);
+                                       AddCssClass (linkStyle, oc.LevelMenuItemLinkStyles [item.Depth].RegisteredCssClass);
+                               }
+                               if (item == oc.SelectedItem) {
+                                       if (!isDynamicItem && oc.StaticSelectedStyle != null) {
+                                               AddCssClass (linkStyle, oc.StaticSelectedStyle.CssClass);
+                                               AddCssClass (linkStyle, oc.StaticSelectedLinkStyle.RegisteredCssClass);
+                                       }
+                                       if (isDynamicItem && oc.DynamicSelectedStyle != null) {
+                                               AddCssClass (linkStyle, oc.DynamicSelectedStyle.CssClass);
+                                               AddCssClass (linkStyle, oc.DynamicSelectedLinkStyle.RegisteredCssClass);
+                                       }
+                                       if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth) {
+                                               AddCssClass (linkStyle, oc.LevelSelectedStyles [item.Depth].CssClass);
+                                               AddCssClass (linkStyle, oc.LevelSelectedLinkStyles [item.Depth].RegisteredCssClass);
+                                       }
+                               }
+                       } else {
+                               // styles are not registered
+                               linkStyle.CopyFrom (oc.ControlLinkStyle);
+
+                               if (!isDynamicItem && oc.StaticMenuItemStyle != null)
+                                       linkStyle.CopyFrom (oc.StaticMenuItemLinkStyle);
+                               if (isDynamicItem && oc.DynamicMenuItemStyle != null)
+                                       linkStyle.CopyFrom (oc.DynamicMenuItemLinkStyle);
+                               if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
+                                       linkStyle.CopyFrom (oc.LevelMenuItemLinkStyles [item.Depth]);
+                               if (item == oc.SelectedItem) {
+                                       if (!isDynamicItem && oc.StaticSelectedStyle != null)
+                                               linkStyle.CopyFrom (oc.StaticSelectedLinkStyle);
+                                       if (isDynamicItem && oc.DynamicSelectedStyle != null)
+                                               linkStyle.CopyFrom (oc.DynamicSelectedLinkStyle);
+                                       if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
+                                               linkStyle.CopyFrom (oc.LevelSelectedLinkStyles [item.Depth]);
+                               }
+
+                               linkStyle.AlwaysRenderTextDecoration = true;
+                       }
+                       linkStyle.AddAttributesToRender (writer);
+
+                       writer.AddAttribute ("id", GetItemClientId (clientID, item, "l"));
+                       
+                       if (item.Depth > 0 && !isDynamicItem) {
+                               double value;
+#if NET_4_0
+                               Unit unit = oc.StaticSubMenuIndent;
+                               if (unit == Unit.Empty)
+                                       value = 16;
+                               else
+                                       value = unit.Value;
+#else
+                               value = oc.StaticSubMenuIndent.Value;
+#endif
+                               Unit indent = new Unit (value * item.Depth, oc.StaticSubMenuIndent.Type);
+                               writer.AddStyleAttribute (HtmlTextWriterStyle.MarginLeft, indent.ToString ());
+                       }
+                       writer.RenderBeginTag (HtmlTextWriterTag.A);
+                       owner.RenderItemContent (writer, item, isDynamicItem);
+                       writer.RenderEndTag (); // A
+
+                       writer.RenderEndTag (); // TD
+
+                       // Popup image
+
+                       if (dynamicChildren) {
+                               string popOutImage = GetPopOutImage (owner, item, isDynamicItem);
+                               if (popOutImage != null) {
+                                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                                       writer.AddAttribute ("src", owner.ResolveClientUrl (popOutImage));
+                                       writer.AddAttribute ("border", "0");
+                                       string toolTip = String.Format (isDynamicItem ? oc.DynamicPopOutImageTextFormatString : oc.StaticPopOutImageTextFormatString, item.Text);
+                                       writer.AddAttribute (HtmlTextWriterAttribute.Alt, toolTip);
+                                       writer.RenderBeginTag (HtmlTextWriterTag.Img);
+                                       writer.RenderEndTag (); // IMG
+                                       writer.RenderEndTag (); // TD
+                               }
+                       }
+
+                       writer.RenderEndTag (); // TR
+                       writer.RenderEndTag (); // TABLE
+                       
+                       writer.RenderEndTag (); // TD
+
+                       if (!isVertical && itemSpacing == Unit.Empty && (notLast || (displayChildren && !dynamicChildren))) {
+                               writer.AddStyleAttribute ("width", "3px");
+                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                               writer.RenderEndTag ();
+                       }
+                       
+                       // Bottom separator image
+                       string separatorImg = item.SeparatorImageUrl;
+                       if (separatorImg.Length == 0) {
+                               if (isDynamicItem)
+                                       separatorImg = oc.DynamicBottomSeparatorImageUrl;
+                               else
+                                       separatorImg = oc.StaticBottomSeparatorImageUrl;
+                       }
+                       
+                       if (separatorImg.Length > 0) {
+                               if (!isVertical)
+                                       writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                               RenderSeparatorImage (owner, writer, separatorImg, false);
+                               if (!isVertical)
+                                       writer.RenderEndTag (); // TD
+                       }
+
+                       if (isVertical)
+                               writer.RenderEndTag (); // TR
+
+                       if (itemSpacing != Unit.Empty)
+                               RenderMenuItemSpacing (writer, itemSpacing, isVertical);
+
+                       // Submenu
+
+                       if (displayChildren && !dynamicChildren) {
+                               if (isVertical)
+                                       writer.RenderBeginTag (HtmlTextWriterTag.Tr);
+                               writer.RenderBeginTag (HtmlTextWriterTag.Td);
+                               writer.AddAttribute ("width", "100%");
+                               owner.RenderMenu (writer, item.ChildItems, vertical, false, item.Depth + 1, notLast);
+                               if (item.Depth + 2 == oc.StaticDisplayLevels)
+                                       owner.RenderDynamicMenu (writer, item.ChildItems);
+                               writer.RenderEndTag (); // TD
+                               if (isVertical)
+                                       writer.RenderEndTag (); // TR
+                       }
+               }
+
+               public override bool IsDynamicItem (Menu owner, MenuItem item)
+               {
+                       if (owner == null)
+                               throw new ArgumentNullException ("owner");
+
+                       if (item == null)
+                               throw new ArgumentNullException ("item");
+                       
+                       return item.Depth + 1 > owner.StaticDisplayLevels;
+               }
+       }
+}
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/NamedCssStyleCollection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/NamedCssStyleCollection.cs
new file mode 100644 (file)
index 0000000..3086c92
--- /dev/null
@@ -0,0 +1,89 @@
+//
+// Authors:
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2010 Novell, Inc (http://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.
+//
+using System;
+using System.Collections.Generic;
+using System.Web.UI;
+
+namespace System.Web.UI.WebControls
+{
+       sealed class NamedCssStyleCollection
+       {
+               CssStyleCollection collection;
+                       
+               public CssStyleCollection Collection {
+                       get {
+                               if (collection == null)
+                                       collection = new CssStyleCollection ();
+
+                               return collection;
+                       }
+               }
+                       
+               public string Name { get; private set; }
+                       
+               public NamedCssStyleCollection (string name)
+               {
+                       if (name == null)
+                               name = String.Empty;
+
+                       Name = name;
+               }
+
+               public NamedCssStyleCollection CopyFrom (CssStyleCollection coll)
+               {
+                       if (coll == null)
+                               return this;
+
+                       CssStyleCollection collection = Collection;
+                       foreach (string key in coll.Keys)
+                               collection.Add (key, coll [key]);
+
+                       return this;
+               }
+
+               public NamedCssStyleCollection Add (HtmlTextWriterStyle key, string value)
+               {
+                       Collection.Add (key, value);
+                       return this;
+               }
+
+               public NamedCssStyleCollection Add (string key, string value)
+               {
+                       Collection.Add (key, value);
+                       return this;
+               }
+
+               public NamedCssStyleCollection Add (Style style)
+               {
+                       if (style != null)
+                               CopyFrom (style.GetStyleAttributes (null));
+
+                       return this;
+               }
+       }
+}
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/StyleBlock.cs b/mcs/class/System.Web/System.Web.UI.WebControls/StyleBlock.cs
new file mode 100644 (file)
index 0000000..e948454
--- /dev/null
@@ -0,0 +1,135 @@
+//
+// Authors:
+//     Marek Habersack <grendel@twistedcode.net>
+//
+// (C) 2010 Novell, Inc (http://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.
+//
+using System;
+using System.Collections.Generic;
+using System.Web.UI;
+
+namespace System.Web.UI.WebControls
+{
+       sealed class StyleBlock : Control
+       {
+               List <NamedCssStyleCollection> cssStyles;
+               Dictionary <string, NamedCssStyleCollection> cssStyleIndex;
+               string stylePrefix;
+               
+               List <NamedCssStyleCollection> CssStyles {
+                       get {
+                               if (cssStyles == null) {
+                                       cssStyles = new List <NamedCssStyleCollection> ();
+                                       cssStyleIndex = new Dictionary <string, NamedCssStyleCollection> (StringComparer.Ordinal);
+                               }
+                               
+                               return cssStyles;
+                       }
+               }
+               
+               public StyleBlock (string stylePrefix)
+               {
+                       if (String.IsNullOrEmpty (stylePrefix))
+                               throw new ArgumentNullException ("stylePrefix");
+
+                       this.stylePrefix = stylePrefix;
+               }
+
+               public NamedCssStyleCollection RegisterStyle (string name = null)
+               {
+                       if (name == null)
+                               name = String.Empty;
+
+                       return GetStyle (name);
+               }
+               
+               public NamedCssStyleCollection RegisterStyle (Style style, string name = null)
+               {
+                       if (style == null)
+                               throw new ArgumentNullException ("style");
+                       
+                       if (name == null)
+                               name = String.Empty;
+
+                       NamedCssStyleCollection cssStyle = GetStyle (name);
+                       cssStyle.CopyFrom (style.GetStyleAttributes (null));
+
+                       return cssStyle;
+               }
+
+               public NamedCssStyleCollection RegisterStyle (HtmlTextWriterStyle key, string value, string styleName = null)
+               {
+                       if (styleName == null)
+                               styleName = String.Empty;
+
+                       NamedCssStyleCollection style = GetStyle (styleName);
+                       style.Add (key, value);
+
+                       return style;
+               }
+               
+               NamedCssStyleCollection GetStyle (string name)
+               {
+                       List <NamedCssStyleCollection> cssStyles = CssStyles;
+                       NamedCssStyleCollection style;
+
+                       if (!cssStyleIndex.TryGetValue (name, out style)) {
+                               style = new NamedCssStyleCollection (name);
+                               cssStyleIndex.Add (name, style);
+                               cssStyles.Add (style);
+                       }
+
+                       if (style == null)
+                               throw new InvalidOperationException (String.Format ("Internal error. Stylesheet for style {0} is null.", name));
+                       
+                       return style;
+               }
+               
+               protected internal override void Render (HtmlTextWriter writer)
+               {
+                       if (cssStyles == null || cssStyles.Count == 0)
+                               return;
+
+                       writer.AddAttribute (HtmlTextWriterAttribute.Type, "text/css");
+                       writer.RenderBeginTag (HtmlTextWriterTag.Style);
+                       writer.WriteLine ("/* <![CDATA[ */");
+
+                       string name, value;
+                       foreach (var css in cssStyles) {
+                               value = css.Collection.Value;
+                               if (String.IsNullOrEmpty (value))
+                                       continue;
+                               
+                               name = css.Name;
+                               if (name != String.Empty)
+                                       name = name + " ";
+                               
+                               writer.WriteLine ("#{0} {1}{{ {2} }}", stylePrefix, name, value);
+                       }
+                       
+                       writer.WriteLine ("/* ]]> */");
+                       writer.RenderEndTag (); // </style>
+               }
+       }
+}
index 61c35ae7d84a19947974f74fab40634e39966577..6df3f6d3646ff6d34dec7ce607f7eeac49a0d3c1 100644 (file)
@@ -1621,7 +1621,7 @@ namespace System.Web.UI.WebControls
                                return;
 
                        writer.RenderBeginTag (HtmlTextWriterTag.Table);
-                       writer.AddAttribute (HtmlTextWriterAttribute.Height, ((int) value).ToString () + "dupa1", false);
+                       writer.AddAttribute (HtmlTextWriterAttribute.Height, ((int) value).ToString (), false);
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.RenderEndTag (); // td
index 70dedfd1820e543f5ac44b0250445038101b59a7..c664b63f54069c2db6070144bd96ecfd7ba7853d 100644 (file)
@@ -349,28 +349,28 @@ namespace System.Web.UI.WebControls {
                        return new Unit (n);
                }
 
-               string GetExtension ()
+               internal static string GetExtension (UnitType type)
                {
                        switch (type){
-                       case UnitType.Pixel: return "px";
-                       case UnitType.Point: return "pt";
-                       case UnitType.Pica: return "pc";
-                       case UnitType.Inch: return "in";
-                       case UnitType.Mm: return "mm";
-                       case UnitType.Cm: return "cm";
-                       case UnitType.Percentage: return "%";
-                       case UnitType.Em: return "em";
-                       case UnitType.Ex: return "ex";
-                       default: return "";
+                               case UnitType.Pixel: return "px";
+                               case UnitType.Point: return "pt";
+                               case UnitType.Pica: return "pc";
+                               case UnitType.Inch: return "in";
+                               case UnitType.Mm: return "mm";
+                               case UnitType.Cm: return "cm";
+                               case UnitType.Percentage: return "%";
+                               case UnitType.Em: return "em";
+                               case UnitType.Ex: return "ex";
+                               default: return String.Empty;
                        }
                }
 
                public string ToString (CultureInfo culture)
                {
                        if (type == 0)
-                               return "";
+                               return String.Empty;
                        
-                       string ex = GetExtension ();
+                       string ex = GetExtension (type);
                        
                        return value.ToString (culture) + ex;
                }
@@ -384,9 +384,9 @@ namespace System.Web.UI.WebControls {
                public string ToString (IFormatProvider provider)
                {
                        if (type == 0)
-                               return "";
+                               return String.Empty;
 
-                       string ex = GetExtension ();
+                       string ex = GetExtension (type);
 
                        return value.ToString (provider) + ex;
                }
index 053998ea0fcead5fc53a5f22f57021cc91e38880..7f6ebe8e4f12bc47e7a88f1a7c2e70dc4601836e 100644 (file)
@@ -821,6 +821,8 @@ namespace System.Web.UI
                        uniqueID = null;
 #if NET_4_0
                        ClearCachedClientID ();
+#else
+                       clientID = null;
 #endif
                        if (!HasControls ())
                                return;
index 211af52d478790b4f323900f21491c1587d4abf7..776cbb3233f021df1f7b520df140c9a108ee5724 100644 (file)
@@ -722,6 +722,7 @@ System.Web.UI.WebControls/AutoGeneratedFieldProperties.cs
 System.Web.UI.WebControls/BaseCompareValidator.cs
 System.Web.UI.WebControls/BaseDataBoundControl.cs
 System.Web.UI.WebControls/BaseDataList.cs
+System.Web.UI.WebControls/BaseMenuRenderer.cs
 System.Web.UI.WebControls/BaseValidator.cs
 System.Web.UI.WebControls/BorderStyle.cs
 System.Web.UI.WebControls/BoundColumn.cs
@@ -912,6 +913,7 @@ System.Web.UI.WebControls/ImageField.cs
 System.Web.UI.WebControls/ImageMap.cs
 System.Web.UI.WebControls/ImageMapEventArgs.cs
 System.Web.UI.WebControls/ImageMapEventHandler.cs
+System.Web.UI.WebControls/IMenuRenderer.cs
 System.Web.UI.WebControls/IPersistedSelector.cs
 System.Web.UI.WebControls/IPostBackContainer.cs
 System.Web.UI.WebControls/IRepeatInfoUser.cs
@@ -952,6 +954,7 @@ System.Web.UI.WebControls/MenuItem.cs
 System.Web.UI.WebControls/MenuItemStyleCollection.cs
 System.Web.UI.WebControls/MenuItemStyle.cs
 System.Web.UI.WebControls/MenuItemTemplateContainer.cs
+System.Web.UI.WebControls/MenuTableRenderer.cs
 System.Web.UI.WebControls/MonthChangedEventArgs.cs
 System.Web.UI.WebControls/MonthChangedEventHandler.cs
 System.Web.UI.WebControls/MultiView.cs
index d9aa8e5fb23a4d72e5b63ff06bc60e6796e35982..e79883d1e15e285ed9a161220850c171c45777bc 100644 (file)
@@ -40,7 +40,7 @@ using System.Web.Util;
 
 namespace System.Web {
 
-#if !MONOTOUCH
+#if !MOBILE
        // CAS - no InheritanceDemand here as the class is sealed
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
 #endif
index 4e555534b7a4edca5c02053260c089032eb78043..757fc3d35e33bc8f19739c76e9fd441029edb5f9 100644 (file)
@@ -21,3 +21,4 @@ Test/standalone-tests/GridViewSortingStyles.cs
 Test/standalone-tests/SiteMapPathRendering.cs
 Test/standalone-tests/PageParserDefaultTypeProperties.cs
 Test/standalone-tests/ChildrenAsProperties.cs
+Test/standalone-tests/Menu_4.0_List.cs
index 6df6df7f03c8280583abbbf6c52e8a8711ef34e8..fc6247ce9cc0da60a7de741943052b543b2b3e95 100644 (file)
@@ -58,6 +58,9 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters
                {
                        p = new Page ();
                        c = new MyMenu ();
+#if NET_4_0
+                       c.RenderingMode = MenuRenderingMode.Table;
+#endif
                        a = new MyMenuAdapter (c);
                        p.Controls.Add(c);
                        sw = new StringWriter ();
index 84a2e35bd77e33ace847f21baf35f95900d43663..183ff7f51ef1e1c855e4cdbc8d08cf3fc5cfbd2b 100644 (file)
@@ -52,9 +52,17 @@ using MonoTests.Common;
 
 namespace MonoTests.System.Web.UI.WebControls
 {
+       class MenuTable : Menu
+       {
+               public MenuTable ()
+               {
+#if NET_4_0
+                       RenderingMode = MenuRenderingMode.Table;
+#endif
+               }
+       }
        
-       
-       class PokerMenu:Menu
+       class PokerMenu : Menu
        {
                public PokerMenu ()
                {
@@ -420,7 +428,29 @@ namespace MonoTests.System.Web.UI.WebControls
 #endif
                        HtmlDiff.AssertAreEqual(OriginControlHtml,RenderedControlHtml,"RenderBeginTag");
                }
+#if NET_4_0
+               [Test]
+               [Category ("NunitWeb")]
+               public void Menu_RenderBeginTag_List ()
+               {
+                       new WebTest (PageInvoker.CreateOnLoad (_BeginTagRender_List)).Run ();
+               }
+
+               public static void _BeginTagRender_List (Page p)
+               {
+                       PokerMenu pm = new PokerMenu ();
+                       pm.RenderingCompatibility = new Version (4, 0);
+                       pm.RenderingMode = MenuRenderingMode.List;
 
+                       p.Form.Controls.Add (pm);
+                       StringWriter sw = new StringWriter ();
+                       HtmlTextWriter tw = new HtmlTextWriter (sw);
+                       pm.RenderBeginTag (tw);
+                       string RenderedControlHtml = sw.ToString ();
+                       string OriginControlHtml = "<a href=\"#ctl01_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"ctl01\">\r\n";
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderBeginTag_List");
+               }
+#endif
                [Test]
                [Category ("NunitWeb")]
                public void Menu_RenderEndTag ()
@@ -446,7 +476,29 @@ namespace MonoTests.System.Web.UI.WebControls
 #endif
                        HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderEndTag"); 
                }
+#if NET_4_0
+               [Test]
+               [Category ("NunitWeb")]
+               public void Menu_RenderEndTag_List ()
+               {
+                       new WebTest (PageInvoker.CreateOnLoad (_EndTagRender_List)).Run ();
+               }
+               public static void _EndTagRender_List (Page p)
+               {
+                       PokerMenu pm = new PokerMenu ();
+                       pm.RenderingCompatibility = new Version (4, 0);
+                       pm.RenderingMode = MenuRenderingMode.List;
 
+                       p.Form.Controls.Add (pm);
+                       StringWriter sw = new StringWriter ();
+                       HtmlTextWriter tw = new HtmlTextWriter (sw);
+                       pm.RenderBeginTag (tw);
+                       pm.RenderEndTag (tw);
+                       string RenderedControlHtml = sw.ToString ();
+                       string OriginControlHtml = "<a href=\"#ctl01_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"ctl01\">\r\n\r\n</div><a id=\"ctl01_SkipLink\"></a>";
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderEndTag");
+               }
+#endif
                [Test]
                public void Menu_DataBind () {
                        Page p = new Page ();
@@ -477,7 +529,7 @@ namespace MonoTests.System.Web.UI.WebControls
                }
 
                static Menu CreateMenu () {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        MenuItem rootItem = new MenuItem ("RootItem-Text", "RootItem-Value");
                        m.Items.Add (rootItem);
                        rootItem.ChildItems.Add (new MenuItem ("Node1-Text", "Node1-Value"));
@@ -504,6 +556,9 @@ namespace MonoTests.System.Web.UI.WebControls
                        p.Form.Controls.Add (xmlDs);
 
                        Menu m = CreateMenu ();
+#if NET_4_0
+                       m.RenderingMode = MenuRenderingMode.Table;
+#endif
                        m.DataSourceID = "XmlDataSource";
                        m.MenuItemDataBound += new MenuEventHandler (m_MenuItemDataBound);
                        p.Form.Controls.Add (m);
@@ -859,7 +914,7 @@ namespace MonoTests.System.Web.UI.WebControls
 
                [Test]
                public void Menu_DataBindings () {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        SetDataBindings (m);
                        m.DataSource = CreateXmlDataSource ();
                        m.DataBind ();
@@ -886,7 +941,7 @@ namespace MonoTests.System.Web.UI.WebControls
                {
                        LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
                        LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
-                       Menu menu = new Menu ();
+                       Menu menu = new MenuTable ();
                        p.Form.Controls.Add (lcb);
                        p.Form.Controls.Add (menu);
                        p.Form.Controls.Add (lce);
@@ -1025,9 +1080,6 @@ namespace MonoTests.System.Web.UI.WebControls
                        #endregion
                        RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Vertical)).Run ();
                        RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
-                       Console.WriteLine (OriginControlHtml);
-                       Console.WriteLine ("----------------");
-                       Console.WriteLine (RenderedControlHtml);
                        HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Vertical");
 #if !NET_4_0 || (NET_4_0 && !DOT_NET)
                        // Throws NREX on .NET 4.0, most probably because the adapter's Control is null
@@ -1143,7 +1195,38 @@ namespace MonoTests.System.Web.UI.WebControls
                        HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithBaseAdapter_Horizontal");
 #endif
                }
-
+#if NET_4_0
+               [Test]
+               [Category ("NunitWeb")]
+               [Ignore ("Disabled temporarily")]
+               public void Menu_RenderStaticItems_List ()
+               {
+                       string RenderedPageHtml, RenderedControlHtml, OriginControlHtml;
+                       #region OriginControlHtml
+                       OriginControlHtml = "<a href=\"#Menu_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"Menu\">\r\n\t<ul class=\"level1\">\r\n\t\t<li><a class=\"level1\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value&#39;)\">one-black</a></li><li><a class=\"level2\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value&#39;)\">two-black-1</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value&#39;)\">three-black-1</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value\\\\four-black-1-value&#39;)\">four-black-1</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value\\\\four-black-2-value&#39;)\">four-black-2</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value&#39;)\">three-black-2</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value\\\\four-black-3-value&#39;)\">four-black-3</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value\\\\four-black-4-value&#39;)\">four-black-4</a></li><li><a class=\"level2\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value&#39;)\">two-black-2</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value&#39;)\">three-black-3</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value\\\\four-black-5-value&#39;)\">four-black-5</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value\\\\four-black-6-value&#39;)\">four-black-6</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value&#39;)\">three-black-4</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value\\\\four-black-7-value&#39;)\">four-black-7</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value\\\\four-black-8-value&#39;)\">four-black-8</a></li>\r\n\t</ul>\r\n</div><a id=\"Menu_SkipLink\"></a>";
+                       #endregion
+                       RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Vertical_List)).Run ();
+                       RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Vertical");
+#if !DOT_NET
+                       // Throws NREX on .NET 4.0, most probably because the adapter's Control is null
+                       RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Vertical)).Run ();
+                       RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithDefaultAdapter_Vertical");
+#endif
+                       #region OriginControlHtml
+                       OriginControlHtml = "<a href=\"#Menu_SkipLink\"><img alt=\"Skip Navigation Links\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"Menu\">\r\n\t<ul class=\"level1\">\r\n\t\t<li><a class=\"level1\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value&#39;)\">one-black</a></li><li><a class=\"level2\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value&#39;)\">two-black-1</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value&#39;)\">three-black-1</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value\\\\four-black-1-value&#39;)\">four-black-1</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-1-value\\\\four-black-2-value&#39;)\">four-black-2</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value&#39;)\">three-black-2</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value\\\\four-black-3-value&#39;)\">four-black-3</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-1-value\\\\three-black-2-value\\\\four-black-4-value&#39;)\">four-black-4</a></li><li><a class=\"level2\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value&#39;)\">two-black-2</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value&#39;)\">three-black-3</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value\\\\four-black-5-value&#39;)\">four-black-5</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-3-value\\\\four-black-6-value&#39;)\">four-black-6</a></li><li><a class=\"level3\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value&#39;)\">three-black-4</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value\\\\four-black-7-value&#39;)\">four-black-7</a></li><li><a class=\"level4\" href=\"#\" onclick=\"__doPostBack(&#39;Menu&#39;,&#39;one-black-value\\\\two-black-2-value\\\\three-black-4-value\\\\four-black-8-value&#39;)\">four-black-8</a></li>\r\n\t</ul>\r\n</div><a id=\"Menu_SkipLink\"></a>";
+                       #endregion
+                       RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Horizontal_List)).Run ();
+                       RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Horizontal");
+#if !DOT_NET
+                       RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Horizontal)).Run ();
+                       RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
+                       HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithBaseAdapter_Horizontal");
+#endif
+               }
+#endif
                class MyMenuAdapter : global::System.Web.UI.WebControls.Adapters.MenuAdapter
                {
                        protected override void RenderItem (HtmlTextWriter writer, 
@@ -1402,7 +1485,26 @@ namespace MonoTests.System.Web.UI.WebControls
                        m.StaticDisplayLevels = 4;
                        AddMenuToPage (p, m);
                }
+#if NET_4_0
+               public static void Menu_RenderStaticItems_Vertical_List (Page p)
+               {
+                       Menu m = CreateMenuForRenderTests (null, false);
+                       m.RenderingCompatibility = new Version (4, 0);
+                       m.RenderingMode = MenuRenderingMode.List;
+                       m.StaticDisplayLevels = 4;
+                       AddMenuToPage (p, m);
+               }
 
+               public static void Menu_RenderStaticItems_Horizontal_List (Page p)
+               {
+                       Menu m = CreateMenuForRenderTests (null, false);
+                       m.Orientation = Orientation.Horizontal;
+                       m.StaticDisplayLevels = 4;
+                       m.RenderingCompatibility = new Version (4, 0);
+                       m.RenderingMode = MenuRenderingMode.List;
+                       AddMenuToPage (p, m);
+               }
+#endif
                public static void Menu_RenderStaticItemsWithBaseAdapter_Vertical (Page p) {
                        Menu m = CreateMenuForRenderTests (new MyWebControl.Adapters.MenuAdapter());
                        m.StaticDisplayLevels = 4;
@@ -1651,7 +1753,11 @@ namespace MonoTests.System.Web.UI.WebControls
                [Category ("NotDotNet")] // implementation specific
                public void Menu_PostBack ()
                {
+                       PageDelegates pd = new PageDelegates ();
+                       pd.Init = Menu_SetTableMode;
                        WebTest t = new WebTest ("PostBackMenuTest.aspx");
+                       t.Invoker = new PageInvoker (pd);
+
                        string str = t.Run ();
                        FormRequest fr = new FormRequest (t.Response, "form1");
                        fr.Controls.Add ("__EVENTTARGET");
@@ -1659,12 +1765,20 @@ namespace MonoTests.System.Web.UI.WebControls
                        fr.Controls["__EVENTTARGET"].Value = "Menu1";
                        fr.Controls ["__EVENTARGUMENT"].Value = "0_1";
                        t.Request = fr;
-                       PageDelegates pd = new PageDelegates ();
                        pd.PreRender = _MenuItemsPost;
                        t.Invoker = new PageInvoker (pd);
                        t.Run ();
                }
 
+               public static void Menu_SetTableMode (Page p)
+               {
+#if NET_4_0
+                       Menu m = p.Form.FindControl ("Menu1") as Menu;
+                       Assert.IsNotNull (m, "Menu present");
+                       m.RenderingMode = MenuRenderingMode.Table;
+#endif
+               }
+               
                public static void _MenuItemsPost (Page p)
                {
                        foreach (Control c in p.Form.Controls) {
@@ -1679,7 +1793,11 @@ namespace MonoTests.System.Web.UI.WebControls
                [Category ("NunitWeb")]
                public void Menu_PostBackFireEvents_1 ()
                {
+                       PageDelegates pd = new PageDelegates ();
+                       pd.Init = Menu_SetTableMode;
                        WebTest t = new WebTest ("PostBackMenuTest.aspx");
+                       t.Invoker = new PageInvoker (pd);
+                       
                        string str = t.Run ();
                        FormRequest fr = new FormRequest (t.Response, "form1");
                        fr.Controls.Add ("__EVENTTARGET");
@@ -1709,7 +1827,8 @@ namespace MonoTests.System.Web.UI.WebControls
 
                public static void PostBackFireEvents_Init (Page p)
                {
-                       Menu m = new Menu ();
+                       Menu_SetTableMode (p);
+                       Menu m = new MenuTable ();
                        m.MenuItemDataBound += new MenuEventHandler (MenuItemDataBound_Event);
                        m.DataSource = LoadXml ();
                        p.Controls.Add (m);
@@ -1737,7 +1856,7 @@ namespace MonoTests.System.Web.UI.WebControls
                [Test]
                public void MenuItemCollection1 ()
                {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        fillMenu (m);
 
                        ((IStateManager) m.Items).TrackViewState ();
@@ -1746,7 +1865,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode";
                        object state = ((IStateManager) m.Items).SaveViewState ();
 
-                       Menu copy = new Menu ();
+                       Menu copy = new MenuTable ();
                        fillMenu (copy);
                        ((IStateManager) copy.Items).TrackViewState ();
                        ((IStateManager) copy.Items).LoadViewState (state);
@@ -1763,7 +1882,7 @@ namespace MonoTests.System.Web.UI.WebControls
                [Test]
                public void MenuItemCollection2 ()
                {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        fillMenu (m);
 
                        ((IStateManager) m.Items).TrackViewState ();
@@ -1773,7 +1892,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        m.Items.Add (new MenuItem ("root 2"));
                        object state = ((IStateManager) m.Items).SaveViewState ();
 
-                       Menu copy = new Menu ();
+                       Menu copy = new MenuTable ();
                        fillMenu (copy);
                        ((IStateManager) copy.Items).TrackViewState ();
                        ((IStateManager) copy.Items).LoadViewState (state);
@@ -1791,7 +1910,7 @@ namespace MonoTests.System.Web.UI.WebControls
                [Test]
                public void MenuItemCollection3 ()
                {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        fillMenu (m);
                        m.Items.Add (new MenuItem ("root 2"));
 
@@ -1802,7 +1921,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        m.Items.RemoveAt (1);
                        object state = ((IStateManager) m.Items).SaveViewState ();
 
-                       Menu copy = new Menu ();
+                       Menu copy = new MenuTable ();
                        fillMenu (copy);
                        copy.Items.Add (new MenuItem ("root 2"));
                        ((IStateManager) copy.Items).TrackViewState ();
@@ -1820,7 +1939,7 @@ namespace MonoTests.System.Web.UI.WebControls
                [Test]
                public void MenuItemCollection4 ()
                {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        fillMenu (m);
                        m.Items.Add (new MenuItem ("root 2"));
                        m.Items [0].ChildItems.RemoveAt (1);
@@ -1831,7 +1950,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode";
                        object state = ((IStateManager) m.Items).SaveViewState ();
 
-                       Menu copy = new Menu ();
+                       Menu copy = new MenuTable ();
                        fillMenu (copy);
                        copy.Items.Add (new MenuItem ("root 2"));
                        copy.Items [0].ChildItems.RemoveAt (1);
@@ -1850,13 +1969,13 @@ namespace MonoTests.System.Web.UI.WebControls
                [Test]
                public void MenuItemCollection5 ()
                {
-                       Menu m = new Menu ();
+                       Menu m = new MenuTable ();
                        ((IStateManager) m.Items).TrackViewState ();
                        fillMenu (m);
 
                        object state = ((IStateManager) m.Items).SaveViewState ();
 
-                       Menu copy = new Menu ();
+                       Menu copy = new MenuTable ();
                        ((IStateManager) copy.Items).TrackViewState ();
                        ((IStateManager) copy.Items).LoadViewState (state);
 
index 40391a54d2a919581d88784742f38c52ad82c28f..b4003c4d5e69dbbb0aa1df2930c96c524366f83f 100644 (file)
@@ -28,6 +28,7 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Web;
 using System.Web.Hosting;
 
@@ -61,24 +62,9 @@ namespace StandAloneRunnerSupport
                {
                        if (String.IsNullOrEmpty (origHtml))
                                return origHtml;
-                       
-                       // Naive approach, enough for now
-                       int idx = origHtml.IndexOf (delimiter + "/WebResource.axd");
-                       if (idx == -1)
-                               return origHtml;
 
-                       var sb = new StringBuilder ();
-                       sb.Append (origHtml.Substring (0, idx));
-                       sb.Append (delimiter);
-                       idx++;
-                       int idx2 = origHtml.IndexOf (delimiter, idx);
-                       string webRes;
-                       sb.Append ("/WebResource.axd");
-                       
-                       if (idx2 > -1)
-                               sb.Append (origHtml.Substring (idx2));
-
-                       return sb.ToString ();
+                       // Naive approach, enough for now
+                       return new Regex (delimiter + "/WebResource\\.axd.*?" + delimiter).Replace (origHtml, delimiter + "/WebResource.axd" + delimiter);
                }
 
                public static bool HasException (string html, Type exceptionType)
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
new file mode 100644 (file)
index 0000000..cd0ef6a
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// Authors:
+//   Marek Habersack (mhabersack@novell.com)
+//
+// (C) 2010 Novell, Inc http://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 NET_4_0
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Web.Util;
+
+using StandAloneRunnerSupport;
+using StandAloneTests;
+
+using NUnit.Framework;
+
+namespace StandAloneTests.Menu_40_List
+{
+       [TestCase ("Menu_40_List", "Menu control List rendering mode for 4.0", Disabled=true)]
+       public sealed class Test_01 : ITestCase
+       {
+               public string PhysicalPath {
+                       get { return Path.Combine (Consts.BasePhysicalDir, "Menu_4.0_List"); }
+               }
+               
+               public string VirtualPath  {
+                       get { return "/"; }
+               }
+
+               public bool SetUp (List <TestRunItem> runItems)
+               {
+                       runItems.Add (new TestRunItem ("test_01.aspx", Test_01_Aspx));
+                       return true;
+               }
+               
+               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>";
+                       Helpers.ExtractAndCompareCodeFromHtml (Helpers.StripWebResourceAxdQuery (result), originalHtml, "#A1");
+               }
+       }
+}
+#endif
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
new file mode 100644 (file)
index 0000000..9e431cd
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<MenuRoot url="~/" title="Root" description="Root description">
+       <MenuNode url="http://mono-project.com/" title="Mono" description="Mono Project Home Page">
+               <MenuNode url="http://mono-project.com/Bugs" title="Mono Bugs" description="How to report Mono bugs">
+                       <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>
+</MenuRoot>
\ No newline at end of file
diff --git a/mcs/class/System.Web/Test/standalone/Menu_4.0_List/test_01.aspx b/mcs/class/System.Web/Test/standalone/Menu_4.0_List/test_01.aspx
new file mode 100644 (file)
index 0000000..af5be86
--- /dev/null
@@ -0,0 +1,25 @@
+<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+    <title></title>
+</head>
+<body>
+    <form id="form1" runat="server">
+    <div>
+       
+           <!-- START --><%= AppDomain.CurrentDomain.GetData ("BEGIN_CODE_MARKER") %><asp:Menu ID="MyMenu1" runat="server" RenderingMode="List" DataSourceID="MenuDataSource" StaticDisplayLevels="1">
+           <DataBindings>
+           <asp:MenuItemBinding DataMember="MenuRoot" Depth="0" TextField="title" NavigateUrlField="url" ToolTipField="description" />
+           <asp:MenuItemBinding DataMember="MenuNode" Depth="1" TextField="title" NavigateUrlField="url" ToolTipField="description" />
+           <asp:MenuItemBinding DataMember="MenuNode" Depth="2" TextField="title" NavigateUrlField="url" ToolTipField="description" />
+           <asp:MenuItemBinding DataMember="MenuNode" Depth="3" TextField="title" NavigateUrlField="url" ToolTipField="description" />
+           </DataBindings>
+           </asp:Menu><%= AppDomain.CurrentDomain.GetData ("END_CODE_MARKER") %><!-- END -->
+           <asp:XmlDataSource ID="MenuDataSource" runat="server" DataFile="~/App_Data/MenuData.xml" />
+    </div>
+    </form>
+</body>
+</html>
diff --git a/mcs/class/System.Web/Test/standalone/Menu_4.0_List/web.config b/mcs/class/System.Web/Test/standalone/Menu_4.0_List/web.config
new file mode 100644 (file)
index 0000000..a965c3a
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<configuration>
+       <system.web>
+               <compilation debug="true" targetFramework="4.0" />
+               <customErrors mode="Off"/>
+       </system.web>
+</configuration>
index 71cc8187c4932eaeef562a24c444621fe3d6badb..133fd49af705b2067ca5f9aa73be43303b2a5b5c 100644 (file)
@@ -28,8 +28,11 @@ System.Web.UI.WebControls/IDataBoundItemControl.cs
 System.Web.UI.WebControls/IDataBoundListControl.cs
 System.Web.UI.WebControls/IFieldControl.cs
 System.Web.UI.WebControls/IRenderOuterTable.cs
+System.Web.UI.WebControls/MenuListRenderer.cs
 System.Web.UI.WebControls/MenuRenderingMode.cs
+System.Web.UI.WebControls/NamedCssStyleCollection.cs
 System.Web.UI.WebControls/RouteParameter.cs
+System.Web.UI.WebControls/StyleBlock.cs
 System.Web.UI.WebControls/WizardLayoutContainer.cs
 System.Web.UI.WebControls/WizardLayoutNavigationContainer.cs
 System.Web.Util/RequestValidationSource.cs
index bf5e98df2011729228648566b3a2630978048005..545ca1cb277005ee51816efdcd9d509eca66977a 100644 (file)
@@ -129,7 +129,7 @@ namespace Mono.Xml.Xsl {
                        
                        public object Compile (XPathNavigator node)
                        {
-#if TARGET_JVM || MONOTOUCH
+#if TARGET_JVM || MOBILE
                                throw new NotImplementedException ();
 #else
                                string suffix = "";
index aa902796b82c6da2aec655a2db43f7acbf088a20..649df76f1222ddbfe2b77fba9e59fd842883d1ed 100644 (file)
@@ -113,7 +113,7 @@ namespace System.Xml.Schema
                                innerException)
                {
                        hasLineInfo = true;
-#if !MONOTOUCH
+#if !MOBILE
                        this.lineNumber = sourceObject.LineNumber;
                        this.linePosition = sourceObject.LinePosition;
                        this.sourceObj  =       sourceObject;
@@ -163,7 +163,7 @@ namespace System.Xml.Schema
                                        (sourceUri != null && sourceUri != "") ? "URI: " + sourceUri + " ." : "",
                                        lineNumber,
                                        linePosition);
-#if !MONOTOUCH
+#if !MOBILE
                        if (sourceObj != null)
                                msg += String.Format (CultureInfo.InvariantCulture, " Related schema item SourceUri: {0}, Line {1}, Position {2}.",
                                        sourceObj.SourceUri, sourceObj.LineNumber, sourceObj.LinePosition);
index 9bdea9d9edfe77bdbfbfd7d01b77a497551427e7..36046c9e578957e02cb5e5b89eeb003fd87cb358 100644 (file)
@@ -127,7 +127,7 @@ namespace System.Xml.Serialization
                {
                        get { return _mapMember.Name; }
                }
-#if !TARGET_JVM        && !MONOTOUCH
+#if !TARGET_JVM        && !MOBILE
                public string GenerateTypeName (System.CodeDom.Compiler.CodeDomProvider codeProvider)
                {
                        string ret = codeProvider.CreateValidIdentifier (_mapMember.TypeData.FullTypeName);
index 91e8fac3481be9412f4fb729c8aead31dedbe809..079fadd1f1b69ff6c6f9220fb6c550cc8acceee9 100644 (file)
@@ -30,7 +30,7 @@
 //
 
 using System.Xml;
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
 using System.CodeDom.Compiler;
 #endif
 using System.Xml.Schema;
@@ -43,7 +43,7 @@ using System.Xml.Serialization.Configuration;
 namespace System.Xml.Serialization 
 {
        public class XmlSchemaImporter
-#if NET_2_0 && !MONOTOUCH
+#if NET_2_0 && !MOBILE
                : SchemaImporter
 #endif
        {
@@ -100,7 +100,7 @@ namespace System.Xml.Serialization
                }
                
 #if NET_2_0
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
                [MonoTODO]
                public XmlSchemaImporter (XmlSchemas schemas, CodeGenerationOptions options, CodeDomProvider codeProvider, ImportContext context)
                {
index 380774f4be215023671db1580ab55d17e3c0ffbe..94954e0d8b288c13fa6f48966b2cad4ba00cd289 100644 (file)
@@ -37,7 +37,7 @@ using System.Reflection;
 using System.Xml;
 using System.Xml.Schema;
 using System.Text;
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
 using System.CodeDom;
 using System.CodeDom.Compiler;
 using Microsoft.CSharp;
@@ -120,7 +120,7 @@ namespace System.Xml.Serialization
                        //       debugging pourposes by adding the "nofallback" option.
                        //       For example: MONO_XMLSERIALIZER_THS=0,nofallback
                        
-#if TARGET_JVM || MONOTOUCH
+#if TARGET_JVM || MOBILE
                        string db = null;
                        string th = null;
                        generationThreshold = -1;
@@ -150,7 +150,7 @@ namespace System.Xml.Serialization
                        }
 #endif
                        deleteTempFiles = (db == null || db == "no");
-#if !MONOTOUCH                 
+#if !MOBILE
                        IDictionary table = (IDictionary) ConfigurationSettings.GetConfig("system.diagnostics");
                        if (table != null) 
                        {
@@ -513,7 +513,7 @@ namespace System.Xml.Serialization
                        throw new NotImplementedException ();
                }
 
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
                public static Assembly GenerateSerializer (Type[] types, XmlMapping[] mappings)
                {
                        return GenerateSerializer (types, mappings, null);
@@ -619,7 +619,7 @@ namespace System.Xml.Serialization
                        return new XmlSerializationReaderInterpreter (typeMapping);
                }
                
-#if TARGET_JVM || MONOTOUCH
+#if TARGET_JVM || MOBILE
                void CheckGeneratedTypes (XmlMapping typeMapping)
                {
                        throw new NotImplementedException();
index d6687cc719a3273639378c52a4b6806c97963a79..3500e44c0b74a00c87f18417ea2c71d1fd2f4d9b 100644 (file)
@@ -49,7 +49,7 @@ namespace System.Xml.Xsl
                bool enable_debug;
                object debugger;
                CompiledStylesheet s;
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
 //             TempFileCollection temporary_files;
 #endif
                XmlWriterSettings output_settings = new XmlWriterSettings ();
@@ -72,7 +72,7 @@ namespace System.Xml.Xsl
                        get { return output_settings; }
                }
 
-#if !TARGET_JVM && !MONOTOUCH
+#if !TARGET_JVM && !MOBILE
                [MonoTODO]
                public TempFileCollection TemporaryFiles {
                        get { return null; /*temporary_files;*/ }
index b84a5d1b6edcdc430fab9bc2ea35b4859615554b..f11ad5faf7c9df50358ea1f7361150ea679db6ee 100644 (file)
@@ -31,7 +31,7 @@
 using System.IO;
 using System.Reflection;
 
-#if !MONOTOUCH
+#if !MOBILE
 namespace System.Xml
 {
        public class XmlXapResolver : XmlResolver
diff --git a/mcs/class/System.XML/mobile_System.Xml.dll.sources b/mcs/class/System.XML/mobile_System.Xml.dll.sources
new file mode 100644 (file)
index 0000000..096a177
--- /dev/null
@@ -0,0 +1,372 @@
+Assembly/AssemblyInfo.cs
+../../build/common/Consts.cs
+../../build/common/Locale.cs
+
+Mono.Xml.Schema/XmlSchemaValidatingReader.cs
+Mono.Xml.Schema/XsdIdentityPath.cs
+Mono.Xml.Schema/XsdIdentityState.cs
+Mono.Xml.Schema/XsdKeyTable.cs
+Mono.Xml.Schema/XsdParticleValidationState.cs
+Mono.Xml.Schema/XsdValidatingReader.cs
+Mono.Xml.Schema/XsdWildcard.cs
+Mono.Xml.XPath/DTMXPathDocument.cs
+Mono.Xml.XPath/DTMXPathDocumentBuilder.cs
+Mono.Xml.XPath/DTMXPathDocumentWriter.cs
+Mono.Xml.XPath/DTMXPathNavigator.cs
+Mono.Xml.XPath/DTMXPathNode.cs
+Mono.Xml.XPath/DTMXPathDocument2.cs
+Mono.Xml.XPath/DTMXPathDocumentBuilder2.cs
+Mono.Xml.XPath/DTMXPathDocumentWriter2.cs
+Mono.Xml.XPath/DTMXPathNavigator2.cs
+Mono.Xml.XPath/DTMXPathNode2.cs
+Mono.Xml.XPath/IdPattern.cs
+Mono.Xml.XPath/KeyPattern.cs
+Mono.Xml.XPath/LocationPathPattern.cs
+Mono.Xml.XPath/Pattern.cs
+Mono.Xml.XPath/UnionPattern.cs
+Mono.Xml.XPath/XPathEditableDocument.cs
+Mono.Xml.XPath/XPathNavigatorReader.cs
+Mono.Xml.Xsl.Operations/XslApplyImports.cs
+Mono.Xml.Xsl.Operations/XslApplyTemplates.cs
+Mono.Xml.Xsl.Operations/XslAttribute.cs
+Mono.Xml.Xsl.Operations/XslAvt.cs
+Mono.Xml.Xsl.Operations/XslCallTemplate.cs
+Mono.Xml.Xsl.Operations/XslChoose.cs
+Mono.Xml.Xsl.Operations/XslComment.cs
+Mono.Xml.Xsl.Operations/XslCompiledElement.cs
+Mono.Xml.Xsl.Operations/XslCopy.cs
+Mono.Xml.Xsl.Operations/XslCopyOf.cs
+Mono.Xml.Xsl.Operations/XslElement.cs
+Mono.Xml.Xsl.Operations/XslFallback.cs
+Mono.Xml.Xsl.Operations/XslForEach.cs
+Mono.Xml.Xsl.Operations/XslIf.cs
+Mono.Xml.Xsl.Operations/XslLiteralElement.cs
+Mono.Xml.Xsl.Operations/XslMessage.cs
+Mono.Xml.Xsl.Operations/XslNotSupportedOperation.cs
+Mono.Xml.Xsl.Operations/XslNumber.cs
+Mono.Xml.Xsl.Operations/XslOperation.cs
+Mono.Xml.Xsl.Operations/XslProcessingInstruction.cs
+Mono.Xml.Xsl.Operations/XslTemplateContent.cs
+Mono.Xml.Xsl.Operations/XslText.cs
+Mono.Xml.Xsl.Operations/XslValueOf.cs
+Mono.Xml.Xsl.Operations/XslVariable.cs
+Mono.Xml.Xsl/Attribute.cs
+Mono.Xml.Xsl/Compiler.cs
+Mono.Xml.Xsl/Debug.cs
+Mono.Xml.Xsl/Emitter.cs
+Mono.Xml.Xsl/GenericOutputter.cs
+Mono.Xml.Xsl/HtmlEmitter.cs
+Mono.Xml.Xsl/MSXslScriptManager.cs
+Mono.Xml.Xsl/Outputter.cs
+Mono.Xml.Xsl/TextEmitter.cs
+Mono.Xml.Xsl/TextOutputter.cs
+Mono.Xml.Xsl/XmlWriterEmitter.cs
+Mono.Xml.Xsl/XslAttributeSet.cs
+Mono.Xml.Xsl/XslDecimalFormat.cs
+Mono.Xml.Xsl/XslKey.cs
+Mono.Xml.Xsl/XslOutput.cs
+Mono.Xml.Xsl/XslSortEvaluator.cs
+Mono.Xml.Xsl/XslStylesheet.cs
+Mono.Xml.Xsl/XslTemplate.cs
+Mono.Xml.Xsl/XslTransformProcessor.cs
+Mono.Xml.Xsl/XsltCompiledContext.cs
+Mono.Xml.Xsl/XsltDebuggerWrapper.cs
+Mono.Xml.Xsl/XslFunctions.cs
+Mono.Xml/IHasXmlParserContext.cs
+Mono.Xml/IHasXmlSchemaInfo.cs
+Mono.Xml/SubtreeXmlReader.cs
+Mono.Xml/XmlFilterReader.cs
+Mono.Xml/XmlNodeWriter.cs
+System.Xml/ConformanceLevel.cs
+System.Xml/DTDAutomata.cs
+System.Xml/DTDObjectModel.cs
+System.Xml/DTDReader.cs
+System.Xml/DTDValidatingReader2.cs
+System.Xml/DefaultXmlWriter.cs
+System.Xml/EntityResolvingXmlReader.cs
+System.Xml/EntityHandling.cs
+System.Xml/Formatting.cs
+System.Xml/IHasXmlNode.cs
+System.Xml/IXmlLineInfo.cs
+System.Xml/IHasXmlChildNode.cs
+System.Xml/IXmlNamespaceResolver.cs
+System.Xml/MonoFIXAttribute.cs
+System.Xml/NamespaceHandling.cs
+System.Xml/NameTable.cs
+System.Xml/NewLineHandling.cs
+System.Xml/ReadState.cs
+../../build/common/MonoTODOAttribute.cs
+System.Xml/ValidationType.cs
+System.Xml/WhitespaceHandling.cs
+System.Xml/WriteState.cs
+System.Xml/XmlEntity.cs
+System.Xml/XmlAttribute.cs
+System.Xml/XmlAttributeCollection.cs
+System.Xml/XmlCDataSection.cs
+System.Xml/XmlConstructs.cs
+System.Xml/XmlChar.cs
+System.Xml/XmlCharacterData.cs
+System.Xml/XmlComment.cs
+System.Xml/XmlNotation.cs
+System.Xml/XmlDeclaration.cs
+System.Xml/XmlDocument.cs
+System.Xml/XmlDocumentFragment.cs
+System.Xml/XmlDocumentNavigator.cs
+System.Xml/XmlDocumentType.cs
+System.Xml/XmlElement.cs
+System.Xml/XmlEntityReference.cs
+System.Xml/XmlException.cs
+System.Xml/XmlImplementation.cs
+System.Xml/XmlConvert.cs
+System.Xml/XmlDateTimeSerializationMode.cs
+System.Xml/XmlLinkedNode.cs
+System.Xml/XmlNameEntry.cs
+System.Xml/XmlNameEntryCache.cs
+System.Xml/XmlNameTable.cs
+System.Xml/XmlNamedNodeMap.cs
+System.Xml/XmlNamespaceScope.cs
+System.Xml/XmlNamespaceManager.cs
+System.Xml/XmlNode.cs
+System.Xml/XmlNodeChangedAction.cs
+System.Xml/XmlNodeChangedEventArgs.cs
+System.Xml/XmlNodeChangedEventHandler.cs
+System.Xml/XmlNodeList.cs
+System.Xml/XmlNodeListChildren.cs
+System.Xml/XmlNodeArrayList.cs
+System.Xml/XmlIteratorNodeList.cs
+System.Xml/XmlNodeOrder.cs
+System.Xml/XmlNodeReader2.cs
+System.Xml/XmlNodeReaderImpl.cs
+System.Xml/XmlNodeType.cs
+System.Xml/XmlOutputMethod.cs
+System.Xml/XmlParserContext.cs
+System.Xml/XmlProcessingInstruction.cs
+System.Xml/XmlQualifiedName.cs
+System.Xml/XmlReader.cs
+System.Xml/XmlReaderBinarySupport.cs
+System.Xml/XmlReaderSettings.cs
+System.Xml/XmlResolver.cs
+System.Xml/XmlSignificantWhitespace.cs
+System.Xml/XmlSpace.cs
+System.Xml/XmlText.cs
+System.Xml/XmlTextReader.cs
+System.Xml/XmlTextReader2.cs
+System.Xml/XmlTokenizedType.cs
+System.Xml/XmlUrlResolver.cs
+System.Xml/XmlValidatingReader.cs
+System.Xml/XmlWhitespace.cs
+System.Xml/XmlWriter.cs
+System.Xml/XmlWriterSettings.cs
+System.Xml/XmlTextWriter2.cs
+System.Xml/XmlInputStream.cs
+System.Xml/XmlParserInput.cs
+System.Xml.XPath/IXPathNavigable.cs
+System.Xml.XPath/XPathNavigator.cs
+System.Xml.XPath/XPathExpression.cs
+System.Xml.XPath/XPathItem.cs
+System.Xml.XPath/XPathNamespaceScope.cs
+System.Xml.XPath/XPathNodeIterator.cs
+System.Xml.XPath/XPathResultType.cs
+System.Xml.XPath/XPathNodeType.cs
+System.Xml.XPath/XmlDataType.cs
+System.Xml.XPath/XmlSortOrder.cs
+System.Xml.XPath/XmlCaseOrder.cs
+System.Xml.XPath/XPathDocument.cs
+System.Xml.XPath/XPathException.cs
+System.Xml.XPath/XPathComparer.cs
+System.Xml.XPath/DefaultContext.cs
+System.Xml.XPath/Expression.cs
+System.Xml.XPath/Iterator.cs
+System.Xml.XPath/Tokenizer.cs
+System.Xml.Xsl/IXsltContextFunction.cs
+System.Xml.Xsl/IXsltContextVariable.cs
+System.Xml.Xsl/XslTransform.cs
+System.Xml.Xsl/XslCompiledTransform.cs
+System.Xml.Xsl/XsltArgumentList.cs
+System.Xml.Xsl/XsltCompileException.cs
+System.Xml.Xsl/XsltContext.cs
+System.Xml.Xsl/XsltException.cs
+System.Xml.Xsl/XsltMessageEncounteredEventArgs.cs
+System.Xml.Xsl/XsltMessageEncounteredEventHandler.cs
+System.Xml.Xsl/XsltSettings.cs
+System.Xml.Schema/BuiltInDatatype.cs
+System.Xml.Schema/IXmlSchemaInfo.cs
+System.Xml.Schema/SchemaDataValueType.cs
+System.Xml.Schema/ValidationEventArgs.cs
+System.Xml.Schema/XmlAtomicValue.cs
+System.Xml.Schema/XmlSchema.cs
+System.Xml.Schema/XmlSchemaAll.cs
+System.Xml.Schema/XmlSchemaAnnotated.cs
+System.Xml.Schema/XmlSchemaAnnotation.cs
+System.Xml.Schema/XmlSchemaAny.cs
+System.Xml.Schema/XmlSchemaAnyAttribute.cs
+System.Xml.Schema/XmlSchemaAppInfo.cs
+System.Xml.Schema/XmlSchemaAttribute.cs
+System.Xml.Schema/XmlSchemaAttributeGroup.cs
+System.Xml.Schema/XmlSchemaAttributeGroupRef.cs
+System.Xml.Schema/XmlSchemaChoice.cs
+System.Xml.Schema/XmlSchemaCollection.cs
+System.Xml.Schema/XmlSchemaCollectionEnumerator.cs
+System.Xml.Schema/XmlSchemaCompilationSettings.cs
+System.Xml.Schema/XmlSchemaComplexContent.cs
+System.Xml.Schema/XmlSchemaComplexContentExtension.cs
+System.Xml.Schema/XmlSchemaComplexContentRestriction.cs
+System.Xml.Schema/XmlSchemaComplexType.cs
+System.Xml.Schema/XmlSchemaContent.cs
+System.Xml.Schema/XmlSchemaContentModel.cs
+System.Xml.Schema/XmlSchemaContentProcessing.cs
+System.Xml.Schema/XmlSchemaContentType.cs
+System.Xml.Schema/XmlSchemaDatatype.cs
+System.Xml.Schema/XmlSchemaDatatypeVariety.cs
+System.Xml.Schema/XmlSchemaDerivationMethod.cs
+System.Xml.Schema/XmlSchemaDocumentation.cs
+System.Xml.Schema/XmlSchemaElement.cs
+System.Xml.Schema/XmlSchemaEnumerationFacet.cs
+System.Xml.Schema/XmlSchemaException.cs
+System.Xml.Schema/XmlSchemaExternal.cs
+System.Xml.Schema/XmlSchemaFacet.cs
+System.Xml.Schema/XmlSchemaForm.cs
+System.Xml.Schema/XmlSchemaFractionDigitsFacet.cs
+System.Xml.Schema/XmlSchemaGroup.cs
+System.Xml.Schema/XmlSchemaGroupBase.cs
+System.Xml.Schema/XmlSchemaGroupRef.cs
+System.Xml.Schema/XmlSchemaIdentityConstraint.cs
+System.Xml.Schema/XmlSchemaImport.cs
+System.Xml.Schema/XmlSchemaInclude.cs
+System.Xml.Schema/XmlSchemaInference.cs
+System.Xml.Schema/XmlSchemaInferenceException.cs
+System.Xml.Schema/XmlSchemaInfo.cs
+System.Xml.Schema/XmlSchemaKey.cs
+System.Xml.Schema/XmlSchemaKeyref.cs
+System.Xml.Schema/XmlSchemaLengthFacet.cs
+System.Xml.Schema/XmlSchemaMaxExclusiveFacet.cs
+System.Xml.Schema/XmlSchemaMaxInclusiveFacet.cs
+System.Xml.Schema/XmlSchemaMaxLengthFacet.cs
+System.Xml.Schema/XmlSchemaMinExclusiveFacet.cs
+System.Xml.Schema/XmlSchemaMinInclusiveFacet.cs
+System.Xml.Schema/XmlSchemaMinLengthFacet.cs
+System.Xml.Schema/XmlSchemaNotation.cs
+System.Xml.Schema/XmlSchemaNumericFacet.cs
+System.Xml.Schema/XmlSchemaObject.cs
+System.Xml.Schema/XmlSchemaObjectCollection.cs
+System.Xml.Schema/XmlSchemaObjectEnumerator.cs
+System.Xml.Schema/XmlSchemaObjectTable.cs
+System.Xml.Schema/XmlSchemaParticle.cs
+System.Xml.Schema/XmlSchemaPatternFacet.cs
+System.Xml.Schema/XmlSchemaRedefine.cs
+System.Xml.Schema/XmlSchemaSet.cs
+System.Xml.Schema/XmlSchemaSequence.cs
+System.Xml.Schema/XmlSchemaSerializer.cs
+System.Xml.Schema/XmlSchemaSimpleContent.cs
+System.Xml.Schema/XmlSchemaSimpleContentExtension.cs
+System.Xml.Schema/XmlSchemaSimpleContentRestriction.cs
+System.Xml.Schema/XmlSchemaSimpleType.cs
+System.Xml.Schema/XmlSchemaSimpleTypeContent.cs
+System.Xml.Schema/XmlSchemaSimpleTypeList.cs
+System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
+System.Xml.Schema/XmlSchemaSimpleTypeUnion.cs
+System.Xml.Schema/XmlSchemaTotalDigitsFacet.cs
+System.Xml.Schema/XmlSchemaType.cs
+System.Xml.Schema/XmlSchemaUnique.cs
+System.Xml.Schema/XmlSchemaUse.cs
+System.Xml.Schema/XmlSchemaValidator.cs
+System.Xml.Schema/XmlSchemaValidity.cs
+System.Xml.Schema/XmlSchemaValidationException.cs
+System.Xml.Schema/XmlSchemaWhiteSpaceFacet.cs
+System.Xml.Schema/XmlSchemaXPath.cs
+System.Xml.Schema/XmlSeverityType.cs
+System.Xml.Schema/ValidationHandler.cs
+System.Xml.Schema/XmlSchemaUtil.cs
+System.Xml.Schema/XmlSchemaReader.cs
+System.Xml.Schema/XmlSchemaValidationFlags.cs
+System.Xml.Schema/XmlTypeCode.cs
+System.Xml.Schema/XmlValueGetter.cs
+System.Xml.Serialization/IXmlTextParser.cs
+System.Xml.Serialization/CodeGenerationOptions.cs
+System.Xml.Serialization/CodeIdentifier.cs
+System.Xml.Serialization/CodeIdentifiers.cs
+System.Xml.Serialization/IXmlSerializable.cs
+System.Xml.Serialization/ImportContext.cs
+System.Xml.Serialization/KeyHelper.cs
+System.Xml.Serialization/ReflectionHelper.cs
+System.Xml.Serialization/SchemaTypes.cs
+System.Xml.Serialization/SerializationCodeGenerator.cs
+System.Xml.Serialization/SerializationCodeGeneratorConfiguration.cs
+System.Xml.Serialization/SerializationSource.cs
+System.Xml.Serialization/SoapAttributeAttribute.cs
+System.Xml.Serialization/SoapAttributeOverrides.cs
+System.Xml.Serialization/SoapAttributes.cs
+System.Xml.Serialization/SoapElementAttribute.cs
+System.Xml.Serialization/SoapEnumAttribute.cs
+System.Xml.Serialization/SoapIgnoreAttribute.cs
+System.Xml.Serialization/SoapIncludeAttribute.cs
+System.Xml.Serialization/SoapSchemaMember.cs
+System.Xml.Serialization/SoapReflectionImporter.cs
+System.Xml.Serialization/SoapTypeAttribute.cs
+System.Xml.Serialization/TypeData.cs
+System.Xml.Serialization/TypeMember.cs
+System.Xml.Serialization/TypeTranslator.cs
+System.Xml.Serialization/UnreferencedObjectEventArgs.cs
+System.Xml.Serialization/UnreferencedObjectEventHandler.cs
+System.Xml.Serialization/XmlAnyAttributeAttribute.cs
+System.Xml.Serialization/XmlAnyElementAttribute.cs
+System.Xml.Serialization/XmlAnyElementAttributes.cs
+System.Xml.Serialization/XmlArrayAttribute.cs
+System.Xml.Serialization/XmlArrayItemAttribute.cs
+System.Xml.Serialization/XmlArrayItemAttributes.cs
+System.Xml.Serialization/XmlAttributeAttribute.cs
+System.Xml.Serialization/XmlAttributeEventArgs.cs
+System.Xml.Serialization/XmlAttributeEventHandler.cs
+System.Xml.Serialization/XmlAttributeOverrides.cs
+System.Xml.Serialization/XmlAttributes.cs
+System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs
+System.Xml.Serialization/XmlCustomFormatter.cs
+System.Xml.Serialization/XmlDeserializationEvents.cs
+System.Xml.Serialization/XmlElementAttribute.cs
+System.Xml.Serialization/XmlElementAttributes.cs
+System.Xml.Serialization/XmlElementEventArgs.cs
+System.Xml.Serialization/XmlEnumAttribute.cs
+System.Xml.Serialization/XmlIgnoreAttribute.cs
+System.Xml.Serialization/XmlIncludeAttribute.cs
+System.Xml.Serialization/XmlMemberMapping.cs
+System.Xml.Serialization/XmlMembersMapping.cs
+System.Xml.Serialization/XmlMapping.cs
+System.Xml.Serialization/XmlMappingAccess.cs
+System.Xml.Serialization/XmlNamespaceDeclarationsAttribute.cs
+System.Xml.Serialization/XmlNodeEventArgs.cs
+System.Xml.Serialization/XmlReflectionImporter.cs
+System.Xml.Serialization/XmlReflectionMember.cs
+System.Xml.Serialization/XmlRootAttribute.cs
+System.Xml.Serialization/XmlSchemaEnumerator.cs
+System.Xml.Serialization/XmlSchemaExporter.cs
+System.Xml.Serialization/XmlSchemaImporter.cs
+System.Xml.Serialization/XmlSchemaProviderAttribute.cs
+System.Xml.Serialization/XmlSchemas.cs
+System.Xml.Serialization/XmlSerializationCollectionFixupCallback.cs
+System.Xml.Serialization/XmlSerializationFixupCallback.cs
+System.Xml.Serialization/XmlSerializationGeneratedCode.cs
+System.Xml.Serialization/XmlSerializationReadCallback.cs
+System.Xml.Serialization/XmlSerializationReader.cs
+System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
+System.Xml.Serialization/XmlSerializationWriteCallback.cs
+System.Xml.Serialization/XmlSerializationWriter.cs
+System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
+System.Xml.Serialization/XmlSerializer.cs
+System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs
+System.Xml.Serialization/XmlSerializerFactory.cs
+System.Xml.Serialization/XmlSerializerImplementation.cs
+System.Xml.Serialization/XmlSerializerNamespaces.cs
+System.Xml.Serialization/XmlSerializerVersionAttribute.cs
+System.Xml.Serialization/XmlTextAttribute.cs
+System.Xml.Serialization/XmlTypeAttribute.cs
+System.Xml.Serialization/XmlTypeMapElementInfo.cs
+System.Xml.Serialization/XmlTypeMapMember.cs
+System.Xml.Serialization/XmlTypeMapMemberAttribute.cs
+System.Xml.Serialization/XmlTypeMapMemberElement.cs
+System.Xml.Serialization/XmlTypeMapMemberNamespaces.cs
+System.Xml.Serialization/XmlTypeMapping.cs
+System.Xml.Serialization/XmlElementEventHandler.cs
+System.Xml.Serialization/XmlNodeEventHandler.cs
+
+System.Xml/XQueryConvert.cs
+
diff --git a/mcs/class/System.XML/monodroid_System.Xml.dll.sources b/mcs/class/System.XML/monodroid_System.Xml.dll.sources
new file mode 100644 (file)
index 0000000..b663093
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.Xml.dll.sources
index 096a1770a18b1ff5a128d78651df841b8ea80d8d..b6630930f75f0e945e463baa6f4a74e0cf21998d 100644 (file)
@@ -1,372 +1 @@
-Assembly/AssemblyInfo.cs
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-
-Mono.Xml.Schema/XmlSchemaValidatingReader.cs
-Mono.Xml.Schema/XsdIdentityPath.cs
-Mono.Xml.Schema/XsdIdentityState.cs
-Mono.Xml.Schema/XsdKeyTable.cs
-Mono.Xml.Schema/XsdParticleValidationState.cs
-Mono.Xml.Schema/XsdValidatingReader.cs
-Mono.Xml.Schema/XsdWildcard.cs
-Mono.Xml.XPath/DTMXPathDocument.cs
-Mono.Xml.XPath/DTMXPathDocumentBuilder.cs
-Mono.Xml.XPath/DTMXPathDocumentWriter.cs
-Mono.Xml.XPath/DTMXPathNavigator.cs
-Mono.Xml.XPath/DTMXPathNode.cs
-Mono.Xml.XPath/DTMXPathDocument2.cs
-Mono.Xml.XPath/DTMXPathDocumentBuilder2.cs
-Mono.Xml.XPath/DTMXPathDocumentWriter2.cs
-Mono.Xml.XPath/DTMXPathNavigator2.cs
-Mono.Xml.XPath/DTMXPathNode2.cs
-Mono.Xml.XPath/IdPattern.cs
-Mono.Xml.XPath/KeyPattern.cs
-Mono.Xml.XPath/LocationPathPattern.cs
-Mono.Xml.XPath/Pattern.cs
-Mono.Xml.XPath/UnionPattern.cs
-Mono.Xml.XPath/XPathEditableDocument.cs
-Mono.Xml.XPath/XPathNavigatorReader.cs
-Mono.Xml.Xsl.Operations/XslApplyImports.cs
-Mono.Xml.Xsl.Operations/XslApplyTemplates.cs
-Mono.Xml.Xsl.Operations/XslAttribute.cs
-Mono.Xml.Xsl.Operations/XslAvt.cs
-Mono.Xml.Xsl.Operations/XslCallTemplate.cs
-Mono.Xml.Xsl.Operations/XslChoose.cs
-Mono.Xml.Xsl.Operations/XslComment.cs
-Mono.Xml.Xsl.Operations/XslCompiledElement.cs
-Mono.Xml.Xsl.Operations/XslCopy.cs
-Mono.Xml.Xsl.Operations/XslCopyOf.cs
-Mono.Xml.Xsl.Operations/XslElement.cs
-Mono.Xml.Xsl.Operations/XslFallback.cs
-Mono.Xml.Xsl.Operations/XslForEach.cs
-Mono.Xml.Xsl.Operations/XslIf.cs
-Mono.Xml.Xsl.Operations/XslLiteralElement.cs
-Mono.Xml.Xsl.Operations/XslMessage.cs
-Mono.Xml.Xsl.Operations/XslNotSupportedOperation.cs
-Mono.Xml.Xsl.Operations/XslNumber.cs
-Mono.Xml.Xsl.Operations/XslOperation.cs
-Mono.Xml.Xsl.Operations/XslProcessingInstruction.cs
-Mono.Xml.Xsl.Operations/XslTemplateContent.cs
-Mono.Xml.Xsl.Operations/XslText.cs
-Mono.Xml.Xsl.Operations/XslValueOf.cs
-Mono.Xml.Xsl.Operations/XslVariable.cs
-Mono.Xml.Xsl/Attribute.cs
-Mono.Xml.Xsl/Compiler.cs
-Mono.Xml.Xsl/Debug.cs
-Mono.Xml.Xsl/Emitter.cs
-Mono.Xml.Xsl/GenericOutputter.cs
-Mono.Xml.Xsl/HtmlEmitter.cs
-Mono.Xml.Xsl/MSXslScriptManager.cs
-Mono.Xml.Xsl/Outputter.cs
-Mono.Xml.Xsl/TextEmitter.cs
-Mono.Xml.Xsl/TextOutputter.cs
-Mono.Xml.Xsl/XmlWriterEmitter.cs
-Mono.Xml.Xsl/XslAttributeSet.cs
-Mono.Xml.Xsl/XslDecimalFormat.cs
-Mono.Xml.Xsl/XslKey.cs
-Mono.Xml.Xsl/XslOutput.cs
-Mono.Xml.Xsl/XslSortEvaluator.cs
-Mono.Xml.Xsl/XslStylesheet.cs
-Mono.Xml.Xsl/XslTemplate.cs
-Mono.Xml.Xsl/XslTransformProcessor.cs
-Mono.Xml.Xsl/XsltCompiledContext.cs
-Mono.Xml.Xsl/XsltDebuggerWrapper.cs
-Mono.Xml.Xsl/XslFunctions.cs
-Mono.Xml/IHasXmlParserContext.cs
-Mono.Xml/IHasXmlSchemaInfo.cs
-Mono.Xml/SubtreeXmlReader.cs
-Mono.Xml/XmlFilterReader.cs
-Mono.Xml/XmlNodeWriter.cs
-System.Xml/ConformanceLevel.cs
-System.Xml/DTDAutomata.cs
-System.Xml/DTDObjectModel.cs
-System.Xml/DTDReader.cs
-System.Xml/DTDValidatingReader2.cs
-System.Xml/DefaultXmlWriter.cs
-System.Xml/EntityResolvingXmlReader.cs
-System.Xml/EntityHandling.cs
-System.Xml/Formatting.cs
-System.Xml/IHasXmlNode.cs
-System.Xml/IXmlLineInfo.cs
-System.Xml/IHasXmlChildNode.cs
-System.Xml/IXmlNamespaceResolver.cs
-System.Xml/MonoFIXAttribute.cs
-System.Xml/NamespaceHandling.cs
-System.Xml/NameTable.cs
-System.Xml/NewLineHandling.cs
-System.Xml/ReadState.cs
-../../build/common/MonoTODOAttribute.cs
-System.Xml/ValidationType.cs
-System.Xml/WhitespaceHandling.cs
-System.Xml/WriteState.cs
-System.Xml/XmlEntity.cs
-System.Xml/XmlAttribute.cs
-System.Xml/XmlAttributeCollection.cs
-System.Xml/XmlCDataSection.cs
-System.Xml/XmlConstructs.cs
-System.Xml/XmlChar.cs
-System.Xml/XmlCharacterData.cs
-System.Xml/XmlComment.cs
-System.Xml/XmlNotation.cs
-System.Xml/XmlDeclaration.cs
-System.Xml/XmlDocument.cs
-System.Xml/XmlDocumentFragment.cs
-System.Xml/XmlDocumentNavigator.cs
-System.Xml/XmlDocumentType.cs
-System.Xml/XmlElement.cs
-System.Xml/XmlEntityReference.cs
-System.Xml/XmlException.cs
-System.Xml/XmlImplementation.cs
-System.Xml/XmlConvert.cs
-System.Xml/XmlDateTimeSerializationMode.cs
-System.Xml/XmlLinkedNode.cs
-System.Xml/XmlNameEntry.cs
-System.Xml/XmlNameEntryCache.cs
-System.Xml/XmlNameTable.cs
-System.Xml/XmlNamedNodeMap.cs
-System.Xml/XmlNamespaceScope.cs
-System.Xml/XmlNamespaceManager.cs
-System.Xml/XmlNode.cs
-System.Xml/XmlNodeChangedAction.cs
-System.Xml/XmlNodeChangedEventArgs.cs
-System.Xml/XmlNodeChangedEventHandler.cs
-System.Xml/XmlNodeList.cs
-System.Xml/XmlNodeListChildren.cs
-System.Xml/XmlNodeArrayList.cs
-System.Xml/XmlIteratorNodeList.cs
-System.Xml/XmlNodeOrder.cs
-System.Xml/XmlNodeReader2.cs
-System.Xml/XmlNodeReaderImpl.cs
-System.Xml/XmlNodeType.cs
-System.Xml/XmlOutputMethod.cs
-System.Xml/XmlParserContext.cs
-System.Xml/XmlProcessingInstruction.cs
-System.Xml/XmlQualifiedName.cs
-System.Xml/XmlReader.cs
-System.Xml/XmlReaderBinarySupport.cs
-System.Xml/XmlReaderSettings.cs
-System.Xml/XmlResolver.cs
-System.Xml/XmlSignificantWhitespace.cs
-System.Xml/XmlSpace.cs
-System.Xml/XmlText.cs
-System.Xml/XmlTextReader.cs
-System.Xml/XmlTextReader2.cs
-System.Xml/XmlTokenizedType.cs
-System.Xml/XmlUrlResolver.cs
-System.Xml/XmlValidatingReader.cs
-System.Xml/XmlWhitespace.cs
-System.Xml/XmlWriter.cs
-System.Xml/XmlWriterSettings.cs
-System.Xml/XmlTextWriter2.cs
-System.Xml/XmlInputStream.cs
-System.Xml/XmlParserInput.cs
-System.Xml.XPath/IXPathNavigable.cs
-System.Xml.XPath/XPathNavigator.cs
-System.Xml.XPath/XPathExpression.cs
-System.Xml.XPath/XPathItem.cs
-System.Xml.XPath/XPathNamespaceScope.cs
-System.Xml.XPath/XPathNodeIterator.cs
-System.Xml.XPath/XPathResultType.cs
-System.Xml.XPath/XPathNodeType.cs
-System.Xml.XPath/XmlDataType.cs
-System.Xml.XPath/XmlSortOrder.cs
-System.Xml.XPath/XmlCaseOrder.cs
-System.Xml.XPath/XPathDocument.cs
-System.Xml.XPath/XPathException.cs
-System.Xml.XPath/XPathComparer.cs
-System.Xml.XPath/DefaultContext.cs
-System.Xml.XPath/Expression.cs
-System.Xml.XPath/Iterator.cs
-System.Xml.XPath/Tokenizer.cs
-System.Xml.Xsl/IXsltContextFunction.cs
-System.Xml.Xsl/IXsltContextVariable.cs
-System.Xml.Xsl/XslTransform.cs
-System.Xml.Xsl/XslCompiledTransform.cs
-System.Xml.Xsl/XsltArgumentList.cs
-System.Xml.Xsl/XsltCompileException.cs
-System.Xml.Xsl/XsltContext.cs
-System.Xml.Xsl/XsltException.cs
-System.Xml.Xsl/XsltMessageEncounteredEventArgs.cs
-System.Xml.Xsl/XsltMessageEncounteredEventHandler.cs
-System.Xml.Xsl/XsltSettings.cs
-System.Xml.Schema/BuiltInDatatype.cs
-System.Xml.Schema/IXmlSchemaInfo.cs
-System.Xml.Schema/SchemaDataValueType.cs
-System.Xml.Schema/ValidationEventArgs.cs
-System.Xml.Schema/XmlAtomicValue.cs
-System.Xml.Schema/XmlSchema.cs
-System.Xml.Schema/XmlSchemaAll.cs
-System.Xml.Schema/XmlSchemaAnnotated.cs
-System.Xml.Schema/XmlSchemaAnnotation.cs
-System.Xml.Schema/XmlSchemaAny.cs
-System.Xml.Schema/XmlSchemaAnyAttribute.cs
-System.Xml.Schema/XmlSchemaAppInfo.cs
-System.Xml.Schema/XmlSchemaAttribute.cs
-System.Xml.Schema/XmlSchemaAttributeGroup.cs
-System.Xml.Schema/XmlSchemaAttributeGroupRef.cs
-System.Xml.Schema/XmlSchemaChoice.cs
-System.Xml.Schema/XmlSchemaCollection.cs
-System.Xml.Schema/XmlSchemaCollectionEnumerator.cs
-System.Xml.Schema/XmlSchemaCompilationSettings.cs
-System.Xml.Schema/XmlSchemaComplexContent.cs
-System.Xml.Schema/XmlSchemaComplexContentExtension.cs
-System.Xml.Schema/XmlSchemaComplexContentRestriction.cs
-System.Xml.Schema/XmlSchemaComplexType.cs
-System.Xml.Schema/XmlSchemaContent.cs
-System.Xml.Schema/XmlSchemaContentModel.cs
-System.Xml.Schema/XmlSchemaContentProcessing.cs
-System.Xml.Schema/XmlSchemaContentType.cs
-System.Xml.Schema/XmlSchemaDatatype.cs
-System.Xml.Schema/XmlSchemaDatatypeVariety.cs
-System.Xml.Schema/XmlSchemaDerivationMethod.cs
-System.Xml.Schema/XmlSchemaDocumentation.cs
-System.Xml.Schema/XmlSchemaElement.cs
-System.Xml.Schema/XmlSchemaEnumerationFacet.cs
-System.Xml.Schema/XmlSchemaException.cs
-System.Xml.Schema/XmlSchemaExternal.cs
-System.Xml.Schema/XmlSchemaFacet.cs
-System.Xml.Schema/XmlSchemaForm.cs
-System.Xml.Schema/XmlSchemaFractionDigitsFacet.cs
-System.Xml.Schema/XmlSchemaGroup.cs
-System.Xml.Schema/XmlSchemaGroupBase.cs
-System.Xml.Schema/XmlSchemaGroupRef.cs
-System.Xml.Schema/XmlSchemaIdentityConstraint.cs
-System.Xml.Schema/XmlSchemaImport.cs
-System.Xml.Schema/XmlSchemaInclude.cs
-System.Xml.Schema/XmlSchemaInference.cs
-System.Xml.Schema/XmlSchemaInferenceException.cs
-System.Xml.Schema/XmlSchemaInfo.cs
-System.Xml.Schema/XmlSchemaKey.cs
-System.Xml.Schema/XmlSchemaKeyref.cs
-System.Xml.Schema/XmlSchemaLengthFacet.cs
-System.Xml.Schema/XmlSchemaMaxExclusiveFacet.cs
-System.Xml.Schema/XmlSchemaMaxInclusiveFacet.cs
-System.Xml.Schema/XmlSchemaMaxLengthFacet.cs
-System.Xml.Schema/XmlSchemaMinExclusiveFacet.cs
-System.Xml.Schema/XmlSchemaMinInclusiveFacet.cs
-System.Xml.Schema/XmlSchemaMinLengthFacet.cs
-System.Xml.Schema/XmlSchemaNotation.cs
-System.Xml.Schema/XmlSchemaNumericFacet.cs
-System.Xml.Schema/XmlSchemaObject.cs
-System.Xml.Schema/XmlSchemaObjectCollection.cs
-System.Xml.Schema/XmlSchemaObjectEnumerator.cs
-System.Xml.Schema/XmlSchemaObjectTable.cs
-System.Xml.Schema/XmlSchemaParticle.cs
-System.Xml.Schema/XmlSchemaPatternFacet.cs
-System.Xml.Schema/XmlSchemaRedefine.cs
-System.Xml.Schema/XmlSchemaSet.cs
-System.Xml.Schema/XmlSchemaSequence.cs
-System.Xml.Schema/XmlSchemaSerializer.cs
-System.Xml.Schema/XmlSchemaSimpleContent.cs
-System.Xml.Schema/XmlSchemaSimpleContentExtension.cs
-System.Xml.Schema/XmlSchemaSimpleContentRestriction.cs
-System.Xml.Schema/XmlSchemaSimpleType.cs
-System.Xml.Schema/XmlSchemaSimpleTypeContent.cs
-System.Xml.Schema/XmlSchemaSimpleTypeList.cs
-System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
-System.Xml.Schema/XmlSchemaSimpleTypeUnion.cs
-System.Xml.Schema/XmlSchemaTotalDigitsFacet.cs
-System.Xml.Schema/XmlSchemaType.cs
-System.Xml.Schema/XmlSchemaUnique.cs
-System.Xml.Schema/XmlSchemaUse.cs
-System.Xml.Schema/XmlSchemaValidator.cs
-System.Xml.Schema/XmlSchemaValidity.cs
-System.Xml.Schema/XmlSchemaValidationException.cs
-System.Xml.Schema/XmlSchemaWhiteSpaceFacet.cs
-System.Xml.Schema/XmlSchemaXPath.cs
-System.Xml.Schema/XmlSeverityType.cs
-System.Xml.Schema/ValidationHandler.cs
-System.Xml.Schema/XmlSchemaUtil.cs
-System.Xml.Schema/XmlSchemaReader.cs
-System.Xml.Schema/XmlSchemaValidationFlags.cs
-System.Xml.Schema/XmlTypeCode.cs
-System.Xml.Schema/XmlValueGetter.cs
-System.Xml.Serialization/IXmlTextParser.cs
-System.Xml.Serialization/CodeGenerationOptions.cs
-System.Xml.Serialization/CodeIdentifier.cs
-System.Xml.Serialization/CodeIdentifiers.cs
-System.Xml.Serialization/IXmlSerializable.cs
-System.Xml.Serialization/ImportContext.cs
-System.Xml.Serialization/KeyHelper.cs
-System.Xml.Serialization/ReflectionHelper.cs
-System.Xml.Serialization/SchemaTypes.cs
-System.Xml.Serialization/SerializationCodeGenerator.cs
-System.Xml.Serialization/SerializationCodeGeneratorConfiguration.cs
-System.Xml.Serialization/SerializationSource.cs
-System.Xml.Serialization/SoapAttributeAttribute.cs
-System.Xml.Serialization/SoapAttributeOverrides.cs
-System.Xml.Serialization/SoapAttributes.cs
-System.Xml.Serialization/SoapElementAttribute.cs
-System.Xml.Serialization/SoapEnumAttribute.cs
-System.Xml.Serialization/SoapIgnoreAttribute.cs
-System.Xml.Serialization/SoapIncludeAttribute.cs
-System.Xml.Serialization/SoapSchemaMember.cs
-System.Xml.Serialization/SoapReflectionImporter.cs
-System.Xml.Serialization/SoapTypeAttribute.cs
-System.Xml.Serialization/TypeData.cs
-System.Xml.Serialization/TypeMember.cs
-System.Xml.Serialization/TypeTranslator.cs
-System.Xml.Serialization/UnreferencedObjectEventArgs.cs
-System.Xml.Serialization/UnreferencedObjectEventHandler.cs
-System.Xml.Serialization/XmlAnyAttributeAttribute.cs
-System.Xml.Serialization/XmlAnyElementAttribute.cs
-System.Xml.Serialization/XmlAnyElementAttributes.cs
-System.Xml.Serialization/XmlArrayAttribute.cs
-System.Xml.Serialization/XmlArrayItemAttribute.cs
-System.Xml.Serialization/XmlArrayItemAttributes.cs
-System.Xml.Serialization/XmlAttributeAttribute.cs
-System.Xml.Serialization/XmlAttributeEventArgs.cs
-System.Xml.Serialization/XmlAttributeEventHandler.cs
-System.Xml.Serialization/XmlAttributeOverrides.cs
-System.Xml.Serialization/XmlAttributes.cs
-System.Xml.Serialization/XmlChoiceIdentifierAttribute.cs
-System.Xml.Serialization/XmlCustomFormatter.cs
-System.Xml.Serialization/XmlDeserializationEvents.cs
-System.Xml.Serialization/XmlElementAttribute.cs
-System.Xml.Serialization/XmlElementAttributes.cs
-System.Xml.Serialization/XmlElementEventArgs.cs
-System.Xml.Serialization/XmlEnumAttribute.cs
-System.Xml.Serialization/XmlIgnoreAttribute.cs
-System.Xml.Serialization/XmlIncludeAttribute.cs
-System.Xml.Serialization/XmlMemberMapping.cs
-System.Xml.Serialization/XmlMembersMapping.cs
-System.Xml.Serialization/XmlMapping.cs
-System.Xml.Serialization/XmlMappingAccess.cs
-System.Xml.Serialization/XmlNamespaceDeclarationsAttribute.cs
-System.Xml.Serialization/XmlNodeEventArgs.cs
-System.Xml.Serialization/XmlReflectionImporter.cs
-System.Xml.Serialization/XmlReflectionMember.cs
-System.Xml.Serialization/XmlRootAttribute.cs
-System.Xml.Serialization/XmlSchemaEnumerator.cs
-System.Xml.Serialization/XmlSchemaExporter.cs
-System.Xml.Serialization/XmlSchemaImporter.cs
-System.Xml.Serialization/XmlSchemaProviderAttribute.cs
-System.Xml.Serialization/XmlSchemas.cs
-System.Xml.Serialization/XmlSerializationCollectionFixupCallback.cs
-System.Xml.Serialization/XmlSerializationFixupCallback.cs
-System.Xml.Serialization/XmlSerializationGeneratedCode.cs
-System.Xml.Serialization/XmlSerializationReadCallback.cs
-System.Xml.Serialization/XmlSerializationReader.cs
-System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
-System.Xml.Serialization/XmlSerializationWriteCallback.cs
-System.Xml.Serialization/XmlSerializationWriter.cs
-System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
-System.Xml.Serialization/XmlSerializer.cs
-System.Xml.Serialization/XmlSerializerAssemblyAttribute.cs
-System.Xml.Serialization/XmlSerializerFactory.cs
-System.Xml.Serialization/XmlSerializerImplementation.cs
-System.Xml.Serialization/XmlSerializerNamespaces.cs
-System.Xml.Serialization/XmlSerializerVersionAttribute.cs
-System.Xml.Serialization/XmlTextAttribute.cs
-System.Xml.Serialization/XmlTypeAttribute.cs
-System.Xml.Serialization/XmlTypeMapElementInfo.cs
-System.Xml.Serialization/XmlTypeMapMember.cs
-System.Xml.Serialization/XmlTypeMapMemberAttribute.cs
-System.Xml.Serialization/XmlTypeMapMemberElement.cs
-System.Xml.Serialization/XmlTypeMapMemberNamespaces.cs
-System.Xml.Serialization/XmlTypeMapping.cs
-System.Xml.Serialization/XmlElementEventHandler.cs
-System.Xml.Serialization/XmlNodeEventHandler.cs
-
-System.Xml/XQueryConvert.cs
-
+#include mobile_System.Xml.dll.sources
index 26b47c9cb3a2a876d39360b3d5fc127774f074ce..21872462f9c8815c504f5ad53253c7b73f103565 100644 (file)
@@ -27,7 +27,7 @@ ifneq (1, $(FRAMEWORK_VERSION_MAJOR))
 LIB_MCS_FLAGS = -nowarn:618 -d:CONFIGURATION_2_0 -unsafe $(RESOURCE_FILES:%=-resource:%)
 TEST_MCS_FLAGS += -r:System.Configuration
 PROFILE_2_OR_4 := $(filter net_2_0 net_4_0, $(PROFILE))
-NOT_SL := $(filter net_2_0 net_4_0 monotouch, $(PROFILE))
+NOT_SL := $(filter net_2_0 net_4_0 monotouch monodroid, $(PROFILE))
 endif
 ifeq (2.1, $(FRAMEWORK_VERSION))
 LIB_MCS_FLAGS += -d:INSIDE_SYSTEM
diff --git a/mcs/class/System/System.ComponentModel/DateTimeOffsetConverter.cs b/mcs/class/System/System.ComponentModel/DateTimeOffsetConverter.cs
new file mode 100644 (file)
index 0000000..29c5767
--- /dev/null
@@ -0,0 +1,142 @@
+//
+// DateTimeOffsetConverter.cs
+//
+// Author:
+//     Carlos Alberto Cortez (calberto.cortez@gmail.com)
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.Globalization;
+using System.ComponentModel.Design.Serialization;
+using System.Reflection;
+
+namespace System.ComponentModel
+{
+       public class DateTimeOffsetConverter : TypeConverter
+       {
+               static readonly string OffsetPattern = "K";
+               static readonly string InvariantDatePattern = "yyyy-MM-dd";
+
+               public DateTimeOffsetConverter ()
+               {
+               }
+
+               public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
+               {
+                       if (sourceType == typeof (string))
+                               return true;
+
+                       return base.CanConvertFrom (context, sourceType);
+               }
+
+               public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
+               {
+                       if (destinationType == typeof (string) || destinationType == typeof (InstanceDescriptor))
+                               return true;
+
+                       return base.CanConvertTo (context, destinationType);
+               }
+
+               public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
+               {
+                       if (value is string) {
+                               string s = ((string) value).Trim ();
+                               if (s.Length == 0)
+                                       return DateTimeOffset.MinValue;
+
+                               DateTimeOffset retval;
+                               if (culture == null) {
+                                       if (DateTimeOffset.TryParse (s, out retval))
+                                               return retval;
+                               } else {
+                                       DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
+                                       if (DateTimeOffset.TryParse (s, info, DateTimeStyles.None, out retval))
+                                               return retval;
+                               }
+
+                               throw new FormatException (s + " is not a valid DateTimeOffset value.");
+                       }
+
+                       return base.ConvertFrom (context, culture, value);
+               }
+
+               public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
+               {
+                       if (value is DateTimeOffset) {
+                               DateTimeOffset dt_offset = (DateTimeOffset) value;
+
+                               if (destinationType == typeof (string)) {
+                                       if (dt_offset == DateTimeOffset.MinValue)
+                                               return String.Empty;
+
+                                       if (culture == null)
+                                               culture = CultureInfo.CurrentCulture;
+
+                                       // InvariantCulture gets special handling.
+                                       if (culture == CultureInfo.InvariantCulture) {
+                                               if (dt_offset.DateTime == dt_offset.Date)
+                                                       return dt_offset.ToString (InvariantDatePattern + " " + OffsetPattern);
+
+                                               return dt_offset.ToString (culture);
+                                       }
+
+                                       DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
+                                       if (dt_offset.DateTime == dt_offset.Date)
+                                               return dt_offset.ToString (info.ShortDatePattern + " " + OffsetPattern);
+
+                                       // No need to pass CultureInfo, as we already consumed the proper patterns.
+                                       return dt_offset.ToString (info.ShortDatePattern + " " + info.ShortTimePattern + " " + OffsetPattern, null);
+                               }
+
+                               if (destinationType == typeof (InstanceDescriptor)) {
+                                       ConstructorInfo ctor = typeof (DateTimeOffset).GetConstructor ( GetDateTimeOffsetArgumentTypes ());
+                                       object [] ctor_args = new object [] { dt_offset.Year, dt_offset.Month, dt_offset.Day, 
+                                               dt_offset.Hour, dt_offset.Minute, dt_offset.Second, dt_offset.Millisecond,
+                                               dt_offset.Offset };
+                                       return new InstanceDescriptor (ctor, ctor_args);
+                               }
+                       }
+
+                       return base.ConvertTo (context, culture, value, destinationType);
+               }
+
+               static Type [] ctor_argument_types;
+
+               static Type [] GetDateTimeOffsetArgumentTypes ()
+               {
+                       if (ctor_argument_types == null) {
+                               Type int_type = typeof (int);
+                               ctor_argument_types = new Type [] { int_type, int_type, int_type, int_type, int_type, int_type, int_type,
+                                       typeof (TimeSpan) };
+                       }
+
+                       return ctor_argument_types;
+               }
+       }
+}
+
+#endif
+
index 419764a28e36a7c0b4f0368538da67b4b62c6af1..a9a6a039f755418bece3451e9edc30641640ee1d 100644 (file)
@@ -321,14 +321,24 @@ namespace System.ComponentModel
                        private Type componentType;
                        private Type propertyType;
 
-                       public SimplePropertyDescriptor (Type componentType,
+#if NET_4_0
+                       protected
+#else
+                       public
+#endif
+                       SimplePropertyDescriptor (Type componentType,
                                                         string name,
                                                         Type propertyType) :
                                this (componentType, name, propertyType, null)
                        {
                        }
 
-                       public SimplePropertyDescriptor (Type componentType,
+#if NET_4_0
+                       protected
+#else
+                       public
+#endif
+                       SimplePropertyDescriptor (Type componentType,
                                                         string name,
                                                         Type propertyType,
                                                         Attribute [] attributes) : base (name, attributes)
index 63e18d03de3bd532573c87b43e933cce14f1c7e3..dc572724dd59b41f9e347e70155a0ffd734bcb40 100644 (file)
@@ -27,7 +27,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
 
 using System;
 using System.Collections;
@@ -143,8 +142,42 @@ namespace System.ComponentModel
                        return _emptyCustomTypeDescriptor;
                }
 
+#if NET_4_0
+               public virtual bool IsSupportedType (Type type)
+               {
+                       if (type == null)
+                               throw new ArgumentNullException ("type");
+
+                       if (_parent != null)
+                               return _parent.IsSupportedType (type);
+
+                       return true;
+               }
+
+               public virtual Type GetRuntimeType (Type reflectionType)
+               {
+                       if (reflectionType == null)
+                               throw new ArgumentNullException ("reflectionType");
+
+                       if (_parent != null)
+                               return _parent.GetRuntimeType (reflectionType);
+
+                       return reflectionType;
+               }
+
+               protected internal virtual IExtenderProvider[] GetExtenderProviders (object instance)
+               {
+                       if (instance == null)
+                               throw new ArgumentNullException ("instance");
+
+                       if (_parent != null)
+                               return _parent.GetExtenderProviders (instance);
+
+                       return new IExtenderProvider [] { };
+               }
+#endif
+
        }
 
 }
 
-#endif
index 35df4f0410e2b3420fa350183039717c37bd10b0..2645d7ff79ed4991b5f075137cf05db6a0f2ff74 100644 (file)
@@ -39,9 +39,7 @@ using System.Globalization;
 using System.ComponentModel.Design;
 using System.Security.Permissions;
 
-#if NET_2_0
 using System.Collections.Generic;
-#endif
 
 namespace System.ComponentModel
 {
@@ -55,7 +53,6 @@ public sealed class TypeDescriptor
        private static Hashtable typeTable = new Hashtable ();
        private static Hashtable editors;
 
-#if NET_2_0
        static object typeDescriptionProvidersLock = new object ();
        static Dictionary <Type, LinkedList <TypeDescriptionProvider>> typeDescriptionProviders;
 
@@ -67,18 +64,26 @@ public sealed class TypeDescriptor
                typeDescriptionProviders = new Dictionary <Type, LinkedList <TypeDescriptionProvider>> ();
                componentDescriptionProviders = new Dictionary <WeakObjectWrapper, LinkedList <TypeDescriptionProvider>> (new WeakObjectWrapperComparer ());
        }
-#endif
+
        private TypeDescriptor ()
        {
        }
 
-#if NET_2_0
        [MonoNotSupported ("Mono does not support COM")]
        [EditorBrowsable (EditorBrowsableState.Advanced)]
        public static Type ComObjectType {
                get { throw new NotImplementedException (); }
        }
 
+#if NET_4_0
+       [EditorBrowsable (EditorBrowsableState.Advanced)]
+       public static Type InterfaceType {
+               get {
+                       return typeof (TypeDescriptorInterface);
+               }
+       }
+#endif
+
        [EditorBrowsable (EditorBrowsableState.Advanced)]
        public static TypeDescriptionProvider AddAttributes (object instance, params Attribute [] attributes)
        {
@@ -172,11 +177,8 @@ public sealed class TypeDescriptor
 
                return instance;
        }
-#endif
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
 #if !NET_2_1
        public
 #else
@@ -258,9 +260,7 @@ public sealed class TypeDescriptor
                return GetAttributes (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static AttributeCollection GetAttributes (object component, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -282,9 +282,7 @@ public sealed class TypeDescriptor
                return GetClassName (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static string GetClassName (object component, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -307,9 +305,7 @@ public sealed class TypeDescriptor
                return GetComponentName (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static string GetComponentName (object component, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -321,15 +317,10 @@ public sealed class TypeDescriptor
                        IComponent c = component as IComponent;
                        if (c != null && c.Site != null)
                                return c.Site.Name;
-#if NET_2_0
                        return null;
-#else
-                       return component.GetType().Name;
-#endif
                }
        }
 
-#if NET_2_0
        [MonoNotSupported("")]
        public static string GetFullComponentName (object component)
        {
@@ -341,16 +332,13 @@ public sealed class TypeDescriptor
        {
                throw new NotImplementedException ();
        }
-#endif
 
        public static TypeConverter GetConverter (object component)
        {
                return GetConverter (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static TypeConverter GetConverter (object component, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -442,10 +430,8 @@ public sealed class TypeDescriptor
        {
                Type converterType = null;
                if (type != null) {
-#if NET_2_0
                        if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
                                return typeof(NullableConverter);
-#endif
                        // Is there a default converter
                        foreach (DictionaryEntry entry in DefaultConverters) {
                                if ((Type)entry.Key == type)
@@ -486,9 +472,7 @@ public sealed class TypeDescriptor
                return GetDefaultEvent (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static EventDescriptor GetDefaultEvent (object component, bool noCustomTypeDesc)
        {
                if (!noCustomTypeDesc && (component is ICustomTypeDescriptor))
@@ -512,9 +496,7 @@ public sealed class TypeDescriptor
                return GetDefaultProperty (component, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static PropertyDescriptor GetDefaultProperty (object component, bool noCustomTypeDesc)
        {
                if (!noCustomTypeDesc && (component is ICustomTypeDescriptor))
@@ -620,9 +602,7 @@ public sealed class TypeDescriptor
                return GetEditor (component, editorBaseType, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static object GetEditor (object component, Type editorBaseType, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -663,9 +643,7 @@ public sealed class TypeDescriptor
                return GetEvents (component, attributes, false);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static EventDescriptorCollection GetEvents (object component, bool noCustomTypeDesc)
        {
                if (!noCustomTypeDesc && (component is ICustomTypeDescriptor))
@@ -684,9 +662,7 @@ public sealed class TypeDescriptor
                return GetTypeInfo (componentType).GetEvents (attributes);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static EventDescriptorCollection GetEvents (object component, Attribute [] attributes, bool noCustomTypeDesc)
        {
                if (!noCustomTypeDesc && (component is ICustomTypeDescriptor))
@@ -731,9 +707,7 @@ public sealed class TypeDescriptor
                }
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
-#endif
        public static PropertyDescriptorCollection GetProperties (object component, bool noCustomTypeDesc)
        {
                if (component == null)
@@ -755,7 +729,6 @@ public sealed class TypeDescriptor
                return GetTypeInfo (componentType).GetProperties (attributes);
        }
 
-#if NET_2_0
        [EditorBrowsable (EditorBrowsableState.Advanced)]
        public static TypeDescriptionProvider GetProvider (object instance)
        {
@@ -921,7 +894,6 @@ public sealed class TypeDescriptor
                                        
                } while (true);
        }
-#endif
 
        public static void SortDescriptorArray (IList infos)
        {
@@ -937,10 +909,8 @@ public sealed class TypeDescriptor
                        infos.Add (ob);
        }
 
-#if NET_2_0
        // well, ComObjectType is not implemented, but we don't support COM anyways ...
        [Obsolete ("Use ComObjectType")]
-#endif
        public static IComNativeDescriptorHandler ComNativeDescriptorHandler {
                [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
                get { return descriptorHandler; }
@@ -1032,7 +1002,6 @@ public sealed class TypeDescriptor
                return type;
        }
 
-#if NET_2_0
        sealed class AttributeProvider : TypeDescriptionProvider
        {
                Attribute[] attributes;
@@ -1226,7 +1195,6 @@ public sealed class TypeDescriptor
                        return new DefaultTypeDescriptor (this, objectType, instance);
                }
        }
-#endif
 }
 
        internal abstract class Info
@@ -1491,4 +1459,13 @@ public sealed class TypeDescriptor
                        return _properties;
                }
        }
+
+#if NET_4_0
+       // In .net this class seems to be a dummy and empty class
+       // used to represent internally any extender provider associated with
+       // all the interfaces.
+       sealed class TypeDescriptorInterface
+       {
+       }
+#endif
 }
index 41936f479e53b85b667046fffa0421e658abe8b5..56d391ba1342be0c255e2967e15e80f56207e55c 100644 (file)
@@ -267,7 +267,7 @@ namespace System.Diagnostics
                                if (ext == null)
                                        return empty;
 
-#if MONOTOUCH
+#if MOBILE
                                return empty;
 #else
 
index af54044c3d50f2039abc56e331ebfc96c0462583..0300da50d3778028730ba72a8c8b58ce5bd50720 100644 (file)
@@ -485,7 +485,11 @@ namespace System.Net.Sockets {
                                throw new ArgumentNullException ("remoteEP");
 
                        IPEndPoint ep = remoteEP as IPEndPoint;
+#if !MOONLIGHT
+                       if (ep != null && socket_type != SocketType.Dgram) /* Dgram uses Any to 'disconnect' */
+#else
                        if (ep != null)
+#endif
                                if (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any))
                                        throw new SocketException ((int) SocketError.AddressNotAvailable);
 
@@ -516,7 +520,12 @@ namespace System.Net.Sockets {
                        if (error != 0)
                                throw new SocketException (error);
 
-                       connected=true;
+#if !MOONLIGHT
+                       if (socket_type != SocketType.Dgram)
+                               connected=true;
+#else
+                       connected = true;
+#endif
 
 #if NET_2_0
                        isbound = true;
index 123b22a5685d95af245ad53b5d0433952dab1492..533dd17f7a6475f2cca1ddd73b8cddf81724bd22 100644 (file)
@@ -70,7 +70,7 @@ namespace System.Net
 #if NET_2_1
                        AddPrefix ("http", typeof (HttpRequestCreator));
                        AddPrefix ("https", typeof (HttpRequestCreator));
-       #if MONOTOUCH
+       #if MOBILE
                        AddPrefix ("file", typeof (FileWebRequestCreator));
                        AddPrefix ("ftp", typeof (FtpRequestCreator));
        #endif
index ec5a4b9ce8eed4539502d9b5b77e2928117d2946..626a3bbd66b4e8ec870689c03f626ae1b1042366 100644 (file)
@@ -209,6 +209,7 @@ System.ComponentModel/DataObjectFieldAttribute.cs
 System.ComponentModel/DataObjectMethodAttribute.cs
 System.ComponentModel/DataObjectMethodType.cs
 System.ComponentModel/DateTimeConverter.cs
+System.ComponentModel/DateTimeOffsetConverter.cs
 System.ComponentModel/DecimalConverter.cs
 System.ComponentModel/DefaultBindingPropertyAttribute.cs
 System.ComponentModel/DefaultEventAttribute.cs
index d950223ff29382a65528f675a127d82a4fdb40d2..7ed4c7dcb89266364cd95a965b14f56e802ee2e7 100644 (file)
@@ -45,6 +45,7 @@ using System.Net;
 using System.Runtime.Serialization;
 using System.Text;
 using System.Collections;
+using System.Collections.Generic;
 using System.Globalization;
 
 //
@@ -80,8 +81,9 @@ namespace System {
                private bool isUnc;
                private bool isOpaquePart;
                private bool isAbsoluteUri = true;
+               private long scope_id;
 
-               private string [] segments;
+               private List<string> segments;
                
                private bool userEscaped;
                private string cachedAbsoluteUri;
@@ -90,6 +92,8 @@ namespace System {
                private int cachedHashCode;
 
                private static readonly string hexUpperChars = "0123456789ABCDEF";
+               private static string [] Empty = new string [0];
+
        
                // Fields
                
@@ -285,13 +289,13 @@ namespace System {
                        this.isUnixFilePath = baseUri.isUnixFilePath;
                        this.isOpaquePart = baseUri.isOpaquePart;
 
-                       if (relativeUri == String.Empty) {
+                       if (relativeUri.Length == 0) {
                                this.path = baseUri.path;
                                this.query = baseUri.query;
                                this.fragment = baseUri.fragment;
                                return;
                        }
-                       
+
                        // 8 fragment
                        // Note that in relative constructor, file URI cannot handle '#' as a filename character, but just regarded as a fragment identifier.
                        pos = relativeUri.IndexOf ('#');
@@ -300,16 +304,24 @@ namespace System {
                                        fragment = relativeUri.Substring (pos);
                                else
                                        fragment = "#" + EscapeString (relativeUri.Substring (pos+1));
-                               relativeUri = relativeUri.Substring (0, pos);
+                               relativeUri = pos == 0 ? String.Empty : relativeUri.Substring (0, pos);
                        }
 
+                       bool consider_query = false;
+
                        // 6 query
                        pos = relativeUri.IndexOf ('?');
                        if (pos != -1) {
                                query = relativeUri.Substring (pos);
                                if (!userEscaped)
                                        query = EscapeString (query);
-                               relativeUri = relativeUri.Substring (0, pos);
+#if !NET_4_0 && !MOONLIGHT
+                               consider_query = query.Length > 0;
+#endif
+                               relativeUri = pos == 0 ? String.Empty : relativeUri.Substring (0, pos);
+                       } else if (relativeUri.Length == 0) {
+                               // if there is no relative path then we keep the Query and Fragment from the absolute
+                               query = baseUri.query;
                        }
 
                        if (relativeUri.Length > 0 && relativeUri [0] == '/') {
@@ -327,11 +339,7 @@ namespace System {
                        
                        // par 5.2 step 6 a)
                        path = baseUri.path;
-#if NET_4_0
-                       if (relativeUri.Length > 0) {
-#else
-                       if (relativeUri.Length > 0 || query.Length > 0) {
-#endif
+                       if ((relativeUri.Length > 0) || consider_query) {
                                pos = path.LastIndexOf ('/');
                                if (pos >= 0) 
                                        path = path.Substring (0, pos + 1);
@@ -524,24 +532,32 @@ namespace System {
                        } 
                }
 
+               private bool IsLocalIdenticalToAbsolutePath ()
+               {
+                       if (IsFile)
+                               return false;
+
+                       if ((scheme == Uri.UriSchemeNews) || (scheme == Uri.UriSchemeNntp) || (scheme == Uri.UriSchemeFtp))
+                               return false;
+
+                       return IsWellFormedOriginalString ();
+               }
+
                public string LocalPath { 
                        get {
                                EnsureAbsoluteUri ();
                                if (cachedLocalPath != null)
                                        return cachedLocalPath;
-                               if (!IsFile)
-                                       return AbsolutePath;
 
-                               bool windows = (path.Length > 3 && path [1] == ':' &&
-                                               (path [2] == '\\' || path [2] == '/'));
+                               if (IsLocalIdenticalToAbsolutePath ())
+                                       return AbsolutePath;
 
                                if (!IsUnc) {
                                        string p = Unescape (path);
-                                       bool replace = windows;
-#if ONLY_1_1
-                                       replace |= (System.IO.Path.DirectorySeparatorChar == '\\');
-#endif
-                                       if (replace)
+                                       bool windows = (path.Length > 3 && path [1] == ':' &&
+                                               (path [2] == '\\' || path [2] == '/'));
+
+                                       if (windows)
                                                cachedLocalPath = p.Replace ('/', '\\');
                                        else
                                                cachedLocalPath = p;
@@ -602,40 +618,51 @@ namespace System {
                public string [] Segments { 
                        get { 
                                EnsureAbsoluteUri ();
+
+                               // return a (pre-allocated) empty array
+                               if (path.Length == 0)
+                                       return Empty;
+                               // do not return the original array (since items can be changed)
                                if (segments != null)
-                                       return segments;
+                                       return segments.ToArray ();
 
-                               if (path.Length == 0) {
-                                       segments = new string [0];
-                                       return segments;
+                               List<string> list = new List<string> ();
+                               StringBuilder current = new StringBuilder ();
+                               for (int i = 0; i < path.Length; i++) {
+                                       switch (path [i]) {
+                                       case '/':
+                                       case '\\':
+                                               current.Append (path [i]);
+                                               list.Add (current.ToString ());
+                                               current.Length = 0;
+                                               break;
+                                       case '%':
+                                               if ((i < path.Length - 2) && (path [i + 1] == '5' && path [i + 2] == 'C')) {
+                                                       current.Append ("%5C");
+                                                       list.Add (current.ToString ());
+                                                       current.Length = 0;
+                                                       i += 2;
+                                               } else {
+                                                       current.Append ('%');
+                                               }
+                                               break;
+                                       default:
+                                               current.Append (path [i]);
+                                               break;
+                                       }
                                }
 
-                               string [] parts = path.Split ('/');
-                               segments = parts;
-                               bool endSlash = path.EndsWith ("/");
-                               if (parts.Length > 0 && endSlash) {
-                                       string [] newParts = new string [parts.Length - 1];
-                                       Array.Copy (parts, 0, newParts, 0, parts.Length - 1);
-                                       parts = newParts;
-                               }
+                               if (current.Length > 0)
+                                       list.Add (current.ToString ());
 
-                               int i = 0;
-                               if (IsFile && path.Length > 1 && path [1] == ':') {
-                                       string [] newParts = new string [parts.Length + 1];
-                                       Array.Copy (parts, 1, newParts, 2, parts.Length - 1);
-                                       parts = newParts;
-                                       parts [0] = path.Substring (0, 2);
-                                       parts [1] = String.Empty;
-                                       i++;
+                               if (IsFile && (list.Count > 0)) {
+                                       string first = list [0];
+                                       if ((first.Length > 1) && (first [1] == ':')) {
+                                               list.Insert (0, "/");
+                                       }
                                }
-                               
-                               int end = parts.Length;
-                               for (; i < end; i++) 
-                                       if (i != end - 1 || endSlash)
-                                               parts [i] += '/';
-
-                               segments = parts;
-                               return segments;
+                               segments = list;
+                               return segments.ToArray ();
                        } 
                }
 
@@ -650,11 +677,16 @@ namespace System {
                        }
                }
                
-               [MonoTODO ("add support for IPv6 address")]
                public string DnsSafeHost {
                        get {
                                EnsureAbsoluteUri ();
-                               return Unescape (Host);
+                               string host = Host;
+                               if (HostNameType == UriHostNameType.IPv6) {
+                                       host = Host.Substring (1, Host.Length - 2);
+                                       if (scope_id != 0)
+                                               host += "%" + scope_id.ToString ();
+                               }
+                               return Unescape (host);
                        }
                }
 
@@ -960,9 +992,10 @@ namespace System {
                //
                public Uri MakeRelativeUri (Uri uri)
                {
+#if NET_4_0
                        if (uri == null)
                                throw new ArgumentNullException ("uri");
-
+#endif
                        if (Host != uri.Host || Scheme != uri.Scheme)
                                return uri;
 
@@ -1019,7 +1052,7 @@ namespace System {
                void AppendQueryAndFragment (ref string result)
                {
                        if (query.Length > 0) {
-                               string q = query [0] == '?' ? '?' + Unescape (query.Substring (1), false) : Unescape (query, false);
+                               string q = query [0] == '?' ? '?' + Unescape (query.Substring (1), true) : Unescape (query, false);
                                result += q;
                        }
                        if (fragment.Length > 0)
@@ -1031,14 +1064,14 @@ namespace System {
                        if (cachedToString != null) 
                                return cachedToString;
 
-                       if (isAbsoluteUri)
+                       if (isAbsoluteUri) {
                                cachedToString = Unescape (GetLeftPart (UriPartial.Path), true);
-                       else {
+                               AppendQueryAndFragment (ref cachedToString);
+                       } else {
                                // Everything is contained in path in this case. 
-                               cachedToString = Unescape (path);
+                               cachedToString = path;
                        }
 
-                       AppendQueryAndFragment (ref cachedToString);
                        return cachedToString;
                }
 
@@ -1073,12 +1106,23 @@ namespace System {
                protected static string EscapeString (string str) 
 #endif
                {
-                       return EscapeString (str, false, true, true);
+                       return EscapeString (str, Uri.EscapeCommonHexBrackets);
                }
-               
-               internal static string EscapeString (string str, bool escapeReserved, bool escapeHex, bool escapeBrackets) 
+
+               private const string EscapeCommon = "<>%\"{}|\\^`";
+               private const string EscapeReserved = ";/?:@&=+$,";
+               private const string EscapeHex = "#";
+               private const string EscapeBrackets = "[]";
+
+               private const string EscapeNews = EscapeCommon + EscapeBrackets + "?";
+               private const string EscapeCommonHex = EscapeCommon + EscapeHex;
+               private const string EscapeCommonBrackets = EscapeCommon + EscapeBrackets;
+               internal const string EscapeCommonHexBrackets = EscapeCommon + EscapeHex + EscapeBrackets;
+               internal const string EscapeCommonHexBracketsQuery = EscapeCommonHexBrackets + "?";
+
+               internal static string EscapeString (string str, string escape) 
                {
-                       if (str == null)
+                       if (String.IsNullOrEmpty (str))
                                return String.Empty;
                        
                        StringBuilder s = new StringBuilder ();
@@ -1106,15 +1150,10 @@ namespace System {
                                int length = data.Length;
                                for (int j = 0; j < length; j++) {
                                        char c = (char) data [j];
-                                       if ((c <= 0x20) || (c >= 0x7f) || 
-                                           ("<>%\"{}|\\^`".IndexOf (c) != -1) ||
-                                           (escapeHex && (c == '#')) ||
-                                           (escapeBrackets && (c == '[' || c == ']')) ||
-                                           (escapeReserved && (";/?:@&=+$,".IndexOf (c) != -1))) {
+                                       if ((c <= 0x20) || (c >= 0x7f) || (escape.IndexOf (c) != -1))
                                                s.Append (HexEscape (c));
-                                               continue;
-                                       }       
-                                       s.Append (c);
+                                       else
+                                               s.Append (c);
                                }
                        }
                        
@@ -1136,15 +1175,14 @@ namespace System {
                        if (userEscaped)
                                return;
 
-                       host = EscapeString (host, false, true, false);
+                       host = EscapeString (host, EscapeCommonHex);
                        if (host.Length > 1 && host [0] != '[' && host [host.Length - 1] != ']') {
                                // host name present (but not an IPv6 address)
                                host = host.ToLower (CultureInfo.InvariantCulture);
                        }
 
-                       if (path.Length > 0) {
+                       if (isAbsoluteUri && (path.Length > 0))
                                path = EscapeString (path);
-                       }
                }
 
 #if MOONLIGHT
@@ -1159,8 +1197,9 @@ namespace System {
                
                internal static string Unescape (string str, bool excludeSpecial) 
                {
-                       if (str == null)
+                       if (String.IsNullOrEmpty (str))
                                return String.Empty;
+
                        StringBuilder s = new StringBuilder ();
                        int len = str.Length;
                        for (int i = 0; i < len; i++) {
@@ -1174,6 +1213,8 @@ namespace System {
                                                s.Append ("%25");
                                        else if (excludeSpecial && x == '?')
                                                s.Append ("%3F");
+                                       else if (excludeSpecial && x == '\\')
+                                               s.Append ("%5C");
                                        else {
                                                s.Append (x);
                                                if (surrogate != char.MinValue)
@@ -1268,6 +1309,11 @@ namespace System {
                                throw new UriFormatException (s);
                }
 
+               private bool SupportsQuery ()
+               {
+                       return ((scheme != Uri.UriSchemeNntp) && (scheme != Uri.UriSchemeFtp) && (scheme != Uri.UriSchemeFile));
+               }
+
                //
                // This parse method will not throw exceptions on failure
                //
@@ -1371,17 +1417,27 @@ namespace System {
                                endpos = pos;
                        }
 
-                       // 6 query
-                       pos = uriString.IndexOf ('?', startpos, endpos-startpos);
-                       if (pos != -1) {
-                               query = uriString.Substring (pos, endpos-pos);
-                               endpos = pos;
-                               if (!userEscaped)
-                                       query = EscapeString (query);
+                       // special case: there is no query part for 'news'
+                       if (scheme == Uri.UriSchemeNews) {
+                               pos = scheme.Length + 1;
+                               path = EscapeString (uriString.Substring (pos, endpos - pos), EscapeNews);
+                               return null;
+                       }
+
+                       // special case: there is no query part for 'nntp', 'file' and 'ftp' but there is an host, port, user...
+                       if (SupportsQuery ()) {
+                               // 6 query
+                               pos = uriString.IndexOf ('?', startpos, endpos-startpos);
+                               if (pos != -1) {
+                                       query = uriString.Substring (pos, endpos-pos);
+                                       endpos = pos;
+                                       if (!userEscaped)
+                                               query = EscapeString (query);
+                               }
                        }
 
                        // 3
-                       if (IsPredefinedScheme (scheme) && scheme != UriSchemeMailto && scheme != UriSchemeNews && (
+                       if (IsPredefinedScheme (scheme) && scheme != UriSchemeMailto && (
                                (endpos-startpos < 2) ||
                                (endpos-startpos >= 2 && uriString [startpos] == '/' && uriString [startpos+1] != '/')))                                
                                return "Invalid URI: The Authority/Host could not be parsed.";
@@ -1394,7 +1450,7 @@ namespace System {
                                if (kind == UriKind.Relative)
                                        return "Absolute URI when we expected a relative one";
                                
-                               if (scheme != UriSchemeMailto && scheme != UriSchemeNews)
+                               if (scheme != UriSchemeMailto)
                                        startpos += 2;
 
                                if (scheme == UriSchemeFile) {
@@ -1429,21 +1485,21 @@ namespace System {
                        if (unixAbsPath) {
                                pos = -1;
                        } else {
-                               pos = uriString.IndexOf ('/', startpos, endpos-startpos);
+                               pos = uriString.IndexOf ('/', startpos, endpos - startpos);
                                if (pos == -1 && windowsFilePath)
-                                       pos = uriString.IndexOf ('\\', startpos, endpos-startpos);
+                                       pos = uriString.IndexOf ('\\', startpos, endpos - startpos);
                        }
-
-                       if (pos == -1) {
-                               if ((scheme != Uri.UriSchemeMailto) &&
-#if ONLY_1_1
-                                   (scheme != Uri.UriSchemeFile) &&
-#endif
-                                   (scheme != Uri.UriSchemeNews))
-                                       path = "/";
-                       } else {
-                               path = uriString.Substring (pos, endpos-pos);
+                       if (pos != -1) {
+                               path = uriString.Substring (pos, endpos - pos);
+                               if (!SupportsQuery ()) {
+                                       if (scheme != Uri.UriSchemeNntp)
+                                               path = path.Replace ('\\', '/');
+                                       path = EscapeString (path, EscapeNews);
+                               }
                                endpos = pos;
+                       } else {
+                               if (scheme != Uri.UriSchemeMailto)
+                                       path = "/";
                        }
 
                        // 4.a user info
@@ -1452,6 +1508,9 @@ namespace System {
                        else
                                pos = uriString.IndexOf ('@', startpos, endpos-startpos);
                        if (pos != -1) {
+                               // supplying username / password on a file URI is not supported
+                               if (scheme == UriSchemeFile)
+                                       return "Invalid host";
                                userinfo = uriString.Substring (startpos, pos-startpos);
                                startpos = pos + 1;
                        }
@@ -1474,10 +1533,14 @@ namespace System {
                                                port = GetDefaultPort (scheme);
                                        }
                                }
-                       } else {
-                               if (port == -1) {
+                       } else if (!IsFile) {
+                               // if no port is specified by a colon ':' is present then we must ignore it
+                               // since it would be part of the host name and, as such, would be invalid
+                               if (pos == endpos - 1)
+                                       endpos--;
+
+                               if (port == -1)
                                        port = GetDefaultPort (scheme);
-                               }
                        }
                        
                        // 4 authority
@@ -1488,20 +1551,18 @@ namespace System {
                                path = Reduce ('/' + uriString, true);
                                host = String.Empty;
                        } else if (host.Length == 2 && host [1] == ':') {
-                               // windows filepath
-                               path = host + path;
-                               host = String.Empty;
+                               if (scheme != UriSchemeFile) {
+                                       host = host [0].ToString ();
+                               } else {
+                                       // windows filepath
+                                       path = host + path;
+                                       host = String.Empty;
+                               }
                        } else if (isUnixFilePath) {
                                uriString = "//" + uriString;
                                host = String.Empty;
                        } else if (scheme == UriSchemeFile) {
                                isUnc = true;
-                       } else if (scheme == UriSchemeNews) {
-                               // no host for 'news', misinterpreted path
-                               if (host.Length > 0) {
-                                       path = host;
-                                       host = String.Empty;
-                               }
                        } else if (host.Length == 0 &&
                                   (scheme == UriSchemeHttp || scheme == UriSchemeGopher || scheme == UriSchemeNntp ||
                                    scheme == UriSchemeHttps || scheme == UriSchemeFtp)) {
@@ -1512,9 +1573,10 @@ namespace System {
                        if (!badhost && (host.Length > 1) && (host[0] == '[') && (host[host.Length - 1] == ']')) {
                                IPv6Address ipv6addr;
                                
-                               if (IPv6Address.TryParse (host, out ipv6addr))
+                               if (IPv6Address.TryParse (host, out ipv6addr)) {
                                        host = "[" + ipv6addr.ToString (true) + "]";
-                               else
+                                       scope_id = ipv6addr.ScopeId;
+                               } else
                                        badhost = true;
                        }
                        if (badhost && (Parser is DefaultUriParser || Parser == null))
@@ -1526,9 +1588,7 @@ namespace System {
                        if (ex != null)
                                return ex.Message;
 
-                       if ((scheme != Uri.UriSchemeMailto) &&
-                                       (scheme != Uri.UriSchemeNews) &&
-                                       (scheme != Uri.UriSchemeFile)) {
+                       if ((scheme != Uri.UriSchemeMailto) && (scheme != Uri.UriSchemeFile)) {
                                path = Reduce (path, CompactEscaped (scheme));
                        }
 
@@ -1548,6 +1608,36 @@ namespace System {
                        return false;
                }
 
+               // replace '\', %5C ('\') and %2f ('/') into '/'
+               // replace %2e ('.') into '.'
+               private static string NormalizePath (string path)
+               {
+                       StringBuilder res = new StringBuilder ();
+                       for (int i = 0; i < path.Length; i++) {
+                               char c = path [i];
+                               switch (c) {
+                               case '\\':
+                                       c = '/';
+                                       break;
+                               case '%':
+                                       if (i < path.Length - 2) {
+                                               char c1 = path [i + 1];
+                                               char c2 = Char.ToUpper (path [i + 2]);
+                                               if ((c1 == '2') && (c2 == 'E')) {
+                                                       c = '.';
+                                                       i += 2;
+                                               } else if (((c1 == '2') && (c2 == 'F')) || ((c1 == '5') && (c2 == 'C'))) {
+                                                       c = '/';
+                                                       i += 2;
+                                               }
+                                       }
+                                       break;
+                               }
+                               res.Append (c);
+                       }
+                       return res.ToString ();
+               }
+
                // This is called "compacting" in the MSDN documentation
                private static string Reduce (string path, bool compact_escaped)
                {
@@ -1555,51 +1645,28 @@ namespace System {
                        if (path == "/")
                                return path;
 
-                       StringBuilder res = new StringBuilder();
-
-                       if (compact_escaped) {
-                               // replace '\', %5C ('\') and %2f ('/') into '/'
+                       if (compact_escaped && (path.IndexOf ('%') != -1)) {
+                               // replace '\', %2f, %5c with '/' and replace %2e with '.'
                                // other escaped values seems to survive this step
-                               for (int i=0; i < path.Length; i++) {
-                                       char c = path [i];
-                                       switch (c) {
-                                       case '\\':
-                                               res.Append ('/');
-                                               break;
-                                       case '%':
-                                               if (i < path.Length - 2) {
-                                                       char c1 = path [i + 1];
-                                                       char c2 = Char.ToUpper (path [i + 2]);
-                                                       if (((c1 == '2') && (c2 == 'F')) || ((c1 == '5') && (c2 == 'C'))) {
-                                                               res.Append ('/');
-                                                               i += 2;
-                                                       } else {
-                                                               res.Append (c);
-                                                       }
-                                               } else {
-                                                       res.Append (c);
-                                               }
-                                               break;
-                                       default:
-                                               res.Append (c);
-                                               break;
-                                       }
-                               }
-                               path = res.ToString ();
+                               path = NormalizePath (path);
                        } else {
+                               // (always) replace '\' with '/'
                                path = path.Replace ('\\', '/');
                        }
 
-                       ArrayList result = new ArrayList ();
+                       List<string> result = new List<string> ();
 
                        bool begin = true;
                        for (int startpos = 0; startpos < path.Length; ) {
-                               int endpos = path.IndexOf('/', startpos);
-                               if (endpos == -1) endpos = path.Length;
+                               int endpos = path.IndexOf ('/', startpos);
+                               if (endpos == -1)
+                                       endpos = path.Length;
                                string current = path.Substring (startpos, endpos-startpos);
                                startpos = endpos + 1;
-                               if ((begin && current.Length == 0) || current == "." )
+                               if ((begin && current.Length == 0) || current == "." ) {
+                                       begin = false;
                                        continue;
+                               }
 
                                begin = false;
                                if (current == "..") {
@@ -1619,7 +1686,8 @@ namespace System {
                        if (result.Count == 0)
                                return "/";
 
-                       res.Length = 0;
+                       StringBuilder res = new StringBuilder ();
+
                        if (path [0] == '/')
                                res.Append ('/');
 
@@ -1878,6 +1946,10 @@ namespace System {
 
                public bool IsBaseOf (Uri uri)
                {
+#if NET_4_0
+                       if (uri == null)
+                               throw new ArgumentNullException ("uri");
+#endif
                        return Parser.IsBaseOf (this, uri);
                }
 
@@ -1885,7 +1957,7 @@ namespace System {
                {
                        // funny, but it does not use the Parser's IsWellFormedOriginalString().
                        // Also, it seems we need to *not* escape hex.
-                       return EscapeString (OriginalString, false, false, true) == OriginalString;
+                       return EscapeString (OriginalString, EscapeCommonBrackets) == OriginalString;
                }
 
                // static methods
@@ -2020,12 +2092,21 @@ namespace System {
                // [MonoTODO ("rework code to avoid exception catching")]
                public static bool TryCreate (Uri baseUri, string relativeUri, out Uri result)
                {
+                       result = null;
+                       if (relativeUri == null)
+                               return false;
+
                        try {
-                               // FIXME: this should call UriParser.Resolve
-                               result = new Uri (baseUri, relativeUri);
-                               return true;
+                               Uri relative = new Uri (relativeUri, UriKind.RelativeOrAbsolute);
+                               if ((baseUri != null) && baseUri.IsAbsoluteUri) {
+                                       // FIXME: this should call UriParser.Resolve
+                                       result = new Uri (baseUri, relative);
+                               } else if (relative.IsAbsoluteUri) {
+                                       // special case - see unit tests
+                                       result = relative;
+                               }
+                               return (result != null);
                        } catch (UriFormatException) {
-                               result = null;
                                return false;
                        }
                }
@@ -2033,12 +2114,18 @@ namespace System {
                //[MonoTODO ("rework code to avoid exception catching")]
                public static bool TryCreate (Uri baseUri, Uri relativeUri, out Uri result)
                {
+                       result = null;
+                       if ((baseUri == null) || !baseUri.IsAbsoluteUri)
+                               return false;
+#if NET_4_0
+                       if (relativeUri == null)
+                               return false;
+#endif
                        try {
                                // FIXME: this should call UriParser.Resolve
                                result = new Uri (baseUri, relativeUri.OriginalString);
                                return true;
                        } catch (UriFormatException) {
-                               result = null;
                                return false;
                        }
                }
index 15a7846b962874e385dee40fca76e04c95eff06c..702bd333c8f62dbfd9b92945c94a14f43b7c450e 100644 (file)
-//\r
-// System.UriBuilder\r
-//\r
-// Author:\r
-//   Lawrence Pit (loz@cable.a2000.nl)\r
-//\r
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Runtime.Serialization;\r
-using System.Text;\r
-\r
-// See RFC 2396 for more info on URI's.\r
-\r
-namespace System \r
-{\r
-       public class UriBuilder\r
-       {\r
-               private string scheme;\r
-               private string host;\r
-               private int port;\r
-               private string path;\r
-               private string query;\r
-               private string fragment;\r
-               private string username;\r
-               private string password;\r
-               \r
-               private Uri uri;\r
-               private bool modified;\r
-               \r
-               \r
-               // Constructors\r
-               \r
-               public UriBuilder ()\r
-#if NET_2_0\r
-                       : this (Uri.UriSchemeHttp, "localhost")\r
-#else\r
-                       : this (Uri.UriSchemeHttp, "loopback")\r
-#endif\r
-               {\r
-               }\r
-\r
-               public UriBuilder (string uri) : this (new Uri (uri))\r
-               {\r
-               }\r
-               \r
-               public UriBuilder (Uri uri)\r
-               {\r
-                       scheme = uri.Scheme;\r
-                       host = uri.Host;\r
-                       port = uri.Port;\r
-                       path = uri.AbsolutePath;\r
-                       query = uri.Query;\r
-                       fragment = uri.Fragment;\r
-                       username = uri.UserInfo;\r
-                       int pos = username.IndexOf (':');\r
-                       if (pos != -1) {\r
-                               password = username.Substring (pos + 1);\r
-                               username = username.Substring (0, pos);\r
-                       } else {\r
-                               password = String.Empty;\r
-                       }\r
-                       modified = true;\r
-               }\r
-               \r
-               public UriBuilder (string schemeName, string hostName) \r
-               {\r
-                       Scheme = schemeName;\r
-                       Host = hostName;\r
-                       port = -1;\r
-                       Path = String.Empty;   // dependent on scheme it may set path to "/"\r
-                       query = String.Empty;\r
-                       fragment = String.Empty;\r
-                       username = String.Empty;\r
-                       password = String.Empty;\r
-                       modified = true;\r
-               }\r
-               \r
-               public UriBuilder (string scheme, string host, int portNumber) \r
-                       : this (scheme, host)\r
-               {\r
-                       Port = portNumber;\r
-               }\r
-               \r
-               public UriBuilder (string scheme, string host, int port, string pathValue)\r
-                       : this (scheme, host, port)\r
-               {\r
-                       Path = pathValue;\r
-               }\r
-\r
-               public UriBuilder (string scheme, string host, int port, string pathValue, string extraValue)\r
-                       : this (scheme, host, port, pathValue)\r
-               {\r
-                       if (extraValue == null || extraValue.Length == 0)\r
-                               return;\r
-                               \r
-                       if (extraValue [0] == '#') \r
-                               Fragment = extraValue.Remove (0, 1);\r
-                       else if (extraValue [0] == '?') \r
-                               Query = extraValue.Remove (0, 1);\r
-                       else \r
-                               throw new ArgumentException ("extraValue");\r
-               }\r
-\r
-               \r
-               // Properties\r
-               \r
-               public string Fragment {\r
-                       get { return fragment; }\r
-                       set {\r
-                               fragment = value;\r
-                               if (fragment == null)\r
-                                       fragment = String.Empty;\r
-                               else if (fragment.Length > 0)\r
-//                                     fragment = "#" + EncodeUtf8 (value.Replace ("%23", "#"));\r
-                                       fragment = "#" + value.Replace ("%23", "#");\r
-#if !NET_2_0\r
-                               query = String.Empty;\r
-#endif\r
-                               modified = true;\r
-                       }\r
-               }\r
-\r
-               public string Host {\r
-                       get { return host; }\r
-                       set {\r
-                               host = (value == null) ? String.Empty : value;;\r
-                               modified = true;\r
-                       }\r
-               }\r
-\r
-               public string Password {\r
-                       get { return password; }\r
-                       set {\r
-                               password = (value == null) ? String.Empty : value;;\r
-                               modified = true;\r
-                       }\r
-               }\r
-               \r
-               public string Path {\r
-                       get { return path; }\r
-                       set {\r
-                               if (value == null || value.Length == 0) {\r
-                                       path = "/";\r
-                               } else {\r
-                                       path = Uri.EscapeString (value.Replace ('\\', '/'), false, true, true);\r
-                               }\r
-                               modified = true;\r
-                       }\r
-               }\r
-               \r
-               public int Port {\r
-                       get { return port; }\r
-                       set {\r
-#if NET_2_0\r
-                               if (value < -1)\r
-                                       throw new ArgumentOutOfRangeException ("value");\r
-#else\r
-                               if (value < 0)\r
-                                       throw new ArgumentOutOfRangeException ("value");\r
-#endif\r
-                               // apparently it is\r
-                               port = value;\r
-                               modified = true;\r
-                       }\r
-               }\r
-               \r
-               public string Query {\r
-                       get { return query; }\r
-                       set {\r
-                               // LAMESPEC: it doesn't say to always prepend a \r
-                               // question mark to the value.. it does say this \r
-                               // for fragment.\r
-                               if (value == null || value.Length == 0)\r
-                                       query = String.Empty;\r
-                               else\r
-//                                     query = "?" + EncodeUtf8 (value);\r
-                                       query = "?" + value;\r
-#if !NET_2_0\r
-                               fragment = String.Empty;\r
-#endif\r
-                               modified = true;\r
-                       }\r
-               }\r
-               \r
-               public string Scheme {\r
-                       get { return scheme; }\r
-                       set {\r
-                               if (value == null)\r
-                                       value = String.Empty;\r
-                               int colonPos = value.IndexOf (':');\r
-                               if (colonPos != -1)\r
-                                       value = value.Substring (0, colonPos);\r
-                               scheme = value.ToLower ();\r
-                               modified = true;\r
-                       }\r
-               }\r
-               \r
-               public Uri Uri {\r
-                       get {\r
-                               if (!modified) \r
-                                       return uri;\r
-                               uri = new Uri (ToString (), true);\r
-                               modified = false;\r
-                               return uri;\r
-                       }\r
-               }\r
-               \r
-               public string UserName {\r
-                       get { return username; }\r
-                       set {\r
-                               username = (value == null) ? String.Empty : value;;\r
-                               modified = true;\r
-                       }\r
-               }\r
-\r
-               // Methods\r
-               \r
-               public override bool Equals (object rparam) \r
-               {\r
-                       return (rparam == null) ? false : this.Uri.Equals (rparam.ToString ());\r
-               }\r
-               \r
-               public override int GetHashCode ()\r
-               {\r
-                       return this.Uri.GetHashCode ();\r
-               }\r
-               \r
-               public override string ToString ()\r
-               {\r
-                       StringBuilder builder = new StringBuilder ();\r
-\r
-                       builder.Append (scheme);\r
-                       builder.Append ("://");\r
-\r
-                       if (username != String.Empty) {\r
-                               builder.Append (username);\r
-                               if (password != String.Empty)\r
-                                       builder.Append (":" + password);\r
-                               builder.Append ('@');\r
-                       }\r
-\r
-                       builder.Append (host);\r
-                       if (port > 0)\r
-                               builder.Append (":" + port);\r
-\r
-                       if (path != String.Empty &&\r
-                           builder [builder.Length - 1] != '/' &&\r
-                           path.Length > 0 && path [0] != '/')\r
-                               builder.Append ('/');\r
-                       builder.Append (path);\r
-                       builder.Append (query);\r
-                       builder.Append (fragment);\r
-\r
-                       return builder.ToString ();\r
-               }\r
-       }\r
-}\r
+//
+// System.UriBuilder
+//
+// Author:
+//   Lawrence Pit (loz@cable.a2000.nl)
+//
+// Copyright (C) 2005, 2010 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.
+//
+
+using System;
+using System.Collections;
+using System.Runtime.Serialization;
+using System.Text;
+
+// See RFC 2396 for more info on URI's.
+
+namespace System 
+{
+       public class UriBuilder
+       {
+               private string scheme;
+               private string host;
+               private int port;
+               private string path;
+               private string query;
+               private string fragment;
+               private string username;
+               private string password;
+               
+               private Uri uri;
+               private bool modified;
+               
+               
+               // Constructors
+               
+               public UriBuilder ()
+               {
+                       Initialize (Uri.UriSchemeHttp, "localhost", -1, String.Empty, String.Empty);
+               }
+
+               public UriBuilder (string uri)
+               {
+                       if (uri == null)
+                               throw new ArgumentNullException ("uriString");
+
+                       Uri u = null;
+                       if (Uri.TryCreate (uri, UriKind.Absolute, out u)) {
+                               Initialize (u);
+                       } else if (!uri.Contains (Uri.SchemeDelimiter)) {
+                               // second chance, UriBuilder parsing is more forgiving than Uri
+                               Initialize (new Uri (Uri.UriSchemeHttp + Uri.SchemeDelimiter + uri));
+                       } else
+                               throw new UriFormatException ();
+               }
+               
+               public UriBuilder (Uri uri)
+               {
+#if NET_4_0
+                       if (uri == null)
+                               throw new ArgumentNullException ("uri");
+#endif
+                       Initialize (uri);
+               }
+               
+               public UriBuilder (string schemeName, string hostName) 
+               {
+                       Initialize (schemeName, hostName, -1, String.Empty, String.Empty);
+               }
+
+               public UriBuilder (string scheme, string hostName, int portNumber) 
+               {
+                       Initialize (scheme, hostName, portNumber, String.Empty, String.Empty);
+               }
+               
+               public UriBuilder (string scheme, string host, int port, string pathValue)
+               {
+                       Initialize (scheme, host, port, pathValue, String.Empty);
+               }
+
+               public UriBuilder (string scheme, string host, int port, string pathValue, string extraValue)
+               {
+                       Initialize (scheme, host, port, pathValue, extraValue);
+               }
+
+               private void Initialize (Uri uri)
+               {
+                       Initialize (uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath, String.Empty);
+                       fragment = uri.Fragment;
+                       query = uri.Query;
+                       username = uri.UserInfo;
+                       int pos = username.IndexOf (':');
+                       if (pos != -1) {
+                               password = username.Substring (pos + 1);
+                               username = username.Substring (0, pos);
+                       } else {
+                               password = String.Empty;
+                       }
+               }
+
+               private void Initialize (string scheme, string host, int port, string pathValue, string extraValue)
+               {
+                       modified = true;
+
+                       Scheme = scheme;
+                       Host = host;
+                       Port = port;
+                       Path = pathValue;
+                       query = String.Empty;
+                       fragment = String.Empty;
+                       Path = pathValue;
+                       username = String.Empty;
+                       password = String.Empty;
+
+                       if (String.IsNullOrEmpty (extraValue))
+                               return;
+
+                       if (extraValue [0] == '#')
+                               Fragment = extraValue.Remove (0, 1);
+                       else if (extraValue [0] == '?')
+                               Query = extraValue.Remove (0, 1);
+                       else
+                               throw new ArgumentException ("extraValue");
+               }
+               
+               // Properties
+               
+               public string Fragment {
+                       get { return fragment; }
+                       set {
+                               fragment = value;
+                               if (fragment == null)
+                                       fragment = String.Empty;
+                               else if (fragment.Length > 0)
+                                       fragment = "#" + value.Replace ("%23", "#");
+                               modified = true;
+                       }
+               }
+
+               public string Host {
+                       get { return host; }
+                       set {
+                               if (String.IsNullOrEmpty (value))
+                                       host = String.Empty;
+                               else if ((value.IndexOf (':') != -1) && (value [0] != '[')) {
+                                       host = "[" + value + "]";
+                               } else {
+                                       host = value;
+                               }
+                               modified = true;
+                       }
+               }
+
+               public string Password {
+                       get { return password; }
+                       set {
+                               password = (value == null) ? String.Empty : value;
+                       }
+               }
+               
+               public string Path {
+                       get { return path; }
+                       set {
+                               if (value == null || value.Length == 0) {
+                                       path = "/";
+                               } else {
+                                       path = Uri.EscapeString (value.Replace ('\\', '/'), Uri.EscapeCommonHexBracketsQuery);
+                               }
+                               modified = true;
+                       }
+               }
+               
+               public int Port {
+                       get { return port; }
+                       set {
+                               if (value < -1)
+                                       throw new ArgumentOutOfRangeException ("value");
+                               // apparently it is
+                               port = value;
+                               modified = true;
+                       }
+               }
+               
+               public string Query {
+                       get { return query; }
+                       set {
+                               // LAMESPEC: it doesn't say to always prepend a 
+                               // question mark to the value.. it does say this 
+                               // for fragment.
+                               if (value == null || value.Length == 0)
+                                       query = String.Empty;
+                               else
+                                       query = "?" + value;
+                               modified = true;
+                       }
+               }
+               
+               public string Scheme {
+                       get { return scheme; }
+                       set {
+                               if (value == null)
+                                       value = String.Empty;
+                               int colonPos = value.IndexOf (':');
+                               if (colonPos != -1)
+                                       value = value.Substring (0, colonPos);
+                               scheme = value.ToLower ();
+                               modified = true;
+                       }
+               }
+               
+               public Uri Uri {
+                       get {
+                               if (!modified) 
+                                       return uri;
+                               uri = new Uri (ToString (), true);
+                               // some properties are updated once the Uri is created - see unit tests
+                               host = uri.Host;
+                               path = uri.AbsolutePath;
+                               modified = false;
+                               return uri;
+                       }
+               }
+               
+               public string UserName {
+                       get { return username; }
+                       set {
+                               username = (value == null) ? String.Empty : value;
+                               modified = true;
+                       }
+               }
+
+               // Methods
+               
+               public override bool Equals (object rparam) 
+               {
+                       return (rparam == null) ? false : this.Uri.Equals (rparam.ToString ());
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return this.Uri.GetHashCode ();
+               }
+               
+               public override string ToString ()
+               {
+                       StringBuilder builder = new StringBuilder ();
+
+                       builder.Append (scheme);
+                       // note: mailto and news use ':', not "://", as their delimiter
+                       builder.Append (Uri.GetSchemeDelimiter (scheme));
+
+                       if (username != String.Empty) {
+                               builder.Append (username);
+                               if (password != String.Empty)
+                                       builder.Append (":" + password);
+                               builder.Append ('@');
+                       }
+
+                       if (host.Length > 0) {
+                               builder.Append (host);
+                               if (port > 0)
+                                       builder.Append (":" + port);
+                       }
+
+                       if (path != String.Empty &&
+                           builder [builder.Length - 1] != '/' &&
+                           path.Length > 0 && path [0] != '/')
+                               builder.Append ('/');
+                       builder.Append (path);
+                       builder.Append (query);
+                       builder.Append (fragment);
+
+                       return builder.ToString ();
+               }
+       }
+}
index 7a948b464f107e27448bd44c9f7dd9db9fa01699..33bfbda5387be247027d6a876b27feacff267825 100644 (file)
@@ -233,7 +233,7 @@ namespace System {
 
                        switch (format) {
                        case UriFormat.UriEscaped:
-                               return Uri.EscapeString (s, false, true, true);
+                               return Uri.EscapeString (s, Uri.EscapeCommonHexBrackets);
                        case UriFormat.SafeUnescaped:
                                // TODO subset of escape rules
                                s = Uri.Unescape (s, false);
@@ -259,11 +259,9 @@ namespace System {
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeHttp, 80);
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeHttps, 443);
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeMailto, 25);
-#if NET_2_0
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeNetPipe, -1);
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeNetTcp, -1);
-#endif
-                       InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeNews, 119);
+                       InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeNews, -1);
                        InternalRegister (newtable, new DefaultUriParser (), Uri.UriSchemeNntp, 119);
                        // not defined in Uri.UriScheme* but a parser class exists
                        InternalRegister (newtable, new DefaultUriParser (), "ldap", 389);
index 355f015ba19723e16ae6e88d236aa03edaff9fc5..6d8b74e424d8d581642218ba04333cfca2c68f3c 100644 (file)
@@ -87,7 +87,6 @@ namespace System {
 #endif
                        }
 
-                       Console.WriteLine ("Converting: '{0}' of type '{1}'", value, value.GetType ().Name);
                        if (!CanConvertFrom (context, value.GetType ()))
                                throw new NotSupportedException (Locale.GetText ("Cannot convert from value."));
 
index 6fe50454f58e07e12a5290eaebe939fe022be46d..532586cba7ce7f8dd709d04047cda8333050ff67 100644 (file)
@@ -124,6 +124,7 @@ System.ComponentModel/ContainerTest.cs
 System.ComponentModel/CultureInfoConverterTest.cs
 System.ComponentModel/DataObjectMethodAttributeTests.cs
 System.ComponentModel/DateTimeConverterTests.cs
+System.ComponentModel/DateTimeOffsetConverterTests.cs
 System.ComponentModel/DefaultBindingPropertyAttributeTest.cs
 System.ComponentModel/DefaultValueAttributeTest.cs
 System.ComponentModel/DecimalConverterTests.cs
@@ -151,6 +152,7 @@ System.ComponentModel/SByteConverterTests.cs
 System.ComponentModel/SingleConverterTests.cs
 System.ComponentModel/ToolboxItemAttributeTests.cs
 System.ComponentModel/TypeConverterTests.cs
+System.ComponentModel/TypeDescriptionProviderTest.cs
 System.ComponentModel/TypeDescriptorTests.cs
 System.ComponentModel/UInt16ConverterTests.cs
 System.ComponentModel/UInt32ConverterTests.cs
diff --git a/mcs/class/System/Test/System.ComponentModel/DateTimeOffsetConverterTests.cs b/mcs/class/System/Test/System.ComponentModel/DateTimeOffsetConverterTests.cs
new file mode 100644 (file)
index 0000000..c3a1162
--- /dev/null
@@ -0,0 +1,240 @@
+//
+// DateTimeOffsetConverterTests.cs
+//
+// Author:
+//     Carlos Alberto Cortez (calberto.cortez@gmail.com)
+//
+// Copyright (C) 2010 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 NET_4_0
+
+using System;
+using System.ComponentModel;
+using System.ComponentModel.Design.Serialization;
+using System.Globalization;
+using NUnit.Framework;
+
+namespace MonoTests.System.ComponentModel
+{
+       [TestFixture]
+       public class DateTimeOffsetConverterTests
+       {
+               DateTimeOffsetConverter converter;
+        
+               [SetUp]
+               public void SetUp ()
+               {
+                       converter = new DateTimeOffsetConverter ();
+               }
+
+               [Test]
+               public void CanConvertFrom ()
+               {
+                       Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#A1");
+                       Assert.IsFalse (converter.CanConvertFrom (typeof (DateTime)), "#A2");
+                       Assert.IsFalse (converter.CanConvertFrom (typeof (DateTimeOffset)), "#A3");
+                       Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#A4");
+                       Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#A5");
+               }
+
+               [Test]
+               public void CanConvertTo ()
+               {
+                       Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#A1");
+                       Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#A2");
+                       Assert.IsFalse (converter.CanConvertTo (typeof (DateTime)), "#A3");
+                       Assert.IsFalse (converter.CanConvertTo (typeof (DateTimeOffset)), "#A4");
+                       Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#A5");
+               }
+
+               [Test]
+               public void ConvertFrom_String ()
+               {
+                       DateTimeOffset dateOffset = DateTimeOffset.Now;
+                       DateTimeOffset newDateOffset = (DateTimeOffset) converter.ConvertFrom (null, CultureInfo.InvariantCulture, 
+                                       dateOffset.ToString (CultureInfo.InvariantCulture));
+
+                       Assert.AreEqual (dateOffset.Date, newDateOffset.Date, "#A1");
+                       Assert.AreEqual (dateOffset.Hour, newDateOffset.Hour, "#A2");
+                       Assert.AreEqual (dateOffset.Minute, newDateOffset.Minute, "#A3");
+                       Assert.AreEqual (dateOffset.Second, newDateOffset.Second, "#A4");
+                       Assert.AreEqual (dateOffset.Offset, newDateOffset.Offset, "#A5");
+
+                       newDateOffset = (DateTimeOffset) converter.ConvertFrom (null, CultureInfo.InvariantCulture, String.Empty);
+                       Assert.AreEqual (DateTimeOffset.MinValue, newDateOffset, "#B1");
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertFrom_Object ()
+               {
+                       converter.ConvertFrom (new object ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertFrom_Int32 ()
+               {
+                       converter.ConvertFrom (10);
+               }
+
+               [Test]
+               public void ConvertTo_MinValue ()
+               {
+                       Assert.AreEqual (String.Empty, converter.ConvertTo (null, 
+                               CultureInfo.InvariantCulture, DateTimeOffset.MinValue, typeof (string)), "#A1");
+                       Assert.AreEqual (String.Empty, converter.ConvertTo (null, 
+                               CultureInfo.CurrentCulture, DateTimeOffset.MinValue, typeof (string)), "#A2");
+                       Assert.AreEqual (String.Empty, converter.ConvertTo (DateTimeOffset.MinValue, 
+                               typeof (string)), "#A3");
+               }
+
+               [Test]
+               public void ConvertTo_MaxValue ()
+               {
+                       Assert.AreEqual (DateTimeOffset.MaxValue.ToString (CultureInfo.InvariantCulture), 
+                               converter.ConvertTo (null, CultureInfo.InvariantCulture, DateTimeOffset.MaxValue, 
+                               typeof (string)), "#A1");
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertTo_object ()
+               {
+                       converter.ConvertTo (DateTimeOffset.Now, typeof (object));
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertTo_int ()
+               {
+                       converter.ConvertTo (DateTimeOffset.Now, typeof (int));
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertTo_DateTime ()
+               {
+                       converter.ConvertTo (DateTimeOffset.Now, typeof (DateTime));
+               }
+
+               [Test]
+               [ExpectedException (typeof (NotSupportedException))]
+               public void ConvertTo_DateTimeOffset ()
+               {
+                       converter.ConvertTo (DateTimeOffset.Now, typeof (DateTimeOffset));
+               }
+
+               [Test]
+               public void ConvertToString_MinValue ()
+               {
+                       Assert.AreEqual (String.Empty, converter.ConvertToString (null, 
+                               CultureInfo.InvariantCulture, DateTimeOffset.MinValue), "#A1");
+
+                       Assert.AreEqual (String.Empty, converter.ConvertToString (null, DateTimeOffset.MinValue), "#A2");
+                       Assert.AreEqual (String.Empty, converter.ConvertToString (null, 
+                               CultureInfo.CurrentCulture, DateTimeOffset.MinValue), "#A3");
+                       Assert.AreEqual (String.Empty, converter.ConvertToString (DateTimeOffset.MinValue), "#A4");
+               }
+
+               [Test]
+               public void ConvertToString_MaxValue ()
+               {
+                       Assert.AreEqual (DateTimeOffset.MaxValue.ToString (CultureInfo.InvariantCulture), 
+                               converter.ConvertToString (null, CultureInfo.InvariantCulture, DateTimeOffset.MaxValue), "#A1");
+               }
+
+               [Test]
+               public void ConvertToString ()
+               {
+                       CultureInfo ciUS = new CultureInfo("en-US");
+                       CultureInfo ciGB = new CultureInfo("en-GB");
+                       CultureInfo ciDE = new CultureInfo("de-DE");
+
+                       DateTimeOffset dateOffset = new DateTimeOffset (2008, 12, 31, 23, 59, 58, 5, new TimeSpan (3, 6, 0));
+                       DoTestToString ("12/31/2008 11:59 p.m. +03:06", dateOffset, ciUS);
+                       DoTestToString ("31/12/2008 23:59 +03:06", dateOffset, ciGB);
+                       DoTestToString ("31.12.2008 23:59 +03:06", dateOffset, ciDE);
+                       DoTestToString ("12/31/2008 23:59:58 +03:06", dateOffset, CultureInfo.InvariantCulture);
+                       Assert.AreEqual ("12/31/2008 23:59:58 +03:06", converter.ConvertToInvariantString (dateOffset), "Invariant");
+
+                       dateOffset = new DateTimeOffset (new DateTime (2008, 12, 31), new TimeSpan (0, 0, 0));
+                       DoTestToString ("12/31/2008 +00:00", dateOffset, ciUS);
+                       DoTestToString ("31/12/2008 +00:00", dateOffset, ciGB);
+                       DoTestToString ("31.12.2008 +00:00", dateOffset, ciDE);
+                       DoTestToString ("2008-12-31 +00:00", dateOffset, CultureInfo.InvariantCulture);
+                       Assert.AreEqual ("2008-12-31 +00:00", converter.ConvertToInvariantString (dateOffset), "Invariant");
+               }
+
+               void DoTestToString (string expected, DateTimeOffset value, CultureInfo ci)
+               {
+                       String message = ci.Name;
+                       if (message == null || message.Length == 0)
+                               message = "?Invariant";
+                       Assert.AreEqual (expected, converter.ConvertTo (null, ci, value, typeof (string)), message);
+               }
+
+               [Test]
+               [ExpectedException (typeof (FormatException))]
+               public void ConvertFrom_InvalidValue ()
+               {
+                       converter.ConvertFrom ("*1");
+               }
+
+               [Test]
+               [ExpectedException (typeof (FormatException))]
+               public void ConvertFrom_InvalidValue_Invariant ()
+               {
+                       converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
+               }
+
+               [Test]
+               [ExpectedException (typeof (FormatException))]
+               public void ConvertFromString_InvalidValue ()
+               {
+                       converter.ConvertFromString ("*1");
+               }
+
+               [Test]
+               [ExpectedException (typeof (FormatException))]
+               public void ConvertFromString_InvalidValue_Invariant ()
+               {
+                       converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
+               }
+
+               [Test]
+               public void ConvertTo_InstanceDescriptor ()
+               {
+                       DateTimeOffset dto = new DateTimeOffset (new DateTime (2010, 10, 11), new TimeSpan (3, 6, 0));
+                       InstanceDescriptor descriptor = (InstanceDescriptor) converter.ConvertTo (dto, typeof (InstanceDescriptor));
+
+                       Assert.AreEqual (".ctor", descriptor.MemberInfo.Name, "#A0");
+                       Assert.AreEqual (8, descriptor.Arguments.Count, "#A1");
+                       DateTimeOffset dto2 = (DateTimeOffset) descriptor.Invoke ();
+                       Assert.AreEqual (dto, dto2, "#A2");
+               }
+       }
+}
+
+#endif
+
diff --git a/mcs/class/System/Test/System.ComponentModel/TypeDescriptionProviderTest.cs b/mcs/class/System/Test/System.ComponentModel/TypeDescriptionProviderTest.cs
new file mode 100644 (file)
index 0000000..1c2a1e5
--- /dev/null
@@ -0,0 +1,77 @@
+//
+// TypeDescriptionProviderTest.cs
+//
+// Author:
+//     Carlos Alberto Cortez (calberto.cortez@gmail.com)
+//
+// Copyright (C) 2010 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.
+//
+
+using System;
+using System.ComponentModel;
+using System.ComponentModel.Design.Serialization;
+using System.Globalization;
+using NUnit.Framework;
+
+namespace MonoTests.System.ComponentModel
+{
+       [TestFixture]
+       public class TypeDescriptionProviderTest
+       {
+#if NET_4_0
+               [Test]
+               public void IsSupportedType ()
+               {
+                       CustomDescriptionProvider provider = new CustomDescriptionProvider ();
+                       Assert.IsTrue (provider.IsSupportedType (typeof (string)), "#A1");
+                       Assert.IsTrue (provider.IsSupportedType (typeof (object)), "#A2");
+                       Assert.IsTrue (provider.IsSupportedType (typeof (CustomDescriptionProvider)), "#A3");
+               }
+
+               [Test]
+               public void GetRuntimeType ()
+               {
+                       CustomDescriptionProvider provider = new CustomDescriptionProvider ();
+                       Assert.AreEqual (typeof (CustomDescriptionProvider), provider.GetRuntimeType (typeof (CustomDescriptionProvider)), "#A0");
+                       Assert.AreEqual (typeof (object), provider.GetRuntimeType (typeof (object)), "#A1");
+               }
+
+               [Test]
+               public void GetExtenderProviders ()
+               {
+                       CustomDescriptionProvider provider = new CustomDescriptionProvider ();
+                       IExtenderProvider [] providers = provider.GetExtenderProviders (typeof (object));
+                       Assert.IsNotNull (providers, "#A0");
+                       Assert.AreEqual (0, providers.Length, "#A1");
+               }
+
+               class CustomDescriptionProvider : TypeDescriptionProvider
+               {
+                       public new IExtenderProvider [] GetExtenderProviders (object instance)
+                       {
+                               return base.GetExtenderProviders (instance);
+                       }
+               }
+#endif
+       }
+}
+
index 82ef9917936de2e510b7fb8d27caafe3b9c348a0..7ae9130a028256f3356c79889433e327c05f6a5d 100644 (file)
@@ -14,11 +14,10 @@ using DescriptionAttribute = System.ComponentModel.DescriptionAttribute;
 using System.ComponentModel.Design;
 using System.Globalization;
 
-#if NET_2_0
 using System.Collections.Generic;
-#endif
 
 using NUnit.Framework;
+using System.Reflection;
 
 namespace MonoTests.System.ComponentModel
 {
@@ -460,7 +459,6 @@ namespace MonoTests.System.ComponentModel
                }
        }
 
-#if NET_2_0
        class MyCustomTypeDescriptor : CustomTypeDescriptor
        {
                public MyTypeDescriptionProvider Provider { get; private set; }
@@ -502,7 +500,6 @@ namespace MonoTests.System.ComponentModel
                        return base.CreateInstance (provider, objectType, argTypes, args);
                }
        }
-#endif
 
        [TestFixture]
        public class TypeDescriptorTests
@@ -512,7 +509,6 @@ namespace MonoTests.System.ComponentModel
                MyComponent nfscom = new MyComponent (new NoFilterSite (new MyContainer ()));
                AnotherComponent anothercom = new AnotherComponent ();
                
-#if NET_2_0
                [Test]
                [ExpectedException (typeof (ArgumentNullException))]
                public void TestAddAttributes_Type_Attributes_1 ()
@@ -1054,7 +1050,6 @@ namespace MonoTests.System.ComponentModel
                        Assert.IsNotNull (type, "#F1");
                        Assert.AreEqual (typeof (int), type, "#F1-1");
                }
-#endif
 
                [Test]
                public void TestICustomTypeDescriptor ()
@@ -1185,7 +1180,6 @@ namespace MonoTests.System.ComponentModel
                [Test]
                public void TestGetComponentName ()
                {
-#if NET_2_0
                        // in MS.NET 2.0, GetComponentName no longer returns
                        // the type name if there's no custom typedescriptor
                        // and no site
@@ -1195,14 +1189,6 @@ namespace MonoTests.System.ComponentModel
                        Assert.IsNull (TypeDescriptor.GetComponentName (new Exception (), false), "#4");
                        Assert.IsNull (TypeDescriptor.GetComponentName (typeof (Exception)), "#4");
                        Assert.IsNull (TypeDescriptor.GetComponentName (typeof (Exception), false), "#6");
-#else
-                       Assert.AreEqual ("MyComponent", TypeDescriptor.GetComponentName (com), "#1");
-                       Assert.AreEqual ("MyComponent", TypeDescriptor.GetComponentName (com, false), "#2");
-                       Assert.AreEqual ("Exception", TypeDescriptor.GetComponentName (new Exception ()), "#3");
-                       Assert.AreEqual ("Exception", TypeDescriptor.GetComponentName (new Exception (), false), "#4");
-                       Assert.IsNotNull (TypeDescriptor.GetComponentName (typeof (Exception)), "#5");
-                       Assert.IsNotNull (TypeDescriptor.GetComponentName (typeof (Exception), false), "#6");
-#endif
                        Assert.AreEqual ("TestName", TypeDescriptor.GetComponentName (sitedcom), "#7");
                        Assert.AreEqual ("TestName", TypeDescriptor.GetComponentName (sitedcom), "#8");
                }
@@ -1248,16 +1234,12 @@ namespace MonoTests.System.ComponentModel
                        Assert.AreEqual (typeof (TypeConverter), TypeDescriptor.GetConverter (new TestStruct ()).GetType (), "#26");
                        Assert.AreEqual (typeof (CollectionConverter), TypeDescriptor.GetConverter (new Hashtable ()).GetType (), "#27");
 
-#if NET_2_0
                        // Test from bug #76686
                        Assert.AreEqual  (typeof (Int32Converter), TypeDescriptor.GetConverter ((int?) 1).GetType (), "#28");
-#endif
                        Assert.IsTrue (TypeDescriptor.GetConverter (typeof (Component)) is ComponentConverter, "#29");
                        Assert.IsTrue (TypeDescriptor.GetConverter (new Component()) is ComponentConverter, "#30");
 
-#if NET_2_0
                        Assert.AreEqual (typeof (NullableConverter), TypeDescriptor.GetConverter (typeof (int?)).GetType (), "#31");
-#endif
                }
                
                [Test]
@@ -1278,12 +1260,7 @@ namespace MonoTests.System.ComponentModel
                        Assert.AreEqual ("AnotherEvent", des.Name, "#D2");
 
                        des = TypeDescriptor.GetDefaultEvent (sitedcom);
-#if NET_2_0
                        Assert.IsNull (des, "#E1");
-#else
-                       Assert.IsNotNull (des, "#E1");
-                       Assert.AreEqual ("AnotherEvent", des.Name, "#E2");
-#endif
 
                        des = TypeDescriptor.GetDefaultEvent (new MyComponent(new AnotherSite ()));
                        Assert.IsNotNull (des, "#F1");
@@ -1313,11 +1290,6 @@ namespace MonoTests.System.ComponentModel
                }
                
                [Test]
-#if ONLY_1_1
-               // throws NullReferenceException on MS.NET 1.x due to bug
-               // which is fixed in MS.NET 2.0
-               [NUnit.Framework.Category("NotDotNet")]
-#endif
                public void TestGetDefaultProperty2 ()
                {
                        PropertyDescriptor des = TypeDescriptor.GetDefaultProperty (sitedcom);
@@ -1474,11 +1446,6 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-#if ONLY_1_1
-               // throws NullReferenceException on MS.NET 1.x due to bug
-               // which is fixed in MS.NET 2.0
-               [NUnit.Framework.Category("NotDotNet")]
-#endif
                public void TestGetProperties2 ()
                {
                        PropertyDescriptorCollection col = TypeDescriptor.GetProperties (sitedcom);
@@ -1492,9 +1459,6 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-#if ONLY_1_1
-               [NUnit.Framework.Category ("NotDotNet")] // .NET 1.x (or csc 1.x) does not retain the original order
-#endif
                public void GetProperties_Order ()
                {
                        MyComponent com = new MyComponent (new MyContainer ());
@@ -1548,5 +1512,19 @@ namespace MonoTests.System.ComponentModel
                        Assert.AreEqual (1, pc.Count, "#1");
                        Assert.AreEqual ("Length", pc [0].Name, "#2");
                }
+
+#if NET_4_0
+               [Test]
+               public void InterfaceType ()
+               {
+                       Type interface_type = TypeDescriptor.InterfaceType;
+                       Assert.AreEqual ("TypeDescriptorInterface", interface_type.Name, "#A0");
+                       Assert.IsTrue (interface_type.IsClass, "#A1");
+                       Assert.IsTrue (interface_type.IsSealed, "#A2");
+                       Assert.AreEqual (typeof (object), interface_type.BaseType, "#A3");
+                       Assert.IsFalse (interface_type.IsInterface, "#A4");
+                       Assert.IsFalse (interface_type.IsPublic, "#A5");
+               }
+#endif
        }
 }
index 48906ac8cef2182d2e3e63bf039c5781fd0b0e2e..9f9266d232e0e1215ac9338681ff9a2f64b2133f 100644 (file)
@@ -6,6 +6,7 @@
 //   Martin Willemoes Hansen (mwh@sysrq.dk)
 //
 // (C) 2003 Martin Willemoes Hansen
+// Copyright (C) 2010 Novell, Inc (http://www.novell.com)
 //
 
 using NUnit.Framework;
@@ -29,11 +30,7 @@ namespace MonoTests.System
                {
                        b = new UriBuilder ();
                        Assert.AreEqual ("http", b.Scheme, "#1");
-#if NET_2_0
                        Assert.AreEqual ("localhost", b.Host, "#2");
-#else
-                       Assert.AreEqual ("loopback", b.Host, "#3");
-#endif
                        Assert.AreEqual (-1, b.Port, "#4");
                        Assert.AreEqual (string.Empty, b.Query, "#5");
                        Assert.AreEqual (string.Empty, b.Fragment, "#6");
@@ -61,23 +58,16 @@ namespace MonoTests.System
                        Assert.AreEqual (80, b.Port, "#B5");
                        Assert.AreEqual ("?name=50", b.Query, "#B5");
                        Assert.AreEqual ("http", b.Scheme, "#B6");
-#if NET_2_0
-                       // our 1.0 behavior matches that of .NET 2.0
                        Assert.AreEqual ("http://www.ximian.com/?name=50#test", b.Uri.ToString (), "#B7");
-#endif
                        Assert.AreEqual (string.Empty, b.UserName, "#B8");
                }
 
                [Test] // ctor (string)
-#if ONLY_1_1
-               [Category ("NotWorking")] // we always throw an ArgumentNullException
-#endif
                public void Constructor1_Uri_Null ()
                {
                        try {
                                new UriBuilder ((string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -85,14 +75,14 @@ namespace MonoTests.System
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("uriString", ex.ParamName, "#6");
                        }
-#else
-                       } catch (NullReferenceException) {
-                       }
-#endif
                }
 
                [Test] // ctor (Uri)
+#if NET_4_0
+               [ExpectedException (typeof (ArgumentNullException))]
+#else
                [ExpectedException (typeof (NullReferenceException))]
+#endif
                public void Constructor2_Uri_Null ()
                {
                        new UriBuilder ((Uri) null);
@@ -113,24 +103,43 @@ namespace MonoTests.System
                }
                
                [Test]
-               // This test does not make sense, will fix soon
-               [Category ("NotWorking")] // bug #75144
+               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");
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void Constructor_RelativeUri ()
+               {
+                       Uri relative = new Uri ("../dir/subdir/file", UriKind.RelativeOrAbsolute);
+                       UriBuilder ub = new UriBuilder (relative);
+               }
+
+               [Test]
                public void UserInfo ()
                {
-                       b = new UriBuilder ("mailto://myname:mypwd@contoso.com?subject=hello");
-#if NET_2_0
-                       Assert.AreEqual (string.Empty, b.UserName, "#1");
-                       Assert.AreEqual (string.Empty, b.Password, "#2");
-#else
-                       // NotWorking here for 1.x (bad behaviour in 1.x - may not be worth fixing)
-                       Assert.AreEqual ("myname", b.UserName, "#1");
-                       Assert.AreEqual ("mypwd", b.Password, "#2");
-#endif                 
+                       string s = "mailto://myname:mypwd@contoso.com?subject=hello";
+                       b = new UriBuilder (s);
+                       Assert.AreEqual (s, b.ToString (), "1.ToString");
+                       Assert.AreEqual (string.Empty, b.UserName, "1.UserName");
+                       Assert.AreEqual (string.Empty, b.Password, "1.Password");
+                       Assert.AreEqual ("//myname:mypwd@contoso.com", b.Uri.LocalPath, "1.Uri.LocalPath");
+
+                       // weird ?caching? issue, UserInfo is not updated if we look at the value of UserName before setting Password
+                       b = new UriBuilder ("mailto", "contoso.com");
+                       b.UserName = "myname";
+                       Assert.AreEqual ("myname", b.Uri.UserInfo, "2.UserName");
+                       b.Password = "mypwd";
+                       Assert.AreEqual ("myname", b.Uri.UserInfo, "2.Password");
+                       Assert.AreEqual ("/", b.Uri.LocalPath, "2.Uri.LocalPath");
+
                        b = new UriBuilder ("mailto", "contoso.com");
                        b.UserName = "myname";
                        b.Password = "mypwd";
-                       // NotWorking here for 2.0 - worth fixing
-                       Assert.AreEqual ("myname:mypwd", b.Uri.UserInfo, "#3");
+                       Assert.AreEqual ("myname:mypwd", b.Uri.UserInfo, "3.Uri.UserInfo");
+                       Assert.AreEqual ("/", b.Uri.LocalPath, "3.Uri.LocalPath");
                }
 
                [Test]
@@ -146,7 +155,7 @@ namespace MonoTests.System
                {
                        b.Port = -12345;
                }
-#if NET_2_0
+
                [Test]
                public void DefaultPort ()
                {
@@ -154,14 +163,7 @@ namespace MonoTests.System
                        Assert.AreEqual (-1, b.Port, "#1");
                        Assert.AreEqual ("http://www.ximian.com/foo/bar/index.html", b.ToString (), "#2");
                }
-#else
-               [Test]
-               [ExpectedException (typeof (ArgumentOutOfRangeException))]
-               public void BadPort3 ()
-               {
-                       b.Port = -1;
-               }
-#endif
+
                [Test]
                public void Query ()
                {
@@ -175,20 +177,12 @@ namespace MonoTests.System
                        b.Fragment = "test";
                        Assert.AreEqual ("#test", b.Fragment, "#5");
                        b.Query = "name";
-#if NET_2_0
                        Assert.AreEqual ("#test", b.Fragment, "#6");
-#else
-                       Assert.AreEqual (string.Empty, b.Fragment, "#6");
-#endif
                        Assert.AreEqual ("?name", b.Query, "#7");
                        b.Fragment = "run";
                        Assert.AreEqual ("#run", b.Fragment, "#8");
                        b.Query = null;
-#if NET_2_0
                        Assert.AreEqual ("#run", b.Fragment, "#9");
-#else
-                       Assert.AreEqual (string.Empty, b.Fragment, "#9");
-#endif
                        Assert.AreEqual (string.Empty, b.Query, "#10");
                }
                
@@ -205,11 +199,7 @@ namespace MonoTests.System
                        b.Query = "name";
                        Assert.AreEqual ("?name", b.Query, "#5");
                        b.Fragment = null;
-#if NET_2_0
                        Assert.AreEqual ("?name", b.Query, "#6");
-#else
-                       Assert.AreEqual (string.Empty, b.Query, "#6");
-#endif
                        Assert.AreEqual (string.Empty, b.Fragment, "#7");
                }
                
@@ -233,25 +223,22 @@ namespace MonoTests.System
                }
                
                [Test]
-#if NET_2_0
-               [Category ("NotWorking")] // equals changed in 2.0
-#endif
                public void Equals ()
                {
                        b = new UriBuilder ("http://", "www.ximian.com", 80, "foo/bar/index.html?item=1");
+                       Assert.AreEqual ("foo/bar/index.html%3Fitem=1", b.Path, "1.Path");
+                       Assert.AreEqual ("http://www.ximian.com:80/foo/bar/index.html%3Fitem=1", b.ToString (), "1.ToString");
+
                        b2 = new UriBuilder ("http", "www.ximian.com", 80, "/foo/bar/index.html", "?item=1");
+                       Assert.AreEqual ("http://www.ximian.com:80/foo/bar/index.html?item=1", b2.ToString (), "2.ToString");
+
                        b3 = new UriBuilder (new Uri ("http://www.ximian.com/foo/bar/index.html?item=1"));
-#if NET_2_0
+                       Assert.AreEqual ("http://www.ximian.com:80/foo/bar/index.html?item=1", b3.ToString (), "3.ToString");
+
                        Assert.IsFalse (b.Equals (b2), "#1");
                        Assert.IsFalse (b.Uri.Equals (b2.Uri), "#2");
                        Assert.IsFalse (b.Equals (b3), "#3");
                        Assert.IsFalse (b3.Equals (b), "#4");
-#else
-                       Assert.IsTrue (b.Equals (b2), "#1");
-                       Assert.IsTrue (b.Uri.Equals (b2.Uri), "#2");
-                       Assert.IsTrue (b.Equals (b3), "#3");
-                       Assert.IsTrue (b3.Equals (b), "#4");
-#endif
                        Assert.IsTrue (b2.Equals (b3), "#5");
                }
                
@@ -293,6 +280,69 @@ namespace MonoTests.System
                        Assert.AreEqual ("#Features", uri.Fragment, "#1");
                        Assert.AreEqual ("http://www.mono-project.com/Main_Page#Features", uri.Uri.ToString (), "#2");
                }
+
+               [Test]
+               public void IPv6_Host ()
+               {
+                       UriBuilder ub = new UriBuilder ("http", "[1:2:3:4:5:6:7:8]", 8080, "/dir/subdir/file");
+                       Assert.AreEqual ("[1:2:3:4:5:6:7:8]", ub.Host, "Host.1");
+                       Assert.AreEqual ("[0001:0002:0003:0004:0005:0006:0007:0008]", ub.Uri.Host, "Uri.Host");
+                       // once the Uri is created then some builder properties may change
+                       Assert.AreEqual ("[0001:0002:0003:0004:0005:0006:0007:0008]", ub.Host, "Host.2");
+               }
+
+               [Test]
+               public void IPv6_Host_IncompleteAddress ()
+               {
+                       UriBuilder ub = new UriBuilder ("http", "1:2:3:4:5:6:7:8", 8080, "/dir/subdir/file");
+                       Assert.AreEqual ("[1:2:3:4:5:6:7:8]", ub.Host, "1.Host");
+                       Assert.AreEqual ("http://[1:2:3:4:5:6:7:8]:8080/dir/subdir/file", ub.ToString (), "1.ToString ()");
+
+                       ub = new UriBuilder ("http", "1:", 8080, "/dir/subdir/file");
+                       Assert.AreEqual ("[1:]", ub.Host, "2.Host");
+                       Assert.AreEqual ("http://[1:]:8080/dir/subdir/file", ub.ToString (), "2.ToString ()");
+
+                       ub = new UriBuilder ("http", "[1:", 8080, "/dir/subdir/file");
+                       Assert.AreEqual ("[1:", ub.Host, "3.Host");
+                       Assert.AreEqual ("http://[1::8080/dir/subdir/file", ub.ToString (), "3.ToString ()");
+
+                       ub = new UriBuilder ("http", "1:2]", 8080, "/dir/subdir/file");
+                       Assert.AreEqual ("[1:2]]", ub.Host, "4.Host");
+                       Assert.AreEqual ("http://[1:2]]:8080/dir/subdir/file", ub.ToString (), "4.ToString ()");
+               }
+
+               [Test]
+               public void Path_UriAbsolutePath_Path ()
+               {
+                       UriBuilder ub = new UriBuilder ("http", "127.0.0.1", 80, "dir/subdir/file");
+                       Assert.AreEqual ("dir/subdir/file", ub.Path, "Path.1");
+                       Assert.AreEqual ("/dir/subdir/file", ub.Uri.AbsolutePath, "Uri.AbsolutePath");
+                       // once the Uri is created then some builder properties may change
+                       Assert.AreEqual ("/dir/subdir/file", ub.Path, "Path.2");
+               }
+
+               [Test]
+               public void UnparsableUri ()
+               {
+                       // some URI can't be parsed by System.Uri but are accepted by UriBuilder
+                       Uri u = null;
+                       string uri = "www.mono-project.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 ("http", ub.Scheme, "1.Scheme");
+                       Assert.AreEqual (80, ub.Port, "1.Port");
+                       Assert.AreEqual ("/", ub.Path, "1.Path");
+
+                       // always assume http, port 80
+                       uri = "ftp.novell.com/dir/subdir/file";
+                       ub = new UriBuilder (uri);
+                       Assert.IsFalse (Uri.TryCreate (uri, UriKind.Absolute, out u), "2.Uri.TryCreate");
+                       Assert.AreEqual ("ftp.novell.com", ub.Host, "2.Host");
+                       Assert.AreEqual ("http", ub.Scheme, "2.Scheme");
+                       Assert.AreEqual (80, ub.Port, "2.Port");
+                       Assert.AreEqual ("/dir/subdir/file", ub.Path, "2.Path");
+               }
        }
 }
 
index 2c9d43cd32a7f3dd2fef231efc678a7c0897aadc..22de0a2a9bed055acaebd53f2ffeb7932d3160ae 100644 (file)
@@ -716,8 +716,12 @@ namespace MonoTests.System
                        Uri u1 = new Uri("http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx");
                        Uri u2 = new Uri("http://localhost:8080/test.aspx?ReturnUrl=%252fSearchDoc%252fSearcher.aspx");
 
-                       Assert.AreEqual (u1.ToString (), "http://localhost:8080/test.aspx?ReturnUrl=/SearchDoc/Searcher.aspx", "QE1");
-                       Assert.AreEqual (u2.ToString (), "http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx", "QE2");
+                       Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=/SearchDoc/Searcher.aspx", u1.ToString (), "QE1");
+#if NET_2_0
+                       Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=%252fSearchDoc%252fSearcher.aspx", u2.ToString (), "QE2");
+#else
+                       Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx", u2.ToString (), "QE2");
+#endif
                }
 
                [Test]
@@ -1475,6 +1479,18 @@ namespace MonoTests.System
                        Assert.AreEqual ("dummypage.html", segments [2], "#04");
                }
 
+               [Test]
+               public void CachingSegments ()
+               {
+                       Uri uri = new Uri ("http://localhost/dir/dummypage.html");
+                       uri.Segments [0] = uri.Segments [1] = uri.Segments [2] = "*";
+                       string [] segments = uri.Segments;
+                       Assert.AreEqual (3, segments.Length, "#01");
+                       Assert.AreEqual ("/", segments [0], "#02");
+                       Assert.AreEqual ("dir/", segments [1], "#03");
+                       Assert.AreEqual ("dummypage.html", segments [2], "#04");
+               }
+
                [Test]
                public void Segments3 ()
                {
@@ -1487,21 +1503,17 @@ namespace MonoTests.System
                }
 
                [Test]
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
                public void Segments4 ()
                {
                        Uri uri = new Uri ("file:///c:/hello");
+
+                       Assert.AreEqual ("c:/hello", uri.AbsolutePath, "AbsolutePath");
+                       Assert.AreEqual ("c:\\hello", uri.LocalPath, "LocalPath");
+
                        string [] segments = uri.Segments;
                        Assert.AreEqual (3, segments.Length, "#01");
-#if NET_2_0
                        Assert.AreEqual ("/", segments [0], "#02");
                        Assert.AreEqual ("c:/", segments[1], "#03");
-#else
-                       Assert.AreEqual ("c:", segments [0], "#02");
-                       Assert.AreEqual ("/", segments [1], "#03");
-#endif
                        Assert.AreEqual ("hello", segments [2], "#04");
                }
 
@@ -1652,8 +1664,12 @@ namespace MonoTests.System
                                "file:///tmp/x (%232).jpg",
                                "file:///tmp/ü (%232).jpg" };
 
-                       foreach (string test in tests)
-                               Assert.AreEqual (test, new Uri (test).ToString ());
+                       foreach (string test in tests) {
+                               Uri uri = new Uri (test);
+                               Assert.IsFalse (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString/" + test);
+                               Assert.AreEqual (test, uri.OriginalString, "OriginalString/" + test);
+                               Assert.AreEqual (test, uri.ToString (), "ToString/" + test);
+                       }
                }
 
                // This test doesn't work on Linux, and arguably shouldn't work.
@@ -1786,7 +1802,7 @@ namespace MonoTests.System
                        Assert.IsFalse (fileUri.IsUnc, "LocalPath_FileNameWithAtSign IsUnc");
 
                        Assert.AreEqual (fullpath, fileUri.OriginalString, "LocalPath_FileNameWithAtSign OriginalString");
-                       Assert.AreEqual (path, new DerivedUri (fullpath).TestUnescape(path), "LocalPath_FileNameWithAtSign ProtectedUnescape");
+                       Assert.AreEqual (path, new DerivedUri (fullpath).TestUnescape (path), "LocalPath_FileNameWithAtSign ProtectedUnescape");
                        Assert.AreEqual (path, fileUri.AbsolutePath, "LocalPath_FileNameWithAtSign AbsPath");
                        Assert.AreEqual (path, fileUri.LocalPath, "LocalPath_FileNameWithAtSign LocalPath");
                }
@@ -1823,7 +1839,6 @@ namespace MonoTests.System
                }
 
                [Test]
-               [Category ("NotWorking")] // MS.NET seems not to like userinfo in a file:// uri...
                [ExpectedException (typeof (UriFormatException))]
                public void LocalPath_FileNameWithAtSign6 ()
                {
@@ -1833,6 +1848,7 @@ namespace MonoTests.System
                }
 
                [Test]
+               [Category ("NotDotNet")]
                public void UnixAbsoluteFilePath_WithSpecialChars1 ()
                {
                        Uri unixuri = new Uri ("/home/user/a@b");
@@ -1840,6 +1856,7 @@ namespace MonoTests.System
                }
 
                [Test]
+               [Category ("NotDotNet")]
                public void UnixAbsoluteFilePath_WithSpecialChars2 ()
                {
                        Uri unixuri = new Uri ("/home/user/a:b");
@@ -1862,9 +1879,9 @@ namespace MonoTests.System
                        Assert.AreEqual ("http://media.libsyn.com/bounce/http://cdn4.libsyn.com/nerdist/somestuff.txt", uri.ToString ());
                }
 
-               public class DerivedUri : Uri
-               {
-                       public DerivedUri (string uriString) : base (uriString)
+               public class DerivedUri : Uri {
+                       public DerivedUri (string uriString)
+                               : base (uriString)
                        {
                        }
 
index f1d6ed3068cfff1b40d6f304c44a60c1d49650fa..d0950f50925f0a2a8c5fd4d601fc132900cdb2bc 100644 (file)
@@ -10,7 +10,6 @@ using NUnit.Framework;
 \r
 namespace MonoTests.System\r
 {\r
-#if NET_2_0\r
        // help bring Moonlight tests back to mono/mcs nunit\r
 \r
        public delegate void TestCode ();\r
@@ -43,7 +42,7 @@ namespace MonoTests.System
                                throw new AssertionException (string.Format ("Expected '{0}', but got no exception. {1}", expected_exception.FullName, message));\r
                }\r
        }\r
-#endif\r
+
        [TestFixture]\r
        public class UriTest2\r
        {\r
@@ -97,9 +96,7 @@ namespace MonoTests.System
                }\r
 \r
                [Test]\r
-#if NET_2_0\r
                [Ignore ("Tests needs to be updated for 2.0")]\r
-#endif\r
                public void AbsoluteUriFromFile ()\r
                {\r
                        FromResource ("test-uri-props.txt", null);\r
@@ -107,9 +104,7 @@ namespace MonoTests.System
                \r
                [Test]\r
                [Category("NotDotNet")]\r
-#if NET_2_0\r
                [Ignore ("Tests needs to be updated for 2.0")]\r
-#endif\r
                public void AbsoluteUriFromFileManual ()\r
                {\r
                        if (Path.DirectorySeparatorChar == '\\')\r
@@ -118,9 +113,7 @@ namespace MonoTests.System
                }\r
                \r
                [Test]\r
-#if NET_2_0\r
                [Ignore ("Tests needs to be updated for 2.0")]\r
-#endif\r
                public void RelativeUriFromFile ()\r
                {\r
                        FromResource ("test-uri-relative-props.txt", new Uri ("http://www.go-mono.com"));\r
@@ -209,10 +202,8 @@ TextWriter sw = Console.Out;
                        Assert.AreEqual ("mailto", Uri.UriSchemeMailto, "mailto");\r
                        Assert.AreEqual ("news", Uri.UriSchemeNews, "news");\r
                        Assert.AreEqual ("nntp", Uri.UriSchemeNntp, "file");\r
-#if NET_2_0\r
                        Assert.AreEqual ("net.pipe", Uri.UriSchemeNetPipe, "net.pipe");\r
                        Assert.AreEqual ("net.tcp", Uri.UriSchemeNetTcp, "net.tcp");\r
-#endif\r
                }\r
 \r
                [Test] // bug #71049\r
@@ -223,9 +214,6 @@ TextWriter sw = Console.Out;
                }\r
 \r
                [Test]\r
-#if ONLY_1_1\r
-               [Category ("NotDotNet")] // 1.x throws an UriFormatException\r
-#endif\r
                public void NoHostName1_Bug76146 ()\r
                {\r
                        Uri u = new Uri ("foo:///?bar");\r
@@ -248,9 +236,6 @@ TextWriter sw = Console.Out;
                }\r
 \r
                [Test]\r
-#if ONLY_1_1\r
-               [Category ("NotDotNet")] // 1.x throws an UriFormatException\r
-#endif\r
                public void NoHostName2_Bug76146 ()\r
                {\r
                        Uri u = new Uri ("foo:///bar");\r
@@ -278,7 +263,7 @@ TextWriter sw = Console.Out;
                {\r
                        new Uri ("http://127.0.0.1::::/");\r
                }\r
-#if NET_2_0\r
+
                [Test]\r
                public void File ()\r
                {\r
@@ -548,6 +533,390 @@ TextWriter sw = Console.Out;
                        Assert.AreEqual (uri.Port.ToString (), uri.GetComponents (UriComponents.StrongPort, UriFormat.Unescaped), "StrongPort");\r
                        Assert.AreEqual (uri.UserInfo, uri.GetComponents (UriComponents.UserInfo, UriFormat.Unescaped), "UserInfo");\r
                }\r
-#endif\r
+
+               [Test]
+               public void Merge_Query_Fragment ()
+               {
+                       Uri absolute = new Uri ("http://host/dir/subdir/weird;name?moonlight");
+                       Assert.AreEqual ("?moonlight", absolute.Query, "absolute.Query");
+
+                       Uri merged = new Uri (absolute, "#mono");
+                       Assert.AreEqual ("#mono", merged.Fragment, "merged.Fragment");
+                       Assert.AreEqual ("?moonlight", merged.Query, "merged.Query");
+                       Assert.AreEqual ("http://host/dir/subdir/weird;name?moonlight#mono", merged.ToString (), "merged.ToString");
+               }
+
+               [Test]
+               public void Merge_Query_Query ()
+               {
+                       Uri absolute = new Uri ("http://host/dir/subdir/weird;name?moonlight");
+                       Assert.AreEqual ("?moonlight", absolute.Query, "absolute.Query");
+
+                       Uri merged = new Uri (absolute, "?moon");
+                       Assert.AreEqual ("?moon", merged.Query, "merged.Query");
+#if NET_4_0
+                       Assert.AreEqual ("http://host/dir/subdir/weird;name?moon", merged.ToString (), "merged.ToString");
+#else
+                       Assert.AreEqual ("http://host/dir/subdir/?moon", merged.ToString (), "merged.ToString");
+#endif
+               }
+
+               [Test]
+               public void Merge_Query_RelativePath ()
+               {
+                       Uri absolute = new Uri ("http://host/dir/subdir/weird;name?moonlight");
+                       Assert.AreEqual ("?moonlight", absolute.Query, "absolute.Query");
+
+                       Uri merged = new Uri (absolute, "../");
+                       Assert.AreEqual (String.Empty, merged.Query, "../Query");
+                       Assert.AreEqual ("http://host/dir/", merged.ToString (), "../ToString");
+
+                       merged = new Uri (absolute, "..");
+                       Assert.AreEqual (String.Empty, merged.Query, "..Query");
+                       Assert.AreEqual ("http://host/dir/", merged.ToString (), "..ToString");
+
+                       merged = new Uri (absolute, "./");
+                       Assert.AreEqual (String.Empty, merged.Query, "./Query");
+                       Assert.AreEqual ("http://host/dir/subdir/", merged.ToString (), "./ToString");
+
+                       merged = new Uri (absolute, ".");
+                       Assert.AreEqual (String.Empty, merged.Query, ".Query");
+                       Assert.AreEqual ("http://host/dir/subdir/", merged.ToString (), ".ToString");
+
+                       merged = new Uri (absolute, "/");
+                       Assert.AreEqual (String.Empty, merged.Query, "/Query");
+                       Assert.AreEqual ("http://host/", merged.ToString (), "/ToString");
+
+                       merged = new Uri (absolute, "index.html");
+                       Assert.AreEqual (String.Empty, merged.Query, "index.html Query");
+                       Assert.AreEqual ("http://host/dir/subdir/index.html", merged.ToString (), "index.html ToString");
+
+                       merged = new Uri (absolute, "i");
+                       Assert.AreEqual (String.Empty, merged.Query, "i Query");
+                       Assert.AreEqual ("http://host/dir/subdir/i", merged.ToString (), "i ToString");
+
+                       merged = new Uri (absolute, String.Empty);
+                       Assert.AreEqual ("?moonlight", merged.Query, "Query");
+                       Assert.AreEqual ("http://host/dir/subdir/weird;name?moonlight", merged.ToString (), "ToString");
+               }
+
+               [Test]
+               public void Merge_Fragment_RelativePath ()
+               {
+                       Uri absolute = new Uri ("http://host/dir/subdir/weird;name#mono");
+                       Assert.AreEqual ("#mono", absolute.Fragment, "absolute.Fragment");
+
+                       Uri merged = new Uri (absolute, "../");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "../Fragment");
+                       Assert.AreEqual ("http://host/dir/", merged.ToString (), "../ToString");
+
+                       merged = new Uri (absolute, "..");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "..Fragment");
+                       Assert.AreEqual ("http://host/dir/", merged.ToString (), "..ToString");
+
+                       merged = new Uri (absolute, "./");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "./Fragment");
+                       Assert.AreEqual ("http://host/dir/subdir/", merged.ToString (), "./ToString");
+
+                       merged = new Uri (absolute, ".");
+                       Assert.AreEqual (String.Empty, merged.Fragment, ".Fragment");
+                       Assert.AreEqual ("http://host/dir/subdir/", merged.ToString (), ".ToString");
+
+                       merged = new Uri (absolute, "/");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "/Fragment");
+                       Assert.AreEqual ("http://host/", merged.ToString (), "/ToString");
+
+                       merged = new Uri (absolute, "index.html");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "index.html Fragment");
+                       Assert.AreEqual ("http://host/dir/subdir/index.html", merged.ToString (), "index.html ToString");
+
+                       merged = new Uri (absolute, "i");
+                       Assert.AreEqual (String.Empty, merged.Fragment, "i Fragment");
+                       Assert.AreEqual ("http://host/dir/subdir/i", merged.ToString (), "i ToString");
+
+                       merged = new Uri (absolute, String.Empty);
+                       Assert.AreEqual ("#mono", merged.Fragment, "Fragment");
+                       Assert.AreEqual ("http://host/dir/subdir/weird;name#mono", merged.ToString (), "ToString");
+               }
+
+               [Test]
+               public void Host_Drive ()
+               {
+                       Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName ("c:"), "c:");
+                       Assert.AreEqual (UriHostNameType.Dns, Uri.CheckHostName ("c"), "c");
+
+                       Uri uri = new Uri ("http://c:/dir/subdir/file");
+                       Assert.AreEqual ("c", uri.Authority, "http.Authority");
+                       Assert.AreEqual ("c", uri.DnsSafeHost, "http.DnsSafeHost");
+                       Assert.AreEqual ("c", uri.Host, "http.Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "http.HostNameType");
+                       Assert.AreEqual ("http://c/dir/subdir/file", uri.ToString (), "http.ToString");
+
+                       uri = new Uri ("https://c:/dir/subdir/file");
+                       Assert.AreEqual ("c", uri.Authority, "https.Authority");
+                       Assert.AreEqual ("c", uri.DnsSafeHost, "https.DnsSafeHost");
+                       Assert.AreEqual ("c", uri.Host, "https.Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "https.HostNameType");
+                       Assert.AreEqual ("https://c/dir/subdir/file", uri.ToString (), "https.ToString");
+
+                       uri = new Uri ("ftp://c:/dir/subdir/file");
+                       Assert.AreEqual ("c", uri.Authority, "ftp.Authority");
+                       Assert.AreEqual ("c", uri.DnsSafeHost, "ftp.DnsSafeHost");
+                       Assert.AreEqual ("c", uri.Host, "ftp.Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "ftp.HostNameType");
+                       Assert.AreEqual ("ftp://c/dir/subdir/file", uri.ToString (), "ftp.ToString");
+
+                       uri = new Uri ("nntp://c:/123456@c");
+                       Assert.AreEqual ("c", uri.Authority, "nntp.Authority");
+                       Assert.AreEqual ("c", uri.DnsSafeHost, "nntp.DnsSafeHost");
+                       Assert.AreEqual ("c", uri.Host, "nntp.Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "nntp.HostNameType");
+                       Assert.AreEqual ("nntp://c/123456@c", uri.ToString (), "nntp.ToString");
+
+                       uri = new Uri ("file://c:/dir/subdir/file");
+                       Assert.AreEqual (String.Empty, uri.Authority, "file.Authority");
+                       Assert.AreEqual (String.Empty, uri.DnsSafeHost, "file.DnsSafeHost");
+                       Assert.AreEqual (String.Empty, uri.Host, "file.Host");
+                       Assert.AreEqual (UriHostNameType.Basic, uri.HostNameType, "file.HostNameType");
+                       Assert.AreEqual ("file:///c:/dir/subdir/file", uri.ToString (), "file.ToString");
+               }
+
+               [Test]
+               public void UnknownScheme ()
+               {
+                       Uri uri = new Uri ("mono:c:\\dir\\subdir\\file");
+                       Assert.IsFalse (uri.IsWellFormedOriginalString (), "IsWellFormedOriginalString");
+                       Assert.AreEqual (String.Empty, uri.Host, "Host");
+                       Assert.AreEqual ("c:\\dir\\subdir\\file", uri.LocalPath, "LocalPath");
+                       // make the next assert work on both Windows and Mac (wrt Silverlight)
+                       Assert.AreEqual ("mono:c:/dir/subdir/file", uri.ToString ().Replace ("%5C", "/"), "ToString");
+
+                       uri = new Uri ("mono://host/dir/subdir/file");
+                       Assert.IsTrue (uri.IsWellFormedOriginalString (), "2/IsWellFormedOriginalString");
+                       Assert.AreEqual ("host", uri.Host, "2/Host");
+                       Assert.AreEqual ("/dir/subdir/file", uri.AbsolutePath, "2/AbsolutePath");
+                       Assert.AreEqual ("/dir/subdir/file", uri.LocalPath, "2/LocalPath");
+
+                       uri = new Uri ("mono:///host/dir/subdir/file");
+                       Assert.IsTrue (uri.IsWellFormedOriginalString (), "3/IsWellFormedOriginalString");
+                       Assert.AreEqual (String.Empty, uri.Host, "3/Host");
+                       Assert.AreEqual ("/host/dir/subdir/file", uri.AbsolutePath, "3/AbsolutePath");
+                       Assert.AreEqual ("/host/dir/subdir/file", uri.LocalPath, "3/LocalPath");
+
+                       uri = new Uri ("mono:////host/dir/subdir/file");
+                       Assert.IsTrue (uri.IsWellFormedOriginalString (), "4/IsWellFormedOriginalString");
+                       Assert.AreEqual (String.Empty, uri.Host, "4/Host");
+                       Assert.AreEqual ("//host/dir/subdir/file", uri.AbsolutePath, "4/AbsolutePath");
+                       Assert.AreEqual ("//host/dir/subdir/file", uri.LocalPath, "4/LocalPath");
+
+                       // query and fragment
+                       uri = new Uri ("mono://host/dir/subdir/file?query#fragment");
+                       Assert.AreEqual ("/dir/subdir/file", uri.AbsolutePath, "qf.AbsolutePath");
+                       Assert.AreEqual ("?query", uri.Query, "qf.Query");
+                       Assert.AreEqual ("#fragment", uri.Fragment, "qf.Fragment");
+
+                       // special characters
+                       uri = new Uri ("mono://host/<>%\"{}|\\^`;/:@&=+$,[]#abc");
+                       Assert.AreEqual ("/%3C%3E%25%22%7B%7D%7C/%5E%60;/:@&=+$,%5B%5D", uri.AbsolutePath, "Special");
+               }
+
+               [Test]
+               public void DriveAndForwardSlashes_Segments ()
+               {
+                       Uri uri = new Uri ("mono:c:\\dir\\subdir\\file");
+                       string [] segments = uri.Segments;
+                       Assert.AreEqual (4, segments.Length, "segments");
+                       // make the tests work on both Windows and Mac (wrt Silverlight)
+                       Assert.AreEqual ("c:/", segments [0].Replace ("%5C", "/"), "s[0]");
+                       Assert.AreEqual ("dir/", segments [1].Replace ("%5C", "/"), "s[1]");
+                       Assert.AreEqual ("subdir/", segments [2].Replace ("%5C", "/"), "s[2]");
+                       Assert.AreEqual ("file", segments [3], "s[3]");
+               }
+
+               [Test]
+               public void NewsScheme ()
+               {
+                       Uri uri = new Uri ("news:novell.mono.moonlight/uri?query");
+
+                       Assert.AreEqual ("novell.mono.moonlight/uri%3Fquery", uri.AbsolutePath, "AbsolutePath");
+                       Assert.AreEqual ("news:novell.mono.moonlight/uri%3Fquery", uri.AbsoluteUri, "AbsoluteUri");
+                       Assert.AreEqual (String.Empty, uri.Authority, "Authority");
+                       Assert.AreEqual (String.Empty, uri.DnsSafeHost, "DnsSafeHost");
+                       Assert.AreEqual (String.Empty, uri.Fragment, "Fragment");
+                       Assert.AreEqual (String.Empty, uri.Host, "Host");
+                       Assert.AreEqual (UriHostNameType.Unknown, uri.HostNameType, "HostNameType");
+                       Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri");
+                       Assert.IsTrue (uri.IsDefaultPort, "IsDefaultPort");
+                       Assert.IsFalse (uri.IsFile, "IsFile");
+                       Assert.IsFalse (uri.IsLoopback, "IsLoopback");
+                       Assert.IsFalse (uri.IsUnc, "IsUnc");
+                       Assert.AreEqual ("novell.mono.moonlight/uri?query", uri.LocalPath, "LocalPath");
+                       Assert.AreEqual ("news:novell.mono.moonlight/uri?query", uri.OriginalString, "OriginalString");
+                       Assert.AreEqual ("novell.mono.moonlight/uri%3Fquery", uri.PathAndQuery, "PathAndQuery");
+                       Assert.AreEqual (-1, uri.Port, "Port");
+                       Assert.AreEqual (String.Empty, uri.Query, "Query");
+                       Assert.AreEqual ("news", uri.Scheme, "Scheme");
+                       Assert.AreEqual ("novell.mono.moonlight/", uri.Segments [0], "Segments [0]");
+                       Assert.AreEqual ("uri%3Fquery", uri.Segments [1], "Segments [1]");
+                       Assert.IsFalse (uri.UserEscaped, "UserEscaped");
+                       Assert.AreEqual (String.Empty, uri.UserInfo, "UserInfo");
+
+                       // special escaped characters - they differs a bit from other URI
+                       uri = new Uri ("news:novell.mono.moonlight/<>%\"{}|\\^`;/?:@&=+$,[]#abc");
+                       Assert.AreEqual ("novell.mono.moonlight/%3C%3E%25%22%7B%7D%7C%5C%5E%60;/%3F:@&=+$,%5B%5D", uri.AbsolutePath, "Special");
+                       Assert.AreEqual ("#abc", uri.Fragment, "Special/Fragment");
+               }
+
+               [Test]
+               public void NntpScheme ()
+               {
+                       Uri uri = new Uri ("nntp://news.mono-project.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 (String.Empty, uri.Fragment, "Fragment");
+                       Assert.AreEqual ("news.mono-project.com", uri.Host, "Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "HostNameType");
+                       Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri");
+                       Assert.IsTrue (uri.IsDefaultPort, "IsDefaultPort");
+                       Assert.IsFalse (uri.IsFile, "IsFile");
+                       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 ("/novell.mono.moonlight/uri%3Fquery", uri.PathAndQuery, "PathAndQuery");
+                       Assert.AreEqual (119, uri.Port, "Port");
+                       Assert.AreEqual (String.Empty, uri.Query, "Query");
+                       Assert.AreEqual ("nntp", uri.Scheme, "Scheme");
+                       Assert.AreEqual ("/", uri.Segments [0], "Segments [0]");
+                       Assert.AreEqual ("novell.mono.moonlight/", uri.Segments [1], "Segments [1]");
+                       Assert.AreEqual ("uri%3Fquery", uri.Segments [2], "Segments [2]");
+                       Assert.IsFalse (uri.UserEscaped, "UserEscaped");
+                       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");
+                       Assert.AreEqual ("/novell.mono.moonlight/%3C%3E%25%22%7B%7D%7C%5C%5E%60;/%3F:@&=+$,%5B%5D", uri.AbsolutePath, "Special");
+                       Assert.AreEqual ("#abc", uri.Fragment, "Special/Fragment");
+               }
+
+               [Test]
+               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");
+                       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 (String.Empty, uri.Fragment, "Fragment");
+                       Assert.AreEqual ("ftp.mono-project.com", uri.Host, "Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "HostNameType");
+                       Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri");
+                       Assert.IsFalse (uri.IsDefaultPort, "IsDefaultPort");
+                       Assert.IsFalse (uri.IsFile, "IsFile");
+                       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 ("/mono.zip%3Flatest-n-greatest", uri.PathAndQuery, "PathAndQuery");
+                       Assert.AreEqual (2121, uri.Port, "Port");
+                       Assert.AreEqual (String.Empty, uri.Query, "Query");
+                       Assert.AreEqual ("ftp", uri.Scheme, "Scheme");
+                       Assert.AreEqual ("/", uri.Segments [0], "Segments [0]");
+                       Assert.AreEqual ("mono.zip%3Flatest-n-greatest", uri.Segments [1], "Segments [1]");
+                       Assert.IsFalse (uri.UserEscaped, "UserEscaped");
+                       Assert.AreEqual ("user:password", uri.UserInfo, "UserInfo");
+
+                       // special characters and fragment
+                       uri = new Uri ("ftp://ftp.mono-project.com/<>%\"{}|\\^`;/?:@&=+$,[]#abc");
+                       Assert.AreEqual ("/%3C%3E%25%22%7B%7D%7C/%5E%60;/%3F:@&=+$,%5B%5D", uri.AbsolutePath, "Special");
+                       Assert.AreEqual ("#abc", uri.Fragment, "Special/Fragment");
+               }
+
+               [Test]
+               public void FileScheme ()
+               {
+                       Uri uri = new Uri ("file://host/dir/subdir/file?this-is-not-a-query#but-this-is-a-fragment");
+                       Assert.AreEqual ("/dir/subdir/file%3Fthis-is-not-a-query", uri.AbsolutePath, "AbsolutePath");
+                       Assert.AreEqual ("file://host/dir/subdir/file%3Fthis-is-not-a-query#but-this-is-a-fragment", uri.AbsoluteUri, "AbsoluteUri");
+                       Assert.AreEqual ("host", uri.Authority, "Authority");
+                       Assert.AreEqual ("host", uri.DnsSafeHost, "DnsSafeHost");
+                       Assert.AreEqual ("#but-this-is-a-fragment", uri.Fragment, "Fragment");
+                       Assert.AreEqual ("host", uri.Host, "Host");
+                       Assert.AreEqual (UriHostNameType.Dns, uri.HostNameType, "HostNameType");
+                       Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri");
+                       Assert.IsTrue (uri.IsDefaultPort, "IsDefaultPort");
+                       Assert.IsTrue (uri.IsFile, "IsFile");
+                       Assert.IsFalse (uri.IsLoopback, "IsLoopback");
+                       Assert.IsTrue (uri.IsUnc, "IsUnc");
+                       Assert.AreEqual (isWin32 ? "\\\\host\\dir\\subdir\\file?this-is-not-a-query" : "/dir/subdir/file?this-is-not-a-query", uri.LocalPath, "LocalPath");
+                       Assert.AreEqual ("file://host/dir/subdir/file?this-is-not-a-query#but-this-is-a-fragment", uri.OriginalString, "OriginalString");
+                       Assert.AreEqual ("/dir/subdir/file%3Fthis-is-not-a-query", uri.PathAndQuery, "PathAndQuery");
+                       Assert.AreEqual (-1, uri.Port, "Port");
+                       Assert.AreEqual (String.Empty, uri.Query, "Query");
+                       Assert.AreEqual ("file", uri.Scheme, "Scheme");
+                       Assert.AreEqual ("/", uri.Segments [0], "Segments [0]");
+                       Assert.AreEqual ("dir/", uri.Segments [1], "Segments [1]");
+                       Assert.AreEqual ("subdir/", uri.Segments [2], "Segments [2]");
+                       Assert.AreEqual ("file%3Fthis-is-not-a-query", uri.Segments [3], "Segments [3]");
+                       Assert.IsFalse (uri.UserEscaped, "UserEscaped");
+                       Assert.AreEqual (String.Empty, uri.UserInfo, "UserInfo");
+
+                       // special characters
+                       uri = new Uri ("file://host/<>%\"{}|\\^`;/?:@&=+$,[]#abc");
+                       Assert.AreEqual ("/%3C%3E%25%22%7B%7D%7C/%5E%60;/%3F:@&=+$,%5B%5D", uri.AbsolutePath, "Special");
+               }
+
+               [Test]
+               public void PathReduction_2e ()
+               {
+                       Uri uri = new Uri ("http://host/dir/%2e%2E/file");
+                       Assert.AreEqual ("/file", uri.AbsolutePath, "AbsolutePath");
+                       Assert.AreEqual ("http://host/file", uri.AbsoluteUri, "AbsoluteUri");
+                       Assert.AreEqual ("/", uri.Segments [0], "Segments [0]");
+                       Assert.AreEqual ("file", uri.Segments [1], "Segments [1]");
+               }
+
+               [Test]
+               public void ColonButNoPort ()
+               {
+                       Uri uri = new Uri ("http://host:");
+                       Assert.AreEqual ("http", uri.Scheme, "1.Scheme");
+                       Assert.AreEqual ("host", uri.Host, "1.Host");
+                       Assert.AreEqual (80, uri.Port, "1.Port");
+                       Assert.IsTrue (uri.IsDefaultPort, "1.IsDefaultPort");
+
+                       uri = new Uri ("ftp://host:/dir/file");
+                       Assert.AreEqual ("ftp", uri.Scheme, "2.Scheme");
+                       Assert.AreEqual ("host", uri.Host, "2.Host");
+                       Assert.AreEqual (21, uri.Port, "2.Port");
+                       Assert.IsTrue (uri.IsDefaultPort, "2.IsDefaultPort");
+               }
+
+               [Test]
+               public void IPv6SafeDnsName ()
+               {
+                       Uri uri = new Uri ("http://[1:2:3:4:5:6:7:8]");
+                       Assert.AreEqual (UriHostNameType.IPv6, uri.HostNameType, "1.HostNameType");
+                       Assert.AreEqual ("[0001:0002:0003:0004:0005:0006:0007:0008]", uri.Authority, "1.Authority");
+                       Assert.AreEqual ("0001:0002:0003:0004:0005:0006:0007:0008", uri.DnsSafeHost, "1.DnsSafeHost");
+                       Assert.AreEqual ("[0001:0002:0003:0004:0005:0006:0007:0008]", uri.Host, "1.Host");
+
+                       uri = new Uri ("http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm");
+                       Assert.AreEqual (UriHostNameType.IPv6, uri.HostNameType, "1.HostNameType");
+                       Assert.AreEqual ("[FE80:0000:0000:0000:0200:39FF:FE36:1A2D]", uri.Authority, "2.Authority");
+                       Assert.AreEqual ("FE80:0000:0000:0000:0200:39FF:FE36:1A2D%4", uri.DnsSafeHost, "2.DnsSafeHost");
+                       Assert.AreEqual ("[FE80:0000:0000:0000:0200:39FF:FE36:1A2D]", uri.Host, "2.Host");
+               }
+
+               [Test]
+               public void RelativeEscapes ()
+               {
+                       Uri uri = new Uri ("%2e%2e/dir/%2e%2e/subdir/file?query#fragment", UriKind.Relative);
+                       Assert.AreEqual ("%2e%2e/dir/%2e%2e/subdir/file?query#fragment", uri.ToString (), "1.ToString");
+               }
        }\r
 }\r
index 98cf9ec63e6fa739aa09b90cf988f8db393538b2..3b2829de5ab0544aa916398154afd93b0e9d9280 100644 (file)
@@ -26,8 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using NUnit.Framework;
 
 using System;
@@ -213,7 +211,6 @@ namespace MonoTests.System
                }
 
                [Test] // TryCreate (Uri, String, Uri)
-               [Category ("NotWorking")]
                public void TryCreate2 ()
                {
                        Uri baseUri = new Uri (absolute);
@@ -253,7 +250,6 @@ namespace MonoTests.System
                }
 
                [Test] // TryCreate (Uri, Uri, Uri)
-               [Category ("NotWorking")]
                public void TryCreate3 ()
                {
                        Uri baseUri = new Uri (absolute);
@@ -292,8 +288,16 @@ namespace MonoTests.System
                        Uri baseUri = new Uri (absolute);
                        try {
                                Uri.TryCreate (baseUri, (Uri) null, out uri);
-                               Assert.Fail ();
-                       } catch (NullReferenceException) {
+#if NET_4_0
+                               Assert.IsNull (uri);
+#else
+                               Assert.Fail ("throw NRE under FX 2.0");
+#endif
+                       }
+                       catch (NullReferenceException) {
+#if NET_4_0
+                               Assert.Fail ("does not throw NRE under FX 4.0");
+#endif
                        }
                }
 
@@ -410,8 +414,14 @@ namespace MonoTests.System
                        try {
                                http.IsBaseOf (null);
                                Assert.Fail ();
-                       } catch (NullReferenceException) {
                        }
+#if NET_4_0
+                       catch (ArgumentNullException) {
+                       }
+#else
+                       catch (NullReferenceException) {
+                       }
+#endif
                }
 
                [Test] 
@@ -463,32 +473,26 @@ namespace MonoTests.System
                }
 
                [Test]
-               [Category ("NotDotNet")] // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=299942
-               public void MakeRelativeUri_Uri_Null_Mono ()
+               public void MakeRelativeUri_Uri_Null ()
                {
                        Uri uri = new Uri ("http://test.com");
                        try {
                                uri.MakeRelativeUri ((Uri) null);
                                Assert.Fail ("#1");
-                       } catch (ArgumentNullException ex) {
+                       }
+#if NET_4_0
+                       catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
                                Assert.IsNotNull (ex.Message, "#4");
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("uri", ex.ParamName, "#6");
                        }
-               }
-
-               [Test]
-               [Category ("NotWorking")] // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=299942
-               public void MakeRelativeUri_Uri_Null_MS ()
-               {
-                       Uri uri = new Uri ("http://test.com");
-                       try {
-                               uri.MakeRelativeUri ((Uri) null);
-                               Assert.Fail ("#1");
-                       } catch (NullReferenceException) {
+#else
+                       catch (NullReferenceException) {
+                               // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=299942
                        }
+#endif
                }
 
                [Test] // LAMESPEC: see bug #321113
@@ -623,4 +627,3 @@ namespace MonoTests.System
        }
 }
 
-#endif
diff --git a/mcs/class/System/mobile_System.dll.sources b/mcs/class/System/mobile_System.dll.sources
new file mode 100644 (file)
index 0000000..9489358
--- /dev/null
@@ -0,0 +1,535 @@
+../../build/common/Consts.cs
+../../build/common/Locale.cs
+../../build/common/MonoTODOAttribute.cs
+../corlib/System.Collections.Generic/CollectionDebuggerView.cs
+../corlib/System.Collections/CollectionDebuggerView.cs
+Assembly/AssemblyInfo.cs
+Mono.Http/NtlmClient.cs
+System.CodeDom.Compiler/GeneratedCodeAttribute.cs
+System.Collections.Generic/ISet.cs
+System.Collections.Generic/LinkedList.cs
+System.Collections.Generic/LinkedListNode.cs
+System.Collections.Generic/Queue.cs
+System.Collections.Generic/RBTree.cs
+System.Collections.Generic/SortedDictionary.cs
+System.Collections.Generic/SortedList.cs
+System.Collections.Generic/Stack.cs
+System.Collections.Specialized/BitVector32.cs
+System.Collections.Specialized/CollectionsUtil.cs
+System.Collections.Specialized/HybridDictionary.cs
+System.Collections.Specialized/ListDictionary.cs
+System.Collections.Specialized/NameObjectCollectionBase.cs
+System.Collections.Specialized/NameValueCollection.cs
+System.Collections.Specialized/ProcessStringDictionary.cs
+System.Collections.Specialized/StringCollection.cs
+System.Collections.Specialized/StringDictionary.cs
+System.Collections.Specialized/StringEnumerator.cs
+System.ComponentModel.Design.Serialization/InstanceDescriptor.cs
+System.ComponentModel.Design/CommandID.cs
+System.ComponentModel.Design/ComponentChangedEventArgs.cs
+System.ComponentModel.Design/ComponentChangedEventHandler.cs
+System.ComponentModel.Design/ComponentChangingEventArgs.cs
+System.ComponentModel.Design/ComponentChangingEventHandler.cs
+System.ComponentModel.Design/ComponentEventArgs.cs
+System.ComponentModel.Design/ComponentEventHandler.cs
+System.ComponentModel.Design/ComponentRenameEventArgs.cs
+System.ComponentModel.Design/ComponentRenameEventHandler.cs
+System.ComponentModel.Design/DesignerTransaction.cs
+System.ComponentModel.Design/DesignerTransactionCloseEventArgs.cs
+System.ComponentModel.Design/DesignerTransactionCloseEventHandler.cs
+System.ComponentModel.Design/DesignerVerb.cs
+System.ComponentModel.Design/DesignerVerbCollection.cs
+System.ComponentModel.Design/IComponentChangeService.cs
+System.ComponentModel.Design/IDesigner.cs
+System.ComponentModel.Design/IDesignerHost.cs
+System.ComponentModel.Design/IReferenceService.cs
+System.ComponentModel.Design/IRootDesigner.cs
+System.ComponentModel.Design/IServiceContainer.cs
+System.ComponentModel.Design/ITypeDescriptorFilterService.cs
+System.ComponentModel.Design/ITypeResolutionService.cs
+System.ComponentModel.Design/MenuCommand.cs
+System.ComponentModel.Design/ServiceCreatorCallback.cs
+System.ComponentModel.Design/StandardCommands.cs
+System.ComponentModel.Design/ViewTechnology.cs
+System.ComponentModel/ArrayConverter.cs
+System.ComponentModel/AsyncCompletedEventArgs.cs
+System.ComponentModel/AsyncCompletedEventHandler.cs
+System.ComponentModel/AsyncOperation.cs
+System.ComponentModel/AsyncOperationManager.cs
+System.ComponentModel/AttributeCollection.cs
+System.ComponentModel/BackgroundWorker.cs
+System.ComponentModel/BaseNumberConverter.cs
+System.ComponentModel/BindableSupport.cs
+System.ComponentModel/BooleanConverter.cs
+System.ComponentModel/BrowsableAttribute.cs
+System.ComponentModel/ByteConverter.cs
+System.ComponentModel/CancelEventArgs.cs
+System.ComponentModel/CategoryAttribute.cs
+System.ComponentModel/CharConverter.cs
+System.ComponentModel/CollectionChangeAction.cs
+System.ComponentModel/CollectionChangeEventArgs.cs
+System.ComponentModel/CollectionChangeEventHandler.cs
+System.ComponentModel/CollectionConverter.cs
+System.ComponentModel/Component.cs
+System.ComponentModel/ComponentCollection.cs
+System.ComponentModel/ComponentConverter.cs
+System.ComponentModel/CultureInfoConverter.cs
+System.ComponentModel/CustomTypeDescriptor.cs
+System.ComponentModel/DateTimeConverter.cs
+System.ComponentModel/DecimalConverter.cs
+System.ComponentModel/DefaultEventAttribute.cs
+System.ComponentModel/DefaultPropertyAttribute.cs
+System.ComponentModel/DefaultValueAttribute.cs
+System.ComponentModel/DescriptionAttribute.cs
+System.ComponentModel/DesignOnlyAttribute.cs
+System.ComponentModel/DesignTimeVisibleAttribute.cs
+System.ComponentModel/DesignerAttribute.cs
+System.ComponentModel/DesignerCategoryAttribute.cs
+System.ComponentModel/DesignerSerializationVisibility.cs
+System.ComponentModel/DesignerSerializationVisibilityAttribute.cs
+System.ComponentModel/DisplayNameAttribute.cs
+System.ComponentModel/DoWorkEventArgs.cs
+System.ComponentModel/DoWorkEventHandler.cs
+System.ComponentModel/DoubleConverter.cs
+System.ComponentModel/EditorAttribute.cs
+System.ComponentModel/EditorBrowsableAttribute.cs
+System.ComponentModel/EditorBrowsableState.cs
+System.ComponentModel/EnumConverter.cs
+System.ComponentModel/EventDescriptor.cs
+System.ComponentModel/EventDescriptorCollection.cs
+System.ComponentModel/EventHandlerList.cs
+System.ComponentModel/ExpandableObjectConverter.cs
+System.ComponentModel/GuidConverter.cs
+System.ComponentModel/IBindingList.cs
+System.ComponentModel/IBindingListView.cs
+System.ComponentModel/IChangeTracking.cs
+System.ComponentModel/IComNativeDescriptorHandler.cs
+System.ComponentModel/IComponent.cs
+System.ComponentModel/IComponent.cs
+System.ComponentModel/IContainer.cs
+System.ComponentModel/ICustomTypeDescriptor.cs
+System.ComponentModel/IDataErrorInfo.cs
+System.ComponentModel/IDataErrorInfo.cs
+System.ComponentModel/IEditableObject.cs
+System.ComponentModel/IListSource.cs
+System.ComponentModel/INotifyPropertyChanged.cs
+System.ComponentModel/IRevertibleChangeTracking.cs
+System.ComponentModel/ISite.cs
+System.ComponentModel/ISupportInitialize.cs
+System.ComponentModel/ISupportInitializeNotification.cs
+System.ComponentModel/ISynchronizeInvoke.cs
+System.ComponentModel/ITypeDescriptorContext.cs
+System.ComponentModel/ITypedList.cs
+System.ComponentModel/Int16Converter.cs
+System.ComponentModel/Int32Converter.cs
+System.ComponentModel/Int64Converter.cs
+System.ComponentModel/InvalidEnumArgumentException.cs
+System.ComponentModel/InvalidEnumArgumentException.cs
+System.ComponentModel/ListBindableAttribute.cs
+System.ComponentModel/ListChangedEventArgs.cs
+System.ComponentModel/ListChangedEventHandler.cs
+System.ComponentModel/ListChangedType.cs
+System.ComponentModel/ListSortDescription.cs
+System.ComponentModel/ListSortDescriptionCollection.cs
+System.ComponentModel/ListSortDirection.cs
+System.ComponentModel/ListSortDirection.cs
+System.ComponentModel/LocalizableAttribute.cs
+System.ComponentModel/MarshalByValueComponent.cs
+System.ComponentModel/MemberDescriptor.cs
+System.ComponentModel/MergablePropertyAttribute.cs
+System.ComponentModel/MultilineStringConverter.cs
+System.ComponentModel/NotifyParentPropertyAttribute.cs
+System.ComponentModel/NullableConverter.cs
+System.ComponentModel/PasswordPropertyTextAttribute.cs
+System.ComponentModel/ProgressChangedEventArgs.cs
+System.ComponentModel/ProgressChangedEventHandler.cs
+System.ComponentModel/PropertyChangedEventArgs.cs
+System.ComponentModel/PropertyChangedEventHandler.cs
+System.ComponentModel/PropertyDescriptor.cs
+System.ComponentModel/PropertyDescriptor.cs
+System.ComponentModel/PropertyDescriptorCollection.cs
+System.ComponentModel/ReadOnlyAttribute.cs
+System.ComponentModel/ReadOnlyAttribute.cs
+System.ComponentModel/RecommendedAsConfigurableAttribute.cs
+System.ComponentModel/ReferenceConverter.cs
+System.ComponentModel/ReferenceConverter.cs
+System.ComponentModel/ReflectionEventDescriptor.cs
+System.ComponentModel/ReflectionPropertyDescriptor.cs
+System.ComponentModel/RefreshEventArgs.cs
+System.ComponentModel/RefreshEventHandler.cs
+System.ComponentModel/RefreshProperties.cs
+System.ComponentModel/RefreshPropertiesAttribute.cs
+System.ComponentModel/RunWorkerCompletedEventArgs.cs
+System.ComponentModel/RunWorkerCompletedEventHandler.cs
+System.ComponentModel/SByteConverter.cs
+System.ComponentModel/SingleConverter.cs
+System.ComponentModel/StringConverter.cs
+System.ComponentModel/TimeSpanConverter.cs
+System.ComponentModel/ToolboxItemAttribute.cs
+System.ComponentModel/ToolboxItemFilterAttribute.cs
+System.ComponentModel/ToolboxItemFilterType.cs
+System.ComponentModel/TypeConverter.cs
+System.ComponentModel/TypeConverterAttribute.cs
+System.ComponentModel/TypeConverter_2_1.cs
+System.ComponentModel/TypeDescriptionProvider.cs
+System.ComponentModel/TypeDescriptor.cs
+System.ComponentModel/TypeListConverter.cs
+System.ComponentModel/UInt16Converter.cs
+System.ComponentModel/UInt32Converter.cs
+System.ComponentModel/UInt64Converter.cs
+System.ComponentModel/WeakObjectWrapper.cs
+System.ComponentModel/WeakObjectWrapperComparer.cs
+System.ComponentModel/Win32Exception.cs
+System.Diagnostics/DataReceivedEventArgs.cs
+System.Diagnostics/DataReceivedEventHandler.cs
+System.Diagnostics/Debug_2_1.cs
+System.Diagnostics/FileVersionInfo.cs
+System.Diagnostics/MonitoringDescriptionAttribute.cs
+System.Diagnostics/Process.cs
+System.Diagnostics/ProcessModule.cs
+System.Diagnostics/ProcessModuleCollection.cs
+System.Diagnostics/ProcessPriorityClass.cs
+System.Diagnostics/ProcessStartInfo.cs
+System.Diagnostics/ProcessThread.cs
+System.Diagnostics/ProcessThreadCollection.cs
+System.Diagnostics/ProcessWindowStyle.cs
+System.Diagnostics/Stopwatch.cs
+System.Diagnostics/ThreadPriorityLevel.cs
+System.Diagnostics/ThreadState.cs
+System.Diagnostics/ThreadWaitReason.cs
+System.IO.Compression/CompressionMode.cs
+System.IO.Compression/DeflateStream.cs
+System.IO.Compression/GZipStream.cs
+System.IO/MonoIO.cs
+System.IO/MonoIOError.cs
+System.IO/MonoSyncFileStream.cs
+System.Net.Cache/HttpCacheAgeControl.cs
+System.Net.Cache/HttpRequestCacheLevel.cs
+System.Net.Cache/HttpRequestCachePolicy.cs
+System.Net.Cache/RequestCacheLevel.cs
+System.Net.Cache/RequestCachePolicy.cs
+System.Net.Mail/AlternateView.cs
+System.Net.Mail/AlternateViewCollection.cs
+System.Net.Mail/Attachment.cs
+System.Net.Mail/AttachmentBase.cs
+System.Net.Mail/AttachmentCollection.cs
+System.Net.Mail/DeliveryNotificationOptions.cs
+System.Net.Mail/LinkedResource.cs
+System.Net.Mail/LinkedResourceCollection.cs
+System.Net.Mail/MailAddress.cs
+System.Net.Mail/MailAddressCollection.cs
+System.Net.Mail/MailMessage.cs
+System.Net.Mail/MailPriority.cs
+System.Net.Mail/SendCompletedEventHandler.cs
+System.Net.Mail/SmtpAccess.cs
+System.Net.Mail/SmtpClient.cs
+System.Net.Mail/SmtpDeliveryMethod.cs
+System.Net.Mail/SmtpException.cs
+System.Net.Mail/SmtpFailedRecipientException.cs
+System.Net.Mail/SmtpFailedRecipientsException.cs
+System.Net.Mail/SmtpStatusCode.cs
+System.Net.Mime/ContentDisposition.cs
+System.Net.Mime/ContentType.cs
+System.Net.Mime/DispositionTypeNames.cs
+System.Net.Mime/MediaTypeNames.cs
+System.Net.Mime/TransferEncoding.cs
+System.Net.NetworkInformation/DuplicateAddressDetectionState.cs
+System.Net.NetworkInformation/GatewayIPAddressInformation.cs
+System.Net.NetworkInformation/GatewayIPAddressInformationCollection.cs
+System.Net.NetworkInformation/IPAddressCollection.cs
+System.Net.NetworkInformation/IPAddressInformation.cs
+System.Net.NetworkInformation/IPAddressInformationCollection.cs
+System.Net.NetworkInformation/IPGlobalProperties.cs
+System.Net.NetworkInformation/IPGlobalStatistics.cs
+System.Net.NetworkInformation/IPInterfaceProperties.cs
+System.Net.NetworkInformation/IPStatus.cs
+System.Net.NetworkInformation/IPv4InterfaceProperties.cs
+System.Net.NetworkInformation/IPv4InterfaceStatistics.cs
+System.Net.NetworkInformation/IPv6InterfaceProperties.cs
+System.Net.NetworkInformation/IcmpV4Statistics.cs
+System.Net.NetworkInformation/IcmpV6Statistics.cs
+System.Net.NetworkInformation/LinuxNetworkInterfaceMarshal.cs
+System.Net.NetworkInformation/MacOsNetworkInterfaceMarshal.cs
+System.Net.NetworkInformation/MulticastIPAddressInformation.cs
+System.Net.NetworkInformation/MulticastIPAddressInformationCollection.cs
+System.Net.NetworkInformation/NetBiosNodeType.cs
+System.Net.NetworkInformation/NetworkAddressChangedEventHandler.cs
+System.Net.NetworkInformation/NetworkAvailabilityChangedEventHandler.cs
+System.Net.NetworkInformation/NetworkAvailabilityEventArgs.cs
+System.Net.NetworkInformation/NetworkChange.cs
+System.Net.NetworkInformation/NetworkInformationAccess.cs
+System.Net.NetworkInformation/NetworkInformationException.cs
+System.Net.NetworkInformation/NetworkInterface.cs
+System.Net.NetworkInformation/NetworkInterfaceComponent.cs
+System.Net.NetworkInformation/NetworkInterfaceType.cs
+System.Net.NetworkInformation/OperationalStatus.cs
+System.Net.NetworkInformation/PhysicalAddress.cs
+System.Net.NetworkInformation/Ping.cs
+System.Net.NetworkInformation/PingCompletedEventArgs.cs
+System.Net.NetworkInformation/PingCompletedEventHandler.cs
+System.Net.NetworkInformation/PingException.cs
+System.Net.NetworkInformation/PingOptions.cs
+System.Net.NetworkInformation/PingReply.cs
+System.Net.NetworkInformation/PrefixOrigin.cs
+System.Net.NetworkInformation/SuffixOrigin.cs
+System.Net.NetworkInformation/TcpConnectionInformation.cs
+System.Net.NetworkInformation/TcpState.cs
+System.Net.NetworkInformation/TcpStatistics.cs
+System.Net.NetworkInformation/UdpStatistics.cs
+System.Net.NetworkInformation/UnicastIPAddressInformation.cs
+System.Net.NetworkInformation/UnicastIPAddressInformationCollection.cs
+System.Net.NetworkInformation/Win32NetworkInterfaceMarshal.cs
+System.Net.Security/AuthenticatedStream.cs
+System.Net.Security/AuthenticationLevel.cs
+System.Net.Security/LocalCertificateSelectionCallback.cs
+System.Net.Security/NegotiateStream.cs
+System.Net.Security/ProtectionLevel.cs
+System.Net.Security/RemoteCertificateValidationCallback.cs
+System.Net.Security/SslPolicyErrors.cs
+System.Net.Security/SslStream.cs
+System.Net.Sockets/AddressFamily.cs
+System.Net.Sockets/AddressFamily.cs
+System.Net.Sockets/IOControlCode.cs
+System.Net.Sockets/IPPacketInformation.cs
+System.Net.Sockets/IPv6MulticastOption.cs
+System.Net.Sockets/LingerOption.cs
+System.Net.Sockets/MulticastOption.cs
+System.Net.Sockets/NetworkStream.cs
+System.Net.Sockets/ProtocolFamily.cs
+System.Net.Sockets/ProtocolType.cs
+System.Net.Sockets/SelectMode.cs
+System.Net.Sockets/SendPacketsElement.cs
+System.Net.Sockets/Socket.cs
+System.Net.Sockets/SocketAsyncEventArgs.cs
+System.Net.Sockets/SocketAsyncOperation.cs
+System.Net.Sockets/SocketError.cs
+System.Net.Sockets/SocketException.cs
+System.Net.Sockets/SocketFlags.cs
+System.Net.Sockets/SocketInformation.cs
+System.Net.Sockets/SocketInformationOptions.cs
+System.Net.Sockets/SocketOptionLevel.cs
+System.Net.Sockets/SocketOptionName.cs
+System.Net.Sockets/SocketShutdown.cs
+System.Net.Sockets/SocketType.cs
+System.Net.Sockets/Socket_2_1.cs
+System.Net.Sockets/TcpClient.cs
+System.Net.Sockets/TcpListener.cs
+System.Net.Sockets/TransmitFileOptions.cs
+System.Net.Sockets/UdpClient.cs
+System.Net/AuthenticationManager.cs
+System.Net/AuthenticationSchemeSelector.cs
+System.Net/AuthenticationSchemes.cs
+System.Net/Authorization.cs
+System.Net/BasicClient.cs
+System.Net/BindIPEndPoint.cs
+System.Net/ChunkStream.cs
+System.Net/ChunkedInputStream.cs
+System.Net/ConnectionModes.cs
+System.Net/Cookie.cs
+System.Net/CookieCollection.cs
+System.Net/CookieContainer.cs
+System.Net/CookieException.cs
+System.Net/CredentialCache.cs
+System.Net/DecompressionMethods.cs
+System.Net/DefaultCertificatePolicy.cs
+System.Net/DigestClient.cs
+System.Net/Dns.cs
+System.Net/DownloadDataCompletedEventArgs.cs
+System.Net/DownloadDataCompletedEventHandler.cs
+System.Net/DownloadProgressChangedEventArgs.cs
+System.Net/DownloadProgressChangedEventHandler.cs
+System.Net/DownloadStringCompletedEventArgs.cs
+System.Net/DownloadStringCompletedEventHandler.cs
+System.Net/EndPoint.cs
+System.Net/EndPointListener.cs
+System.Net/EndPointManager.cs
+System.Net/FileWebRequest.cs
+System.Net/FileWebRequestCreator.cs
+System.Net/FileWebResponse.cs
+System.Net/FtpAsyncResult.cs
+System.Net/FtpDataStream.cs
+System.Net/FtpRequestCreator.cs
+System.Net/FtpStatus.cs
+System.Net/FtpStatusCode.cs
+System.Net/FtpWebRequest.cs
+System.Net/FtpWebResponse.cs
+System.Net/GlobalProxySelection.cs
+System.Net/HttpConnection.cs
+System.Net/HttpContinueDelegate.cs
+System.Net/HttpListener.cs
+System.Net/HttpListenerBasicIdentity.cs
+System.Net/HttpListenerContext.cs
+System.Net/HttpListenerException.cs
+System.Net/HttpListenerPrefixCollection.cs
+System.Net/HttpListenerRequest.cs
+System.Net/HttpListenerResponse.cs
+System.Net/HttpRequestCreator.cs
+System.Net/HttpRequestHeader.cs
+System.Net/HttpResponseHeader.cs
+System.Net/HttpStatusCode.cs
+System.Net/HttpStreamAsyncResult.cs
+System.Net/HttpUtility.cs
+System.Net/HttpVersion.cs
+System.Net/HttpWebRequest.cs
+System.Net/HttpWebResponse.cs
+System.Net/IAuthenticationModule.cs
+System.Net/ICertificatePolicy.cs
+System.Net/ICredentialLookup.cs
+System.Net/ICredentialPolicy.cs
+System.Net/ICredentialsByHost.cs
+System.Net/IPAddress.cs
+System.Net/IPAddress.cs
+System.Net/IPEndPoint.cs
+System.Net/IPHostEntry.cs
+System.Net/IPv6Address.cs
+System.Net/IPv6Address.cs
+System.Net/IWebProxy.cs
+System.Net/IWebProxyScript.cs
+System.Net/IWebRequestCreate.cs
+System.Net/ListenerAsyncResult.cs
+System.Net/ListenerPrefix.cs
+System.Net/MonoHttpDate.cs
+System.Net/NetConfig.cs
+System.Net/NetworkAccess.cs
+System.Net/NetworkCredential.cs
+System.Net/NtlmClient.cs
+System.Net/OpenReadCompletedEventArgs.cs
+System.Net/OpenReadCompletedEventHandler.cs
+System.Net/OpenWriteCompletedEventArgs.cs
+System.Net/OpenWriteCompletedEventHandler.cs
+System.Net/ProtocolViolationException.cs
+System.Net/RequestStream.cs
+System.Net/ResponseStream.cs
+System.Net/SecurityProtocolType.cs
+System.Net/ServicePoint.cs
+System.Net/ServicePointManager.cs
+System.Net/SocketAddress.cs
+System.Net/TransportType.cs
+System.Net/UploadDataCompletedEventArgs.cs
+System.Net/UploadDataCompletedEventHandler.cs
+System.Net/UploadFileCompletedEventArgs.cs
+System.Net/UploadFileCompletedEventHandler.cs
+System.Net/UploadProgressChangedEventArgs.cs
+System.Net/UploadProgressChangedEventHandler.cs
+System.Net/UploadStringCompletedEventArgs.cs
+System.Net/UploadStringCompletedEventHandler.cs
+System.Net/UploadValuesCompletedEventArgs.cs
+System.Net/UploadValuesCompletedEventHandler.cs
+System.Net/WebAsyncResult.cs
+System.Net/WebClient.cs
+System.Net/WebConnection.cs
+System.Net/WebConnectionData.cs
+System.Net/WebConnectionGroup.cs
+System.Net/WebConnectionStream.cs
+System.Net/WebException.cs
+System.Net/WebExceptionStatus.cs
+System.Net/WebHeaderCollection.cs
+System.Net/WebPermission.cs
+System.Net/WebPermissionAttribute.cs
+System.Net/WebProxy.cs
+System.Net/WebRequest.cs
+System.Net/WebRequestMethods.cs
+System.Net/WebResponse.cs
+System.Security.AccessControl/SemaphoreAccessRule.cs
+System.Security.AccessControl/SemaphoreAuditRule.cs
+System.Security.AccessControl/SemaphoreRights.cs
+System.Security.AccessControl/SemaphoreSecurity.cs
+System.Security.Authentication/AuthenticationException.cs
+System.Security.Authentication/CipherAlgorithmType.cs
+System.Security.Authentication/ExchangeAlgorithmType.cs
+System.Security.Authentication/HashAlgorithmType.cs
+System.Security.Authentication/InvalidCredentialException.cs
+System.Security.Authentication/SslProtocols.cs
+System.Security.Cryptography.X509Certificates/OSX509Certificates.cs
+System.Security.Cryptography.X509Certificates/OpenFlags.cs
+System.Security.Cryptography.X509Certificates/PublicKey.cs
+System.Security.Cryptography.X509Certificates/StoreLocation.cs
+System.Security.Cryptography.X509Certificates/StoreName.cs
+System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs
+System.Security.Cryptography.X509Certificates/X500DistinguishedNameFlags.cs
+System.Security.Cryptography.X509Certificates/X509BasicConstraintsExtension.cs
+System.Security.Cryptography.X509Certificates/X509Certificate2.cs
+System.Security.Cryptography.X509Certificates/X509Certificate2Collection.cs
+System.Security.Cryptography.X509Certificates/X509Certificate2Enumerator.cs
+System.Security.Cryptography.X509Certificates/X509CertificateCollection.cs
+System.Security.Cryptography.X509Certificates/X509Chain.cs
+System.Security.Cryptography.X509Certificates/X509ChainElement.cs
+System.Security.Cryptography.X509Certificates/X509ChainElementCollection.cs
+System.Security.Cryptography.X509Certificates/X509ChainElementEnumerator.cs
+System.Security.Cryptography.X509Certificates/X509ChainPolicy.cs
+System.Security.Cryptography.X509Certificates/X509ChainStatus.cs
+System.Security.Cryptography.X509Certificates/X509ChainStatusFlags.cs
+System.Security.Cryptography.X509Certificates/X509EnhancedKeyUsageExtension.cs
+System.Security.Cryptography.X509Certificates/X509Extension.cs
+System.Security.Cryptography.X509Certificates/X509ExtensionCollection.cs
+System.Security.Cryptography.X509Certificates/X509ExtensionEnumerator.cs
+System.Security.Cryptography.X509Certificates/X509FindType.cs
+System.Security.Cryptography.X509Certificates/X509IncludeOption.cs
+System.Security.Cryptography.X509Certificates/X509KeyUsageExtension.cs
+System.Security.Cryptography.X509Certificates/X509KeyUsageFlags.cs
+System.Security.Cryptography.X509Certificates/X509NameType.cs
+System.Security.Cryptography.X509Certificates/X509RevocationFlag.cs
+System.Security.Cryptography.X509Certificates/X509RevocationMode.cs
+System.Security.Cryptography.X509Certificates/X509Store.cs
+System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtension.cs
+System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierHashAlgorithm.cs
+System.Security.Cryptography.X509Certificates/X509VerificationFlags.cs
+System.Security.Cryptography/AsnEncodedData.cs
+System.Security.Cryptography/AsnEncodedDataCollection.cs
+System.Security.Cryptography/AsnEncodedDataEnumerator.cs
+System.Security.Cryptography/Oid.cs
+System.Security.Cryptography/OidCollection.cs
+System.Security.Cryptography/OidEnumerator.cs
+System.Text.RegularExpressions/BaseMachine.cs
+System.Text.RegularExpressions/Capture.cs
+System.Text.RegularExpressions/CaptureCollection.cs
+System.Text.RegularExpressions/Group.cs
+System.Text.RegularExpressions/GroupCollection.cs
+System.Text.RegularExpressions/Match.cs
+System.Text.RegularExpressions/MatchCollection.cs
+System.Text.RegularExpressions/MatchEvaluator.cs
+System.Text.RegularExpressions/Regex.cs
+System.Text.RegularExpressions/RegexCompilationInfo.cs
+System.Text.RegularExpressions/RegexOptions.cs
+System.Text.RegularExpressions/RxInterpreter.cs
+System.Text.RegularExpressions/RxOp.cs
+System.Text.RegularExpressions/arch.cs
+System.Text.RegularExpressions/cache.cs
+System.Text.RegularExpressions/category.cs
+System.Text.RegularExpressions/compiler.cs
+System.Text.RegularExpressions/debug.cs
+System.Text.RegularExpressions/interpreter.cs
+System.Text.RegularExpressions/interval.cs
+System.Text.RegularExpressions/parser.cs
+System.Text.RegularExpressions/quicksearch.cs
+System.Text.RegularExpressions/replace.cs
+System.Text.RegularExpressions/syntax.cs
+System.Threading/Semaphore.cs
+System.Threading/SemaphoreFullException.cs
+System.Threading/ThreadExceptionEventArgs.cs
+System.Threading/ThreadExceptionEventHandler.cs
+System.Timers/ElapsedEventArgs.cs
+System.Timers/ElapsedEventHandler.cs
+System.Timers/Timer.cs
+System.Timers/TimersDescriptionAttribute.cs
+System/DefaultUriParser.cs
+System/FileStyleUriParser.cs
+System/FtpStyleUriParser.cs
+System/GenericUriParser.cs
+System/GenericUriParserOptions.cs
+System/HttpStyleUriParser.cs
+System/NetPipeStyleUriParser.cs
+System/NetTcpStyleUriParser.cs
+System/NewsStyleUriParser.cs
+System/SRDescriptionAttribute.cs
+System/Uri.cs
+System/UriBuilder.cs
+System/UriComponents.cs
+System/UriFormat.cs
+System/UriFormatException.cs
+System/UriHostNameType.cs
+System/UriIdnScope.cs
+System/UriKind.cs
+System/UriParser.cs
+System/UriPartial.cs
+System/UriTypeConverter.cs
diff --git a/mcs/class/System/monodroid_System.dll.sources b/mcs/class/System/monodroid_System.dll.sources
new file mode 100644 (file)
index 0000000..b39258e
--- /dev/null
@@ -0,0 +1 @@
+#include monodroid_bootstrap_System.dll.sources
diff --git a/mcs/class/System/monodroid_bootstrap_System.dll.sources b/mcs/class/System/monodroid_bootstrap_System.dll.sources
new file mode 100644 (file)
index 0000000..70a77a6
--- /dev/null
@@ -0,0 +1 @@
+#include mobile_System.dll.sources
index 49798247a7d67fa633b75687cabc1fee60ab90d9..c3a408a05aad3fa29d2f2578211827f36a6863cc 100644 (file)
@@ -1,536 +1 @@
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-../../build/common/MonoTODOAttribute.cs
-../corlib/System.Collections.Generic/CollectionDebuggerView.cs
-../corlib/System.Collections/CollectionDebuggerView.cs
-Assembly/AssemblyInfo.cs
-Mono.Http/NtlmClient.cs
-MonoTouch/MonoPInvokeCallbackAttribute.cs
-System.CodeDom.Compiler/GeneratedCodeAttribute.cs
-System.Collections.Generic/ISet.cs
-System.Collections.Generic/LinkedList.cs
-System.Collections.Generic/LinkedListNode.cs
-System.Collections.Generic/Queue.cs
-System.Collections.Generic/RBTree.cs
-System.Collections.Generic/SortedDictionary.cs
-System.Collections.Generic/SortedList.cs
-System.Collections.Generic/Stack.cs
-System.Collections.Specialized/BitVector32.cs
-System.Collections.Specialized/CollectionsUtil.cs
-System.Collections.Specialized/HybridDictionary.cs
-System.Collections.Specialized/ListDictionary.cs
-System.Collections.Specialized/NameObjectCollectionBase.cs
-System.Collections.Specialized/NameValueCollection.cs
-System.Collections.Specialized/ProcessStringDictionary.cs
-System.Collections.Specialized/StringCollection.cs
-System.Collections.Specialized/StringDictionary.cs
-System.Collections.Specialized/StringEnumerator.cs
-System.ComponentModel.Design.Serialization/InstanceDescriptor.cs
-System.ComponentModel.Design/CommandID.cs
-System.ComponentModel.Design/ComponentChangedEventArgs.cs
-System.ComponentModel.Design/ComponentChangedEventHandler.cs
-System.ComponentModel.Design/ComponentChangingEventArgs.cs
-System.ComponentModel.Design/ComponentChangingEventHandler.cs
-System.ComponentModel.Design/ComponentEventArgs.cs
-System.ComponentModel.Design/ComponentEventHandler.cs
-System.ComponentModel.Design/ComponentRenameEventArgs.cs
-System.ComponentModel.Design/ComponentRenameEventHandler.cs
-System.ComponentModel.Design/DesignerTransaction.cs
-System.ComponentModel.Design/DesignerTransactionCloseEventArgs.cs
-System.ComponentModel.Design/DesignerTransactionCloseEventHandler.cs
-System.ComponentModel.Design/DesignerVerb.cs
-System.ComponentModel.Design/DesignerVerbCollection.cs
-System.ComponentModel.Design/IComponentChangeService.cs
-System.ComponentModel.Design/IDesigner.cs
-System.ComponentModel.Design/IDesignerHost.cs
-System.ComponentModel.Design/IReferenceService.cs
-System.ComponentModel.Design/IRootDesigner.cs
-System.ComponentModel.Design/IServiceContainer.cs
-System.ComponentModel.Design/ITypeDescriptorFilterService.cs
-System.ComponentModel.Design/ITypeResolutionService.cs
-System.ComponentModel.Design/MenuCommand.cs
-System.ComponentModel.Design/ServiceCreatorCallback.cs
-System.ComponentModel.Design/StandardCommands.cs
-System.ComponentModel.Design/ViewTechnology.cs
-System.ComponentModel/ArrayConverter.cs
-System.ComponentModel/AsyncCompletedEventArgs.cs
-System.ComponentModel/AsyncCompletedEventHandler.cs
-System.ComponentModel/AsyncOperation.cs
-System.ComponentModel/AsyncOperationManager.cs
-System.ComponentModel/AttributeCollection.cs
-System.ComponentModel/BackgroundWorker.cs
-System.ComponentModel/BaseNumberConverter.cs
-System.ComponentModel/BindableSupport.cs
-System.ComponentModel/BooleanConverter.cs
-System.ComponentModel/BrowsableAttribute.cs
-System.ComponentModel/ByteConverter.cs
-System.ComponentModel/CancelEventArgs.cs
-System.ComponentModel/CategoryAttribute.cs
-System.ComponentModel/CharConverter.cs
-System.ComponentModel/CollectionChangeAction.cs
-System.ComponentModel/CollectionChangeEventArgs.cs
-System.ComponentModel/CollectionChangeEventHandler.cs
-System.ComponentModel/CollectionConverter.cs
-System.ComponentModel/Component.cs
-System.ComponentModel/ComponentCollection.cs
-System.ComponentModel/ComponentConverter.cs
-System.ComponentModel/CultureInfoConverter.cs
-System.ComponentModel/CustomTypeDescriptor.cs
-System.ComponentModel/DateTimeConverter.cs
-System.ComponentModel/DecimalConverter.cs
-System.ComponentModel/DefaultEventAttribute.cs
-System.ComponentModel/DefaultPropertyAttribute.cs
-System.ComponentModel/DefaultValueAttribute.cs
-System.ComponentModel/DescriptionAttribute.cs
-System.ComponentModel/DesignOnlyAttribute.cs
-System.ComponentModel/DesignTimeVisibleAttribute.cs
-System.ComponentModel/DesignerAttribute.cs
-System.ComponentModel/DesignerCategoryAttribute.cs
-System.ComponentModel/DesignerSerializationVisibility.cs
-System.ComponentModel/DesignerSerializationVisibilityAttribute.cs
-System.ComponentModel/DisplayNameAttribute.cs
-System.ComponentModel/DoWorkEventArgs.cs
-System.ComponentModel/DoWorkEventHandler.cs
-System.ComponentModel/DoubleConverter.cs
-System.ComponentModel/EditorAttribute.cs
-System.ComponentModel/EditorBrowsableAttribute.cs
-System.ComponentModel/EditorBrowsableState.cs
-System.ComponentModel/EnumConverter.cs
-System.ComponentModel/EventDescriptor.cs
-System.ComponentModel/EventDescriptorCollection.cs
-System.ComponentModel/EventHandlerList.cs
-System.ComponentModel/ExpandableObjectConverter.cs
-System.ComponentModel/GuidConverter.cs
-System.ComponentModel/IBindingList.cs
-System.ComponentModel/IBindingListView.cs
-System.ComponentModel/IChangeTracking.cs
-System.ComponentModel/IComNativeDescriptorHandler.cs
-System.ComponentModel/IComponent.cs
-System.ComponentModel/IComponent.cs
-System.ComponentModel/IContainer.cs
-System.ComponentModel/ICustomTypeDescriptor.cs
-System.ComponentModel/IDataErrorInfo.cs
-System.ComponentModel/IDataErrorInfo.cs
-System.ComponentModel/IEditableObject.cs
-System.ComponentModel/IListSource.cs
-System.ComponentModel/INotifyPropertyChanged.cs
-System.ComponentModel/IRevertibleChangeTracking.cs
-System.ComponentModel/ISite.cs
-System.ComponentModel/ISupportInitialize.cs
-System.ComponentModel/ISupportInitializeNotification.cs
-System.ComponentModel/ISynchronizeInvoke.cs
-System.ComponentModel/ITypeDescriptorContext.cs
-System.ComponentModel/ITypedList.cs
-System.ComponentModel/Int16Converter.cs
-System.ComponentModel/Int32Converter.cs
-System.ComponentModel/Int64Converter.cs
-System.ComponentModel/InvalidEnumArgumentException.cs
-System.ComponentModel/InvalidEnumArgumentException.cs
-System.ComponentModel/ListBindableAttribute.cs
-System.ComponentModel/ListChangedEventArgs.cs
-System.ComponentModel/ListChangedEventHandler.cs
-System.ComponentModel/ListChangedType.cs
-System.ComponentModel/ListSortDescription.cs
-System.ComponentModel/ListSortDescriptionCollection.cs
-System.ComponentModel/ListSortDirection.cs
-System.ComponentModel/ListSortDirection.cs
-System.ComponentModel/LocalizableAttribute.cs
-System.ComponentModel/MarshalByValueComponent.cs
-System.ComponentModel/MemberDescriptor.cs
-System.ComponentModel/MergablePropertyAttribute.cs
-System.ComponentModel/MultilineStringConverter.cs
-System.ComponentModel/NotifyParentPropertyAttribute.cs
-System.ComponentModel/NullableConverter.cs
-System.ComponentModel/PasswordPropertyTextAttribute.cs
-System.ComponentModel/ProgressChangedEventArgs.cs
-System.ComponentModel/ProgressChangedEventHandler.cs
-System.ComponentModel/PropertyChangedEventArgs.cs
-System.ComponentModel/PropertyChangedEventHandler.cs
-System.ComponentModel/PropertyDescriptor.cs
-System.ComponentModel/PropertyDescriptor.cs
-System.ComponentModel/PropertyDescriptorCollection.cs
-System.ComponentModel/ReadOnlyAttribute.cs
-System.ComponentModel/ReadOnlyAttribute.cs
-System.ComponentModel/RecommendedAsConfigurableAttribute.cs
-System.ComponentModel/ReferenceConverter.cs
-System.ComponentModel/ReferenceConverter.cs
-System.ComponentModel/ReflectionEventDescriptor.cs
-System.ComponentModel/ReflectionPropertyDescriptor.cs
-System.ComponentModel/RefreshEventArgs.cs
-System.ComponentModel/RefreshEventHandler.cs
-System.ComponentModel/RefreshProperties.cs
-System.ComponentModel/RefreshPropertiesAttribute.cs
-System.ComponentModel/RunWorkerCompletedEventArgs.cs
-System.ComponentModel/RunWorkerCompletedEventHandler.cs
-System.ComponentModel/SByteConverter.cs
-System.ComponentModel/SingleConverter.cs
-System.ComponentModel/StringConverter.cs
-System.ComponentModel/TimeSpanConverter.cs
-System.ComponentModel/ToolboxItemAttribute.cs
-System.ComponentModel/ToolboxItemFilterAttribute.cs
-System.ComponentModel/ToolboxItemFilterType.cs
-System.ComponentModel/TypeConverter.cs
-System.ComponentModel/TypeConverterAttribute.cs
-System.ComponentModel/TypeConverter_2_1.cs
-System.ComponentModel/TypeDescriptionProvider.cs
-System.ComponentModel/TypeDescriptor.cs
-System.ComponentModel/TypeListConverter.cs
-System.ComponentModel/UInt16Converter.cs
-System.ComponentModel/UInt32Converter.cs
-System.ComponentModel/UInt64Converter.cs
-System.ComponentModel/WeakObjectWrapper.cs
-System.ComponentModel/WeakObjectWrapperComparer.cs
-System.ComponentModel/Win32Exception.cs
-System.Diagnostics/DataReceivedEventArgs.cs
-System.Diagnostics/DataReceivedEventHandler.cs
-System.Diagnostics/Debug_2_1.cs
-System.Diagnostics/FileVersionInfo.cs
-System.Diagnostics/MonitoringDescriptionAttribute.cs
-System.Diagnostics/Process.cs
-System.Diagnostics/ProcessModule.cs
-System.Diagnostics/ProcessModuleCollection.cs
-System.Diagnostics/ProcessPriorityClass.cs
-System.Diagnostics/ProcessStartInfo.cs
-System.Diagnostics/ProcessThread.cs
-System.Diagnostics/ProcessThreadCollection.cs
-System.Diagnostics/ProcessWindowStyle.cs
-System.Diagnostics/Stopwatch.cs
-System.Diagnostics/ThreadPriorityLevel.cs
-System.Diagnostics/ThreadState.cs
-System.Diagnostics/ThreadWaitReason.cs
-System.IO.Compression/CompressionMode.cs
-System.IO.Compression/DeflateStream.cs
-System.IO.Compression/GZipStream.cs
-System.IO/MonoIO.cs
-System.IO/MonoIOError.cs
-System.IO/MonoSyncFileStream.cs
-System.Net.Cache/HttpCacheAgeControl.cs
-System.Net.Cache/HttpRequestCacheLevel.cs
-System.Net.Cache/HttpRequestCachePolicy.cs
-System.Net.Cache/RequestCacheLevel.cs
-System.Net.Cache/RequestCachePolicy.cs
-System.Net.Mail/AlternateView.cs
-System.Net.Mail/AlternateViewCollection.cs
-System.Net.Mail/Attachment.cs
-System.Net.Mail/AttachmentBase.cs
-System.Net.Mail/AttachmentCollection.cs
-System.Net.Mail/DeliveryNotificationOptions.cs
-System.Net.Mail/LinkedResource.cs
-System.Net.Mail/LinkedResourceCollection.cs
-System.Net.Mail/MailAddress.cs
-System.Net.Mail/MailAddressCollection.cs
-System.Net.Mail/MailMessage.cs
-System.Net.Mail/MailPriority.cs
-System.Net.Mail/SendCompletedEventHandler.cs
-System.Net.Mail/SmtpAccess.cs
-System.Net.Mail/SmtpClient.cs
-System.Net.Mail/SmtpDeliveryMethod.cs
-System.Net.Mail/SmtpException.cs
-System.Net.Mail/SmtpFailedRecipientException.cs
-System.Net.Mail/SmtpFailedRecipientsException.cs
-System.Net.Mail/SmtpStatusCode.cs
-System.Net.Mime/ContentDisposition.cs
-System.Net.Mime/ContentType.cs
-System.Net.Mime/DispositionTypeNames.cs
-System.Net.Mime/MediaTypeNames.cs
-System.Net.Mime/TransferEncoding.cs
-System.Net.NetworkInformation/DuplicateAddressDetectionState.cs
-System.Net.NetworkInformation/GatewayIPAddressInformation.cs
-System.Net.NetworkInformation/GatewayIPAddressInformationCollection.cs
-System.Net.NetworkInformation/IPAddressCollection.cs
-System.Net.NetworkInformation/IPAddressInformation.cs
-System.Net.NetworkInformation/IPAddressInformationCollection.cs
-System.Net.NetworkInformation/IPGlobalProperties.cs
-System.Net.NetworkInformation/IPGlobalStatistics.cs
-System.Net.NetworkInformation/IPInterfaceProperties.cs
-System.Net.NetworkInformation/IPStatus.cs
-System.Net.NetworkInformation/IPv4InterfaceProperties.cs
-System.Net.NetworkInformation/IPv4InterfaceStatistics.cs
-System.Net.NetworkInformation/IPv6InterfaceProperties.cs
-System.Net.NetworkInformation/IcmpV4Statistics.cs
-System.Net.NetworkInformation/IcmpV6Statistics.cs
-System.Net.NetworkInformation/LinuxNetworkInterfaceMarshal.cs
-System.Net.NetworkInformation/MacOsNetworkInterfaceMarshal.cs
-System.Net.NetworkInformation/MulticastIPAddressInformation.cs
-System.Net.NetworkInformation/MulticastIPAddressInformationCollection.cs
-System.Net.NetworkInformation/NetBiosNodeType.cs
-System.Net.NetworkInformation/NetworkAddressChangedEventHandler.cs
-System.Net.NetworkInformation/NetworkAvailabilityChangedEventHandler.cs
-System.Net.NetworkInformation/NetworkAvailabilityEventArgs.cs
-System.Net.NetworkInformation/NetworkChange.cs
-System.Net.NetworkInformation/NetworkInformationAccess.cs
-System.Net.NetworkInformation/NetworkInformationException.cs
-System.Net.NetworkInformation/NetworkInterface.cs
-System.Net.NetworkInformation/NetworkInterfaceComponent.cs
-System.Net.NetworkInformation/NetworkInterfaceType.cs
-System.Net.NetworkInformation/OperationalStatus.cs
-System.Net.NetworkInformation/PhysicalAddress.cs
-System.Net.NetworkInformation/Ping.cs
-System.Net.NetworkInformation/PingCompletedEventArgs.cs
-System.Net.NetworkInformation/PingCompletedEventHandler.cs
-System.Net.NetworkInformation/PingException.cs
-System.Net.NetworkInformation/PingOptions.cs
-System.Net.NetworkInformation/PingReply.cs
-System.Net.NetworkInformation/PrefixOrigin.cs
-System.Net.NetworkInformation/SuffixOrigin.cs
-System.Net.NetworkInformation/TcpConnectionInformation.cs
-System.Net.NetworkInformation/TcpState.cs
-System.Net.NetworkInformation/TcpStatistics.cs
-System.Net.NetworkInformation/UdpStatistics.cs
-System.Net.NetworkInformation/UnicastIPAddressInformation.cs
-System.Net.NetworkInformation/UnicastIPAddressInformationCollection.cs
-System.Net.NetworkInformation/Win32NetworkInterfaceMarshal.cs
-System.Net.Security/AuthenticatedStream.cs
-System.Net.Security/AuthenticationLevel.cs
-System.Net.Security/LocalCertificateSelectionCallback.cs
-System.Net.Security/NegotiateStream.cs
-System.Net.Security/ProtectionLevel.cs
-System.Net.Security/RemoteCertificateValidationCallback.cs
-System.Net.Security/SslPolicyErrors.cs
-System.Net.Security/SslStream.cs
-System.Net.Sockets/AddressFamily.cs
-System.Net.Sockets/AddressFamily.cs
-System.Net.Sockets/IOControlCode.cs
-System.Net.Sockets/IPPacketInformation.cs
-System.Net.Sockets/IPv6MulticastOption.cs
-System.Net.Sockets/LingerOption.cs
-System.Net.Sockets/MulticastOption.cs
-System.Net.Sockets/NetworkStream.cs
-System.Net.Sockets/ProtocolFamily.cs
-System.Net.Sockets/ProtocolType.cs
-System.Net.Sockets/SelectMode.cs
-System.Net.Sockets/SendPacketsElement.cs
-System.Net.Sockets/Socket.cs
-System.Net.Sockets/SocketAsyncEventArgs.cs
-System.Net.Sockets/SocketAsyncOperation.cs
-System.Net.Sockets/SocketError.cs
-System.Net.Sockets/SocketException.cs
-System.Net.Sockets/SocketFlags.cs
-System.Net.Sockets/SocketInformation.cs
-System.Net.Sockets/SocketInformationOptions.cs
-System.Net.Sockets/SocketOptionLevel.cs
-System.Net.Sockets/SocketOptionName.cs
-System.Net.Sockets/SocketShutdown.cs
-System.Net.Sockets/SocketType.cs
-System.Net.Sockets/Socket_2_1.cs
-System.Net.Sockets/TcpClient.cs
-System.Net.Sockets/TcpListener.cs
-System.Net.Sockets/TransmitFileOptions.cs
-System.Net.Sockets/UdpClient.cs
-System.Net/AuthenticationManager.cs
-System.Net/AuthenticationSchemeSelector.cs
-System.Net/AuthenticationSchemes.cs
-System.Net/Authorization.cs
-System.Net/BasicClient.cs
-System.Net/BindIPEndPoint.cs
-System.Net/ChunkStream.cs
-System.Net/ChunkedInputStream.cs
-System.Net/ConnectionModes.cs
-System.Net/Cookie.cs
-System.Net/CookieCollection.cs
-System.Net/CookieContainer.cs
-System.Net/CookieException.cs
-System.Net/CredentialCache.cs
-System.Net/DecompressionMethods.cs
-System.Net/DefaultCertificatePolicy.cs
-System.Net/DigestClient.cs
-System.Net/Dns.cs
-System.Net/DownloadDataCompletedEventArgs.cs
-System.Net/DownloadDataCompletedEventHandler.cs
-System.Net/DownloadProgressChangedEventArgs.cs
-System.Net/DownloadProgressChangedEventHandler.cs
-System.Net/DownloadStringCompletedEventArgs.cs
-System.Net/DownloadStringCompletedEventHandler.cs
-System.Net/EndPoint.cs
-System.Net/EndPointListener.cs
-System.Net/EndPointManager.cs
-System.Net/FileWebRequest.cs
-System.Net/FileWebRequestCreator.cs
-System.Net/FileWebResponse.cs
-System.Net/FtpAsyncResult.cs
-System.Net/FtpDataStream.cs
-System.Net/FtpRequestCreator.cs
-System.Net/FtpStatus.cs
-System.Net/FtpStatusCode.cs
-System.Net/FtpWebRequest.cs
-System.Net/FtpWebResponse.cs
-System.Net/GlobalProxySelection.cs
-System.Net/HttpConnection.cs
-System.Net/HttpContinueDelegate.cs
-System.Net/HttpListener.cs
-System.Net/HttpListenerBasicIdentity.cs
-System.Net/HttpListenerContext.cs
-System.Net/HttpListenerException.cs
-System.Net/HttpListenerPrefixCollection.cs
-System.Net/HttpListenerRequest.cs
-System.Net/HttpListenerResponse.cs
-System.Net/HttpRequestCreator.cs
-System.Net/HttpRequestHeader.cs
-System.Net/HttpResponseHeader.cs
-System.Net/HttpStatusCode.cs
-System.Net/HttpStreamAsyncResult.cs
-System.Net/HttpUtility.cs
-System.Net/HttpVersion.cs
-System.Net/HttpWebRequest.cs
-System.Net/HttpWebResponse.cs
-System.Net/IAuthenticationModule.cs
-System.Net/ICertificatePolicy.cs
-System.Net/ICredentialLookup.cs
-System.Net/ICredentialPolicy.cs
-System.Net/ICredentialsByHost.cs
-System.Net/IPAddress.cs
-System.Net/IPAddress.cs
-System.Net/IPEndPoint.cs
-System.Net/IPHostEntry.cs
-System.Net/IPv6Address.cs
-System.Net/IPv6Address.cs
-System.Net/IWebProxy.cs
-System.Net/IWebProxyScript.cs
-System.Net/IWebRequestCreate.cs
-System.Net/ListenerAsyncResult.cs
-System.Net/ListenerPrefix.cs
-System.Net/MonoHttpDate.cs
-System.Net/NetConfig.cs
-System.Net/NetworkAccess.cs
-System.Net/NetworkCredential.cs
-System.Net/NtlmClient.cs
-System.Net/OpenReadCompletedEventArgs.cs
-System.Net/OpenReadCompletedEventHandler.cs
-System.Net/OpenWriteCompletedEventArgs.cs
-System.Net/OpenWriteCompletedEventHandler.cs
-System.Net/ProtocolViolationException.cs
-System.Net/RequestStream.cs
-System.Net/ResponseStream.cs
-System.Net/SecurityProtocolType.cs
-System.Net/ServicePoint.cs
-System.Net/ServicePointManager.cs
-System.Net/SocketAddress.cs
-System.Net/TransportType.cs
-System.Net/UploadDataCompletedEventArgs.cs
-System.Net/UploadDataCompletedEventHandler.cs
-System.Net/UploadFileCompletedEventArgs.cs
-System.Net/UploadFileCompletedEventHandler.cs
-System.Net/UploadProgressChangedEventArgs.cs
-System.Net/UploadProgressChangedEventHandler.cs
-System.Net/UploadStringCompletedEventArgs.cs
-System.Net/UploadStringCompletedEventHandler.cs
-System.Net/UploadValuesCompletedEventArgs.cs
-System.Net/UploadValuesCompletedEventHandler.cs
-System.Net/WebAsyncResult.cs
-System.Net/WebClient.cs
-System.Net/WebConnection.cs
-System.Net/WebConnectionData.cs
-System.Net/WebConnectionGroup.cs
-System.Net/WebConnectionStream.cs
-System.Net/WebException.cs
-System.Net/WebExceptionStatus.cs
-System.Net/WebHeaderCollection.cs
-System.Net/WebPermission.cs
-System.Net/WebPermissionAttribute.cs
-System.Net/WebProxy.cs
-System.Net/WebRequest.cs
-System.Net/WebRequestMethods.cs
-System.Net/WebResponse.cs
-System.Security.AccessControl/SemaphoreAccessRule.cs
-System.Security.AccessControl/SemaphoreAuditRule.cs
-System.Security.AccessControl/SemaphoreRights.cs
-System.Security.AccessControl/SemaphoreSecurity.cs
-System.Security.Authentication/AuthenticationException.cs
-System.Security.Authentication/CipherAlgorithmType.cs
-System.Security.Authentication/ExchangeAlgorithmType.cs
-System.Security.Authentication/HashAlgorithmType.cs
-System.Security.Authentication/InvalidCredentialException.cs
-System.Security.Authentication/SslProtocols.cs
-System.Security.Cryptography.X509Certificates/OSX509Certificates.cs
-System.Security.Cryptography.X509Certificates/OpenFlags.cs
-System.Security.Cryptography.X509Certificates/PublicKey.cs
-System.Security.Cryptography.X509Certificates/StoreLocation.cs
-System.Security.Cryptography.X509Certificates/StoreName.cs
-System.Security.Cryptography.X509Certificates/X500DistinguishedName.cs
-System.Security.Cryptography.X509Certificates/X500DistinguishedNameFlags.cs
-System.Security.Cryptography.X509Certificates/X509BasicConstraintsExtension.cs
-System.Security.Cryptography.X509Certificates/X509Certificate2.cs
-System.Security.Cryptography.X509Certificates/X509Certificate2Collection.cs
-System.Security.Cryptography.X509Certificates/X509Certificate2Enumerator.cs
-System.Security.Cryptography.X509Certificates/X509CertificateCollection.cs
-System.Security.Cryptography.X509Certificates/X509Chain.cs
-System.Security.Cryptography.X509Certificates/X509ChainElement.cs
-System.Security.Cryptography.X509Certificates/X509ChainElementCollection.cs
-System.Security.Cryptography.X509Certificates/X509ChainElementEnumerator.cs
-System.Security.Cryptography.X509Certificates/X509ChainPolicy.cs
-System.Security.Cryptography.X509Certificates/X509ChainStatus.cs
-System.Security.Cryptography.X509Certificates/X509ChainStatusFlags.cs
-System.Security.Cryptography.X509Certificates/X509EnhancedKeyUsageExtension.cs
-System.Security.Cryptography.X509Certificates/X509Extension.cs
-System.Security.Cryptography.X509Certificates/X509ExtensionCollection.cs
-System.Security.Cryptography.X509Certificates/X509ExtensionEnumerator.cs
-System.Security.Cryptography.X509Certificates/X509FindType.cs
-System.Security.Cryptography.X509Certificates/X509IncludeOption.cs
-System.Security.Cryptography.X509Certificates/X509KeyUsageExtension.cs
-System.Security.Cryptography.X509Certificates/X509KeyUsageFlags.cs
-System.Security.Cryptography.X509Certificates/X509NameType.cs
-System.Security.Cryptography.X509Certificates/X509RevocationFlag.cs
-System.Security.Cryptography.X509Certificates/X509RevocationMode.cs
-System.Security.Cryptography.X509Certificates/X509Store.cs
-System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierExtension.cs
-System.Security.Cryptography.X509Certificates/X509SubjectKeyIdentifierHashAlgorithm.cs
-System.Security.Cryptography.X509Certificates/X509VerificationFlags.cs
-System.Security.Cryptography/AsnEncodedData.cs
-System.Security.Cryptography/AsnEncodedDataCollection.cs
-System.Security.Cryptography/AsnEncodedDataEnumerator.cs
-System.Security.Cryptography/Oid.cs
-System.Security.Cryptography/OidCollection.cs
-System.Security.Cryptography/OidEnumerator.cs
-System.Text.RegularExpressions/BaseMachine.cs
-System.Text.RegularExpressions/Capture.cs
-System.Text.RegularExpressions/CaptureCollection.cs
-System.Text.RegularExpressions/Group.cs
-System.Text.RegularExpressions/GroupCollection.cs
-System.Text.RegularExpressions/Match.cs
-System.Text.RegularExpressions/MatchCollection.cs
-System.Text.RegularExpressions/MatchEvaluator.cs
-System.Text.RegularExpressions/Regex.cs
-System.Text.RegularExpressions/RegexCompilationInfo.cs
-System.Text.RegularExpressions/RegexOptions.cs
-System.Text.RegularExpressions/RxInterpreter.cs
-System.Text.RegularExpressions/RxOp.cs
-System.Text.RegularExpressions/arch.cs
-System.Text.RegularExpressions/cache.cs
-System.Text.RegularExpressions/category.cs
-System.Text.RegularExpressions/compiler.cs
-System.Text.RegularExpressions/debug.cs
-System.Text.RegularExpressions/interpreter.cs
-System.Text.RegularExpressions/interval.cs
-System.Text.RegularExpressions/parser.cs
-System.Text.RegularExpressions/quicksearch.cs
-System.Text.RegularExpressions/replace.cs
-System.Text.RegularExpressions/syntax.cs
-System.Threading/Semaphore.cs
-System.Threading/SemaphoreFullException.cs
-System.Threading/ThreadExceptionEventArgs.cs
-System.Threading/ThreadExceptionEventHandler.cs
-System.Timers/ElapsedEventArgs.cs
-System.Timers/ElapsedEventHandler.cs
-System.Timers/Timer.cs
-System.Timers/TimersDescriptionAttribute.cs
-System/DefaultUriParser.cs
-System/FileStyleUriParser.cs
-System/FtpStyleUriParser.cs
-System/GenericUriParser.cs
-System/GenericUriParserOptions.cs
-System/HttpStyleUriParser.cs
-System/NetPipeStyleUriParser.cs
-System/NetTcpStyleUriParser.cs
-System/NewsStyleUriParser.cs
-System/SRDescriptionAttribute.cs
-System/Uri.cs
-System/UriBuilder.cs
-System/UriComponents.cs
-System/UriFormat.cs
-System/UriFormatException.cs
-System/UriHostNameType.cs
-System/UriIdnScope.cs
-System/UriKind.cs
-System/UriParser.cs
-System/UriPartial.cs
-System/UriTypeConverter.cs
+#include monotouch_bootstrap_System.dll.sources
index 7c0bd5983a519e8499a57c6c30b9be525658c105..8dce31d234c5b119f6502c1b4dbf3c9b3baf94c0 100644 (file)
@@ -1 +1,2 @@
-#include monotouch_System.dll.sources
+#include mobile_System.dll.sources
+MonoTouch/MonoPInvokeCallbackAttribute.cs
diff --git a/mcs/class/aot-compiler/.gitignore b/mcs/class/aot-compiler/.gitignore
new file mode 100644 (file)
index 0000000..50e1322
--- /dev/null
@@ -0,0 +1 @@
+/*.log
index 58118f09a863ec92e047dab41b73ed73dbd19024..864f35f5921ca0c5d8d91cccdc796687f9f50d79 100644 (file)
@@ -87,9 +87,6 @@ namespace System.Collections.Generic {
        }
        
        [Serializable]
-#if MONOTOUCH
-       internal
-#endif
        sealed class GenericComparer <T> : Comparer <T> where T : IComparable<T> {
                public override int Compare (T x, T y)
                {
index 8510645baa60e9c3ee7ac444842f7009e2013a6a..fe97aa8928603bdd4ab62e4cd3ffc4039bbdb780 100644 (file)
@@ -88,9 +88,6 @@ namespace System.Collections.Generic {
        }
        
        [Serializable]
-#if MONOTOUCH
-       internal
-#endif
        sealed class GenericEqualityComparer <T> : EqualityComparer <T> where T : IEquatable <T> {
 
                public override int GetHashCode (T obj)
index d3f4fb0b1f3218e3584af20cfc0b57c8c037f495..0f84656c364a04350635b105695619c0c99016e2 100644 (file)
@@ -848,7 +848,7 @@ namespace System.IO
                        FlushBuffer ();
                }
 
-#if NET_4_0
+#if NET_4_0 || MOONLIGHT
                public virtual void Flush (bool flushToDisk)
                {
                        FlushBuffer ();
index 99de11c8e1aa3174e5e6bacc2c884c734b495382..71eb132dbcd9d8c71c1a898e33a8732e28accf10 100644 (file)
@@ -572,7 +572,7 @@ namespace System.Reflection.Emit
                public override Type[] GetGenericArguments ()
                {
                        if (generic_params == null)
-                               return Type.EmptyTypes;
+                               return null;
 
                        Type[] result = new Type [generic_params.Length];
                        for (int i = 0; i < generic_params.Length; i++)
index 9b8144996964ffc729a9224fc8e05878fe148773..3115d008a6c86f3000a9edf465f8e316e2561bac 100644 (file)
@@ -1897,6 +1897,20 @@ namespace System.Reflection.Emit
                                return res;
                }
 
+               internal TypeCode GetTypeCodeInternal () {
+                       if (parent == pmodule.assemblyb.corlib_enum_type) {
+                               for (int i = 0; i < num_fields; ++i) {
+                                       FieldBuilder f = fields [i];
+                                       if (!f.IsStatic)
+                                               return Type.GetTypeCode (f.FieldType);
+                               }
+                               throw new InvalidOperationException ("Enum basetype field not defined");
+                       } else {
+                               return Type.GetTypeCodeInternal (this);
+                       }
+               }
+
+
                void _TypeBuilder.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
                {
                        throw new NotImplementedException ();
index 53ec6bf2786363c16cfc7ca19475eef74cdb3bad..030fc96fa133e6d6f39b79cf15c07804f4de752a 100644 (file)
@@ -51,7 +51,7 @@ namespace System.Reflection {
        [ComDefaultInterfaceAttribute (typeof (_Assembly))]
        [Serializable]
        [ClassInterface(ClassInterfaceType.None)]
-#if MONOTOUCH
+#if MOBILE
        public partial class Assembly : ICustomAttributeProvider, _Assembly {
 #elif MOONLIGHT
        public abstract class Assembly : ICustomAttributeProvider, _Assembly {
index b45fcba8d228e2d752c0f0f02d88aca0637a5111..cd207e99347e9369024eda065b984684b483200d 100644 (file)
@@ -686,6 +686,8 @@ namespace System {
                        Type type = this;
                        if (type is MonoType)
                                return GetTypeCodeInternal (type);
+                       if (type is TypeBuilder)
+                               return ((TypeBuilder)type).GetTypeCodeInternal ();
 
                        type = type.UnderlyingSystemType;
 
index 3e27b8a56d827204e799e19127fd0859c8f89d51..402631f21e4dbc66f1a8408a6d1fc6a5d55fe854 100644 (file)
@@ -1116,5 +1116,17 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.AreEqual (1, body.LocalVariables.Count);
                        Assert.AreEqual (typeof (object), body.LocalVariables [0].LocalType);
                }
+
+
+               [Test] //#384127
+               public void GetGenericArgumentsReturnsNullForNonGenericMethod ()
+               {
+                       var tb = module.DefineType ("Base");
+       
+                       var mb = tb.DefineMethod ("foo", MethodAttributes.Public, typeof (void), Type.EmptyTypes);
+       
+                       Assert.IsNull (mb.GetGenericArguments ());
+
+               }
        }
 }
index a602169aee39cc912fea5591118d9a5ea1fff71b..d7905d4f1728c62fe3e2edbae33db6df919a078a 100644 (file)
@@ -1332,5 +1332,27 @@ namespace MonoTests.System.Reflection
        
                        AssertingBinder.Instance.SelectMethod (flags, new MethodBase [] {m0, m1}, new Type[] { typeof (int) }, null);
                }
+
+               public static string Bug636939 (IFormatProvider provider, string pattern, params object [] args)
+               {
+                       return string.Format (pattern, args);
+               }
+
+               [Test] // bug #636939
+               [Category ("NotWorking")]
+               public void SelectMethodWithParamArrayAndNonEqualTypeArguments ()
+               {
+            const BindingFlags flags =
+                BindingFlags.IgnoreCase | BindingFlags.Instance |
+                BindingFlags.Static | BindingFlags.Public |
+                BindingFlags.FlattenHierarchy | BindingFlags.InvokeMethod;
+
+                       Assert.AreEqual ("foobarbaz", typeof (BinderTest).InvokeMember (
+                               "bug636939",
+                               flags,
+                               null, // binder
+                               null, // target
+                               new object [] { CultureInfo.CurrentCulture, "foo{0}{1}", "bar", "baz" }));
+               }
        }
 }
diff --git a/mcs/class/corlib/monodroid_bootstrap_corlib.dll.sources b/mcs/class/corlib/monodroid_bootstrap_corlib.dll.sources
new file mode 100644 (file)
index 0000000..b024074
--- /dev/null
@@ -0,0 +1,2 @@
+#include corlib.dll.sources
+
diff --git a/mcs/class/corlib/monodroid_corlib.dll.sources b/mcs/class/corlib/monodroid_corlib.dll.sources
new file mode 100644 (file)
index 0000000..b14cc9c
--- /dev/null
@@ -0,0 +1 @@
+#include monodroid_bootstrap_corlib.dll.sources
index 0df04cb449e472cec1e15e829a820628eb67e539..da77893bcc50c66f173571e43a57595448b44e27 100644 (file)
@@ -1,2 +1 @@
-#include monotouch_corlib.dll.sources
-
+#include corlib.dll.sources
index da77893bcc50c66f173571e43a57595448b44e27..57c488dd5c8aab0076c913808f1ed0b1351decd2 100644 (file)
@@ -1 +1 @@
-#include corlib.dll.sources
+#include monotouch_bootstrap_corlib.dll.sources
diff --git a/mcs/errors/cs0103-3.cs b/mcs/errors/cs0103-3.cs
new file mode 100644 (file)
index 0000000..dcdc24a
--- /dev/null
@@ -0,0 +1,19 @@
+// CS0103: The name `test' does not exist in the current context
+// Line: 11
+
+class ClassMain
+{
+       public static void Main ()
+       {
+               if (true) {
+                       const bool test = false;
+               }
+               test = false;
+       }
+       
+       static bool Test { 
+               set {
+               }
+       }
+}
+
diff --git a/mcs/errors/cs0135-4.cs b/mcs/errors/cs0135-4.cs
new file mode 100644 (file)
index 0000000..62e6e62
--- /dev/null
@@ -0,0 +1,16 @@
+// CS0135: `test' conflicts with a declaration in a child block
+// Line: 13
+
+class ClassMain
+{
+       static bool test = true;
+
+       public static void Main ()
+       {
+               if (true) {
+                       const bool test = false;
+               }
+               test = false;
+       }
+}
+
diff --git a/mcs/errors/cs0136-6.cs b/mcs/errors/cs0136-6.cs
deleted file mode 100644 (file)
index e34cd4a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-// cs0136-6.cs: A local variable named `top' cannot be declared in this scope because it would give a different meaning to `top', which is already used in a `parent or current' scope to denote something else
-// Line: 19
-
-using System.Collections;
-
-class Symbol
-{
-}
-
-class X
-{
-               Symbol top;
-       
-               internal int Enter (Symbol key, object value)
-               {
-                       if (key != null) {
-                               top = key;                                      
-                       }
-                       Hashtable top = new Hashtable ();
-                       return top.Count;
-               }
-               
-               public static void Main () {}
-}
index 9664a32974659fe649468e4a76eb9cdb76d9d28d..ea82bdc81414a54bfb160e9840e99a8f5405b6f0 100644 (file)
@@ -1,5 +1,6 @@
-// cs0136.cs: A local variable named `i' cannot be declared in this scope because it would give a different meaning to `i', which is already used in a `parent' scope to denote something else
-// Line: 8
+// CS0136: A local variable named `i' cannot be declared in this scope because it would give a different meaning to `i', which is already used in a `parent or current' scope to denote something else
+// Line: 9
+
 class X {
        void b ()
        {
index 870059f9d62f5722c4e4997ef84ebc03e957f6af..30173962b6a17917196e60bd325242bb695aa08a 100644 (file)
@@ -12,4 +12,4 @@ class C
        {\r
                int i = new Test()[false];\r
        }\r
-}
+}\r
diff --git a/mcs/errors/cs0158-6.cs b/mcs/errors/cs0158-6.cs
new file mode 100644 (file)
index 0000000..6fc139a
--- /dev/null
@@ -0,0 +1,17 @@
+// CS0158: The label `a' shadows another label by the same name in a contained scope
+// Line: 11
+
+class Foo
+{
+       static void Main ()
+       {
+               int i = 1;
+               goto a;
+               if (i == 9) {
+                       a:
+                       return;
+               }
+a:
+               return;
+       }
+}
diff --git a/mcs/errors/cs0159-8.cs b/mcs/errors/cs0159-8.cs
new file mode 100644 (file)
index 0000000..3d02ac4
--- /dev/null
@@ -0,0 +1,17 @@
+// CS0159: The label `a:' could not be found within the scope of the goto statement
+// Line: 9
+
+public class A
+{
+       public static void Main ()
+       {
+               int i = 9;
+               goto a;
+               switch (i) {
+               case 9:
+               a:
+                       break;
+               }
+       }
+}
+
diff --git a/mcs/errors/cs0190-2.cs b/mcs/errors/cs0190-2.cs
new file mode 100644 (file)
index 0000000..ca9733d
--- /dev/null
@@ -0,0 +1,22 @@
+// CS0190: The __arglist construct is valid only within a variable argument method
+// Line: 11
+
+public class Test
+{
+       public static void Foo (__arglist)
+       {
+               System.RuntimeArgumentHandle o;
+               {
+                       System.Action a = delegate () {
+                               o = __arglist; 
+                       };
+                       
+                       a ();
+               }
+       }
+       
+       public static void Main ()
+       {
+               Foo (__arglist ());
+       }
+}
\ No newline at end of file
diff --git a/mcs/errors/cs0219-4.cs b/mcs/errors/cs0219-4.cs
new file mode 100644 (file)
index 0000000..3bfca01
--- /dev/null
@@ -0,0 +1,16 @@
+// CS0219: The variable `e' is assigned but its value is never used
+// Line: 12
+// Compiler options: -warn:3 -warnaserror
+
+using System;
+public class ConsoleStub
+{
+       public static void Main()
+       {
+               try {
+               } catch (Exception e) {
+                       e = null;
+               }
+       }
+}
+
diff --git a/mcs/errors/cs0236-4.cs b/mcs/errors/cs0236-4.cs
new file mode 100644 (file)
index 0000000..a28152e
--- /dev/null
@@ -0,0 +1,11 @@
+// CS0236: A field initializer cannot reference the nonstatic field, method, or property `C.stuff'
+// Line: 6
+
+class C
+{
+       object stuff = stuff;
+       
+       public C (object stuff)
+       {
+       }
+}
index b50c35bb7297ad5eedd4e6fb4fd21dbc9dbe4c65..c016ace1dea858c064f8b2a1f8727e5a18d87c47 100644 (file)
@@ -1,7 +1,8 @@
-// cs0575.cs: Only class types can contain destructor
-// Line: 5
-struct X  {
+// CS0575: Only class types can contain destructor
+// Line: 10
 
+struct X
+{
        ~X ()
        {
        }
@@ -10,5 +11,3 @@ struct X  {
        {
        }
 }
-
-}
diff --git a/mcs/errors/cs0642-11.cs b/mcs/errors/cs0642-11.cs
new file mode 100644 (file)
index 0000000..7a13563
--- /dev/null
@@ -0,0 +1,12 @@
+// CS0642: Possible mistaken empty statement
+// Line: 9
+// Compiler options: -warnaserror -warn:3
+
+public class C
+{
+       public void Test ()
+       {
+               using (System.IDisposable arg = null);
+               { }
+       }
+}
diff --git a/mcs/errors/cs0738-3.cs b/mcs/errors/cs0738-3.cs
new file mode 100644 (file)
index 0000000..b056527
--- /dev/null
@@ -0,0 +1,31 @@
+// CS738: `CB' does not implement interface member `IG<IA>.Method()' and the best implementing candidate `CA<IB>.Method()' return type `IB' does not match interface member return type `IA'
+// Line: 29
+
+public interface IA
+{
+}
+
+public interface IB : IA
+{
+}
+
+public interface IG<out U>
+{
+       U Method ();
+}
+
+public interface IDerived : IG<IA>
+{
+}
+
+public abstract class CA<T> : IG<T>
+{
+       public T Method ()
+       {
+               return default (T);
+       }
+}
+
+public class CB : CA<IB>, IG<IA>
+{
+}
index 051557d2d52cb58d78aae245ea9410f65a1ece0e..c8272ccb10fe93bc9709270aad65b3ad49d567ea 100644 (file)
@@ -1,4 +1,4 @@
-// CS0844: A local variable `y' cannot be used before it is declared. Consider renaming the local variable when it hides the field `X.y'
+// CS0844: A local variable `y' cannot be used before it is declared. Consider renaming the local variable when it hides the member `X.y'
 // Line: 8
 
 class X
diff --git a/mcs/errors/cs0844-3.cs b/mcs/errors/cs0844-3.cs
new file mode 100644 (file)
index 0000000..b352c75
--- /dev/null
@@ -0,0 +1,20 @@
+// CS0844: A local variable `top' cannot be used before it is declared. Consider renaming the local variable when it hides the member `X.top'
+// Line: 17
+
+class Symbol
+{
+}
+
+class X
+{
+       Symbol top;
+
+       internal int Enter (Symbol key, object value)
+       {
+               if (key != null) {
+                       top = key;
+               }
+               object top = null;
+               return top.Count;
+       }
+}
diff --git a/mcs/errors/cs0844-4.cs b/mcs/errors/cs0844-4.cs
new file mode 100644 (file)
index 0000000..ca0badf
--- /dev/null
@@ -0,0 +1,13 @@
+// CS0844: A local variable `s' cannot be used before it is declared. Consider renaming the local variable when it hides the member `C.s'
+// Line: 10
+
+class C
+{
+       const string s = "s";
+
+       public void Test ()
+       {
+               s = "x";
+               string s = "a";
+       }
+}
diff --git a/mcs/errors/cs0844-5.cs b/mcs/errors/cs0844-5.cs
new file mode 100644 (file)
index 0000000..dc7efa7
--- /dev/null
@@ -0,0 +1,15 @@
+// CS0844: A local variable `s' cannot be used before it is declared. Consider renaming the local variable when it hides the member `C.s'
+// Line: 10
+
+class C
+{
+       string s {
+               set {}
+       }
+
+       public void Test ()
+       {
+               s = "x";
+               string s = "a";
+       }
+}
index dc7f835a5fbe6fb10ed2a32f910c96bf09f8ab70..7c7891da9566796034a41747e3d82943dcc8e87a 100644 (file)
@@ -1,4 +1,4 @@
-// CS0844: A local variable `s' cannot be used before it is declared. Consider renaming the local variable when it hides the field `C.s'
+// CS0844: A local variable `s' cannot be used before it is declared. Consider renaming the local variable when it hides the member `C.s'
 // Line: 10
 
 class C
diff --git a/mcs/errors/cs1001-3.cs b/mcs/errors/cs1001-3.cs
new file mode 100755 (executable)
index 0000000..b09054c
--- /dev/null
@@ -0,0 +1,10 @@
+// CS1001: Unexpected symbol `)', expecting identifier
+// Line: 8
+
+class C
+{
+       public static void Main ()
+       {
+               object o = (int) => null;
+       }
+}
diff --git a/mcs/errors/cs1001-4.cs b/mcs/errors/cs1001-4.cs
new file mode 100644 (file)
index 0000000..451eb4b
--- /dev/null
@@ -0,0 +1,9 @@
+// CS1001: Unexpected symbol `)', expecting identifier
+// Line: 6
+
+class B<T>
+{
+       T Foo (T)
+       {
+       }
+}
diff --git a/mcs/errors/cs1001.cs b/mcs/errors/cs1001.cs
new file mode 100644 (file)
index 0000000..a1651fe
--- /dev/null
@@ -0,0 +1,9 @@
+// CS1001: Unexpected symbol `)', expecting identifier
+// Line: 6
+
+class T {
+       // Change (args) to (string args) to fix it
+       public static int Main (args)
+       {
+       }
+}
diff --git a/mcs/errors/cs1010-3.cs b/mcs/errors/cs1010-3.cs
new file mode 100644 (file)
index 0000000..bec6f3d
--- /dev/null
@@ -0,0 +1,11 @@
+// CS1010 : Newline in constant
+// Line: 8
+
+class C
+{
+       static void Main ()
+       {
+               var a = 1'
+               int i = 2;
+       }
+}
\ No newline at end of file
diff --git a/mcs/errors/cs1041-2.cs b/mcs/errors/cs1041-2.cs
deleted file mode 100644 (file)
index b108fb6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// cs1001: Identifier expected
-// Line: 6
-
-class T {
-       // Change (args) to (string args) to fix it
-       public static int Main (args)
-       {
-       }
-}
index 3e2ad89c3a71c90c4b02630bf560e8f05d1f633c..a770876f70f0c377f4eb8fef36cd3c32440640e0 100644 (file)
@@ -1,6 +1,15 @@
-// cs1041.cs: Identifier expected: `int' is a keyword
-// Line: 5
+// CS1041: Identifier expected, `foreach' is a keyword
+// Line: 11
 
-public class Test {
-    void T (int int) {}
+public partial class Log
+{
+       void Update (object[] h)
+       {
+               if (h == null)
+                       return;
+               
+               logstore.
+               foreach (var rev in h) {
+               }
+       }
 }
diff --git a/mcs/errors/cs1056.cs b/mcs/errors/cs1056.cs
new file mode 100644 (file)
index 0000000..71c14eb
--- /dev/null
@@ -0,0 +1,10 @@
+// CS1056: Unexpected character `$'
+// Line: 8
+
+public class C
+{
+       void Update ()
+       {
+               int a = $7;
+       }
+}
diff --git a/mcs/errors/cs1510-5.cs b/mcs/errors/cs1510-5.cs
new file mode 100644 (file)
index 0000000..3ab08ba
--- /dev/null
@@ -0,0 +1,15 @@
+// CS1510: A ref or out argument must be an assignable variable
+// Line: 9
+
+class C
+{
+       public static void Main ()
+       {
+               const char c = 'a';
+               Foo (ref c);
+       }
+
+       static void Foo(ref char i)
+       {
+       }
+}
diff --git a/mcs/errors/cs1525-17.cs b/mcs/errors/cs1525-17.cs
new file mode 100644 (file)
index 0000000..34a8039
--- /dev/null
@@ -0,0 +1,9 @@
+// CS1525: Unexpected symbol `:', expecting `,', `;', or `='
+// Line: 7
+
+class X {
+       public static void Main ()
+       {
+               int myarray:;
+       }
+}
diff --git a/mcs/errors/cs1525-18.cs b/mcs/errors/cs1525-18.cs
new file mode 100644 (file)
index 0000000..5f892ef
--- /dev/null
@@ -0,0 +1,15 @@
+// CS1518: Unexpected symbol `ew'
+// Line: 6
+
+class TestClass
+{
+       object changes = n ew object ();
+       
+       public int IndentLevel {
+               get {
+                       return 0;
+               }
+               set {
+               }
+       }
+}
diff --git a/mcs/errors/cs1525-19.cs b/mcs/errors/cs1525-19.cs
new file mode 100644 (file)
index 0000000..05d6451
--- /dev/null
@@ -0,0 +1,6 @@
+// CS1525: Unexpected symbol `int'
+// Line: 5
+
+public class Test {
+    void T (int int) {}
+}
diff --git a/mcs/errors/cs1525-20.cs b/mcs/errors/cs1525-20.cs
new file mode 100644 (file)
index 0000000..2aefb87
--- /dev/null
@@ -0,0 +1,18 @@
+// CS1525: Unexpected symbol `default:'
+// Line: 12
+
+class Program
+{
+       static void Main ()
+       {
+               int x = 0;
+               switch (x) {
+               case 2:
+                       int a = 1;
+               case default:
+                       return;
+               case 1:
+                       int b = 1;
+               }
+       }
+}
diff --git a/mcs/errors/cs1525-21.cs b/mcs/errors/cs1525-21.cs
new file mode 100644 (file)
index 0000000..c5b16c3
--- /dev/null
@@ -0,0 +1,11 @@
+// CS1525: Unexpected symbol `}'
+// Line: 10
+
+class MainClass
+{
+       public static void Main (string[] args)
+       {
+               foreach (int i in myints)
+
+       }
+}
index 857c27e76d3d20c87c6b170860e5a8f3053e9919..e8963e5e396863268857c0be185bb19c6b9fb8e2 100644 (file)
@@ -1,4 +1,4 @@
-// CS1525: Unexpected symbol `(', expecting `)', `,', `;', `[', or `='
+// CS1525: Unexpected symbol `(', expecting `,', `;', or `='
 // Line: 13
 
 class X {
diff --git a/mcs/errors/cs1620-4.cs b/mcs/errors/cs1620-4.cs
new file mode 100644 (file)
index 0000000..512b16f
--- /dev/null
@@ -0,0 +1,15 @@
+// CS1620: Argument `#1' is missing `out' modifier
+// Line: 13
+
+public class Programa
+{
+       static void Jajaja (out int mengano)
+       {
+               mengano = 3;
+       }
+
+       static void Run (out int mengano)
+       {
+               Jajaja (mengano);
+       }
+}
diff --git a/mcs/errors/cs1674-4.cs b/mcs/errors/cs1674-4.cs
new file mode 100644 (file)
index 0000000..22d17bd
--- /dev/null
@@ -0,0 +1,14 @@
+// CS1674: `int': type used in a using statement must be implicitly convertible to `System.IDisposable'
+// Line: 10
+
+using System;
+
+class C
+{
+       void Method (IDisposable i)
+       {
+               using (int o = 1, b = 2)
+               {
+               }
+       }
+}
diff --git a/mcs/errors/dcs0826.cs b/mcs/errors/dcs0826.cs
new file mode 100644 (file)
index 0000000..4e09896
--- /dev/null
@@ -0,0 +1,16 @@
+// CS0826: The type of an implicitly typed array cannot be inferred from the initializer. Try specifying array type explicitly
+// Line: 8
+
+class C
+{
+       static void Main()
+       {
+               object o = 1;
+               dynamic d = 1;
+               
+               var a = new[] {
+                       new { X = o },
+                       new { X = d }
+               };
+       }
+}
diff --git a/mcs/errors/gcs0103-5.cs b/mcs/errors/gcs0103-5.cs
new file mode 100644 (file)
index 0000000..6d20187
--- /dev/null
@@ -0,0 +1,16 @@
+// CS0103: The name `a1' does not exist in the current context
+// Line: 11
+
+using System.Linq;
+
+class C
+{
+       public static void Main ()
+       {
+               var e = 
+                       from a1 in "abcd"
+                       select a1;
+               
+               a1 = null;
+       }
+}
index a03a7ab83209cac533dc708ccb0e63061c44b671..058629f4e7cfa44b74eaca76cb21949dba1c329f 100644 (file)
@@ -1,4 +1,4 @@
-// CS0412: The type parameter name `T' is the same as `method parameter'
+// CS0412: The type parameter name `T' is the same as local variable or parameter name
 // Line: 8
 
 using System;
@@ -6,4 +6,4 @@ using System;
 interface I
 {
        T Foo<T>(IComparable T);
-}
\ No newline at end of file
+}
index 709572c39f05735320772e47c62a95332bc7c05e..78b473c67902851d1ba736b841261077790af21a 100644 (file)
@@ -1,4 +1,4 @@
-// CS0412: The type parameter name `T' is the same as `local variable'
+// CS0412: The type parameter name `T' is the same as local variable or parameter name
 // Line: 8
 
 class C
@@ -7,4 +7,4 @@ class C
        {
                int T;
        }
-}
\ No newline at end of file
+}
index 866499d833a8d53732ad7e196ca7147edc5f525f..7e94245ac208c1b1b57a03078c89ae44916c054d 100644 (file)
@@ -1,4 +1,4 @@
-// CS0412: The type parameter name `T' is the same as `method parameter'
+// CS0412: The type parameter name `T' is the same as local variable or parameter name
 // Line: 6
 
 class C
@@ -6,4 +6,4 @@ class C
        public void Foo<T> (string T)
        {
        }
-}
\ No newline at end of file
+}
diff --git a/mcs/errors/gcs0458-8.cs b/mcs/errors/gcs0458-8.cs
new file mode 100644 (file)
index 0000000..e945f5e
--- /dev/null
@@ -0,0 +1,17 @@
+// CS0458: The result of the expression is always `null' of type `E?'
+// Line: 15
+// Compiler options: -warnaserror -warn:2
+
+enum E
+{
+       V
+}
+
+public class C
+{
+       public static void Main ()
+       {
+               E e = E.V;
+               object o = null + e;
+       }
+}
diff --git a/mcs/errors/gcs1041.cs b/mcs/errors/gcs1041.cs
deleted file mode 100644 (file)
index 61f9833..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// CS1001: Identifier expected
-// Line: 6
-
-class B<T>
-{
-       T Foo (T)
-       {
-       }
-}
\ No newline at end of file
diff --git a/mcs/errors/gcs1525-3.cs b/mcs/errors/gcs1525-3.cs
deleted file mode 100755 (executable)
index d183dba..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// CS1525: Unexpected symbol `)', expecting `identifier'
-// Line: 8
-
-class C
-{
-       public static void Main ()
-       {
-               object o = (int) => null;
-       }
-}
index 9a1e4fdc649baff39fbb9e5b44c2707de0c3f384..522f471bfbdd30dd55a15d807dafde1f552af7b5 100644 (file)
@@ -11,9 +11,7 @@
 # csXXXX.cs NO ERROR   : error test case doesn't report any error. An exception is considered
 #                        as NO ERROR and CS5001 is automatically ignored.
 
-cs0158-5.cs
 cs0162-7.cs NO ERROR
-cs1041.cs # new in GMCS; grammar issue
 
 # Operators
 cs0457-2.cs
@@ -34,11 +32,10 @@ cs0111-3.cs
 cs0122-19.cs
 cs0122-28.cs
 cs0122-8.cs
+cs0168-2.cs
 cs0177-8.cs NO ERROR
 cs0419.cs
 cs0520.cs
-cs0844-2.cs
-cs0844.cs
 cs1574-2.cs
 cs1574-3.cs NO ERROR
 cs1574-6.cs NO ERROR
index 4c52704230d9f9835709a68981ca362eab7241e5..78f6a2ff93be5c4440422916d9ad6d83f3508ed3 100644 (file)
@@ -11,9 +11,7 @@
 # csXXXX.cs NO ERROR   : error test case doesn't report any error. An exception is considered
 #                        as NO ERROR and CS5001 is automatically ignored.
 
-cs0158-5.cs
 cs0162-7.cs NO ERROR
-cs1041.cs # new in GMCS; grammar issue
 
 # Operators
 cs0457-2.cs
@@ -30,11 +28,10 @@ cs0111-3.cs
 cs0122-19.cs
 cs0122-28.cs
 cs0122-8.cs
+cs0168-2.cs
 cs0177-8.cs NO ERROR
 cs0419.cs
 cs0520.cs
-cs0844-2.cs
-cs0844.cs
 cs1574-2.cs
 cs1574-3.cs NO ERROR
 cs1574-6.cs NO ERROR
index 7a89cd903a9a11c9050e076b221a4b8e5d4b9309..305d6c2c80262f698d713ed658abf9fa79f9e945 100644 (file)
@@ -224,7 +224,7 @@ namespace Mono.CSharp {
                }
 
                //
-               // Creates a link between block and the anonymous method storey
+               // Creates a link between hoisted variable block and the anonymous method storey
                //
                // An anonymous method can reference variables from any outer block, but they are
                // hoisted in their own ExplicitBlock. When more than one block is referenced we
@@ -253,7 +253,7 @@ namespace Mono.CSharp {
                        used_parent_storeys.Add (new StoreyFieldPair (storey, f));
                }
 
-               public void CaptureLocalVariable (ResolveContext ec, LocalInfo local_info)
+               public void CaptureLocalVariable (ResolveContext ec, LocalVariable local_info)
                {
                        ec.CurrentBlock.Explicit.HasCapturedVariable = true;
                        if (ec.CurrentBlock.Explicit != local_info.Block.Explicit)
@@ -357,7 +357,7 @@ namespace Mono.CSharp {
                //
                // Initializes all hoisted variables
                //
-               public void EmitStoreyInstantiation (EmitContext ec)
+               public void EmitStoreyInstantiation (EmitContext ec, ExplicitBlock block)
                {
                        // There can be only one instance variable for each storey type
                        if (Instance != null)
@@ -371,26 +371,25 @@ namespace Mono.CSharp {
                        var storey_type_expr = CreateStoreyTypeExpression (ec);
 
                        ResolveContext rc = new ResolveContext (ec.MemberContext);
+                       rc.CurrentBlock = block;
                        Expression e = new New (storey_type_expr, null, Location).Resolve (rc);
                        e.Emit (ec);
 
                        Instance = new LocalTemporary (storey_type_expr.Type);
                        Instance.Store (ec);
 
-                       EmitHoistedFieldsInitialization (ec);
+                       EmitHoistedFieldsInitialization (rc, ec);
 
                        SymbolWriter.DefineScopeVariable (ID, Instance.Builder);
                        SymbolWriter.CloseCompilerGeneratedBlock (ec);
                }
 
-               void EmitHoistedFieldsInitialization (EmitContext ec)
+               void EmitHoistedFieldsInitialization (ResolveContext rc, EmitContext ec)
                {
                        //
                        // Initialize all storey reference fields by using local or hoisted variables
                        //
                        if (used_parent_storeys != null) {
-                               var rc = new ResolveContext (ec.MemberContext);
-
                                foreach (StoreyFieldPair sf in used_parent_storeys) {
                                        //
                                        // Get instance expression of storey field
@@ -414,7 +413,7 @@ namespace Mono.CSharp {
                        //
                        if (OriginalSourceBlock.Explicit.HasCapturedThis && !(Parent is AnonymousMethodStorey)) {
                                AddCapturedThisField (ec);
-                               OriginalSourceBlock.AddScopeStatement (new ThisInitializer (hoisted_this));
+                               rc.CurrentBlock.AddScopeStatement (new ThisInitializer (hoisted_this));
                        }
 
                        //
@@ -520,7 +519,7 @@ namespace Mono.CSharp {
                        return f_ind;
                }
 
-               protected virtual string GetVariableMangledName (LocalInfo local_info)
+               protected virtual string GetVariableMangledName (LocalVariable local_info)
                {
                        //
                        // No need to mangle anonymous method hoisted variables cause they
@@ -616,7 +615,7 @@ namespace Mono.CSharp {
                //
                // Creates field access expression for hoisted variable
                //
-               protected FieldExpr GetFieldExpression (EmitContext ec)
+               protected virtual FieldExpr GetFieldExpression (EmitContext ec)
                {
                        if (ec.CurrentAnonymousMethod == null || ec.CurrentAnonymousMethod.Storey == null) {
                                if (cached_outer_access != null)
@@ -736,8 +735,8 @@ namespace Mono.CSharp {
        {
                readonly string name;
 
-               public HoistedLocalVariable (AnonymousMethodStorey scope, LocalInfo local, string name)
-                       : base (scope, name, local.VariableType)
+               public HoistedLocalVariable (AnonymousMethodStorey scope, LocalVariable local, string name)
+                       : base (scope, name, local.Type)
                {
                        this.name = local.Name;
                }
@@ -807,7 +806,7 @@ namespace Mono.CSharp {
                }
 
                Dictionary<TypeSpec, Expression> compatibles;
-               public ToplevelBlock Block;
+               public ParametersBlock Block;
 
                public AnonymousMethodExpression (Location loc)
                {
@@ -1103,7 +1102,7 @@ namespace Mono.CSharp {
                                                return null;
                                        }
                                        fixedpars[i] = new Parameter (
-                                               null, null,
+                                               new TypeExpression (delegate_parameters.Types [i], loc), null,
                                                delegate_parameters.FixedParameters [i].ModFlags, null, loc);
                                }
 
@@ -1177,13 +1176,13 @@ namespace Mono.CSharp {
                        if (p == null)
                                return null;
 
-                       ToplevelBlock b = ec.IsInProbingMode ? (ToplevelBlock) Block.PerformClone () : Block;
+                       ParametersBlock b = ec.IsInProbingMode ? (ParametersBlock) Block.PerformClone () : Block;
 
                        return CompatibleMethodFactory (return_type, delegate_type, p, b);
 
                }
 
-               protected virtual AnonymousMethodBody CompatibleMethodFactory (TypeSpec return_type, TypeSpec delegate_type, ParametersCompiled p, ToplevelBlock b)
+               protected virtual AnonymousMethodBody CompatibleMethodFactory (TypeSpec return_type, TypeSpec delegate_type, ParametersCompiled p, ParametersBlock b)
                {
                        return new AnonymousMethodBody (p, b, return_type, delegate_type, loc);
                }
@@ -1192,7 +1191,7 @@ namespace Mono.CSharp {
                {
                        AnonymousMethodExpression target = (AnonymousMethodExpression) t;
 
-                       target.Block = (ToplevelBlock) clonectx.LookupBlock (Block);
+                       target.Block = (ParametersBlock) clonectx.LookupBlock (Block);
                }
        }
 
@@ -1219,7 +1218,7 @@ namespace Mono.CSharp {
                                this.RealName = real_name;
 
                                Parent.PartialContainer.AddMethod (this);
-                               Block = am.Block;
+                               Block = new ToplevelBlock (am.block, parameters);
                        }
 
                        public override EmitContext CreateEmitContext (ILGenerator ig)
@@ -1272,13 +1271,13 @@ namespace Mono.CSharp {
                        }
                }
 
-               readonly ToplevelBlock block;
+               protected ParametersBlock block;
 
                public TypeSpec ReturnType;
 
                object return_label;
 
-               protected AnonymousExpression (ToplevelBlock block, TypeSpec return_type, Location loc)
+               protected AnonymousExpression (ParametersBlock block, TypeSpec return_type, Location loc)
                {
                        this.ReturnType = return_type;
                        this.block = block;
@@ -1300,7 +1299,7 @@ namespace Mono.CSharp {
                                return this;
 
                        // TODO: Implement clone
-                       BlockContext aec = new BlockContext (ec.MemberContext, Block, ReturnType);
+                       BlockContext aec = new BlockContext (ec, block, ReturnType);
                        aec.CurrentAnonymousMethod = ae;
 
                        ResolveContext.FlagsHandle? aec_dispose = null;
@@ -1318,12 +1317,6 @@ namespace Mono.CSharp {
                        if (ec.HasSet (ResolveContext.Options.FieldInitializerScope))
                                flags |= ResolveContext.Options.FieldInitializerScope;
 
-                       if (ec.IsUnsafe)
-                               flags |= ResolveContext.Options.UnsafeScope;
-
-                       if (ec.HasSet (ResolveContext.Options.CheckedScope))
-                               flags |= ResolveContext.Options.CheckedScope;
-
                        if (ec.HasSet (ResolveContext.Options.ExpressionTreeConversion))
                                flags |= ResolveContext.Options.ExpressionTreeConversion;
 
@@ -1333,7 +1326,7 @@ namespace Mono.CSharp {
 
                        var errors = ec.Report.Errors;
 
-                       bool res = Block.Resolve (ec.CurrentBranching, aec, Block.Parameters, null);
+                       bool res = Block.Resolve (ec.CurrentBranching, aec, null);
 
                        if (aec.HasReturnLabel)
                                return_label = aec.ReturnLabel;
@@ -1356,22 +1349,20 @@ namespace Mono.CSharp {
 
                public void SetHasThisAccess ()
                {
-                       Block.HasCapturedThis = true;
-                       ExplicitBlock b = Block.Parent.Explicit;
-
-                       while (b != null) {
+                       ExplicitBlock b = block;
+                       do {
                                if (b.HasCapturedThis)
                                        return;
 
                                b.HasCapturedThis = true;
                                b = b.Parent == null ? null : b.Parent.Explicit;
-                       }
+                       } while (b != null);
                }
 
                //
                // The block that makes up the body for the anonymous method
                //
-               public ToplevelBlock Block {
+               public ParametersBlock Block {
                        get {
                                return block;
                        }
@@ -1392,7 +1383,7 @@ namespace Mono.CSharp {
                static int unique_id;
 
                public AnonymousMethodBody (ParametersCompiled parameters,
-                                       ToplevelBlock block, TypeSpec return_type, TypeSpec delegate_type,
+                                       ParametersBlock block, TypeSpec return_type, TypeSpec delegate_type,
                                        Location loc)
                        : base (block, return_type, loc)
                {
@@ -1645,17 +1636,12 @@ namespace Mono.CSharp {
        //
        public class AnonymousTypeClass : CompilerGeneratedClass
        {
-               sealed class AnonymousParameters : ParametersCompiled
+               // TODO: Merge with AnonymousTypeParameter
+               public class GeneratedParameter : Parameter
                {
-                       public AnonymousParameters (CompilerContext ctx, params Parameter[] parameters)
-                               : base (ctx, parameters)
-                       {
-                       }
-
-                       protected override void ErrorDuplicateName (Parameter p, Report Report)
+                       public GeneratedParameter (FullNamedExpression type, AnonymousTypeParameter p)
+                               : base (type, p.Name, Modifier.NONE, null, p.Location)
                        {
-                               Report.Error (833, p.Location, "`{0}': An anonymous type cannot have multiple properties with the same name",
-                                       p.Name);
                        }
                }
 
@@ -1675,15 +1661,27 @@ namespace Mono.CSharp {
                {
                        string name = ClassNamePrefix + types_counter++;
 
-                       SimpleName [] t_args = new SimpleName [parameters.Count];
-                       TypeParameterName [] t_params = new TypeParameterName [parameters.Count];
-                       Parameter [] ctor_params = new Parameter [parameters.Count];
-                       for (int i = 0; i < parameters.Count; ++i) {
-                               AnonymousTypeParameter p = (AnonymousTypeParameter) parameters [i];
+                       ParametersCompiled all_parameters;
+                       TypeParameterName[] t_params;
+                       SimpleName[] t_args;
+
+                       if (parameters.Count == 0) {
+                               all_parameters = ParametersCompiled.EmptyReadOnlyParameters;
+                               t_params = new TypeParameterName[0];
+                               t_args = null;
+                       } else {
+                               t_args = new SimpleName[parameters.Count];
+                               t_params = new TypeParameterName[parameters.Count];
+                               Parameter[] ctor_params = new Parameter[parameters.Count];
+                               for (int i = 0; i < parameters.Count; ++i) {
+                                       AnonymousTypeParameter p = parameters[i];
+
+                                       t_args[i] = new SimpleName ("<" + p.Name + ">__T", p.Location);
+                                       t_params[i] = new TypeParameterName (t_args[i].Name, null, p.Location);
+                                       ctor_params[i] = new GeneratedParameter (t_args[i], p);
+                               }
 
-                               t_args [i] = new SimpleName ("<" + p.Name + ">__T", p.Location);
-                               t_params [i] = new TypeParameterName (t_args [i].Name, null, p.Location);
-                               ctor_params [i] = new Parameter (t_args [i], p.Name, 0, null, p.Location);
+                               all_parameters = new ParametersCompiled (ctor_params);
                        }
 
                        //
@@ -1697,7 +1695,7 @@ namespace Mono.CSharp {
                                a_type.SetParameterInfo (null);
 
                        Constructor c = new Constructor (a_type, name, Modifiers.PUBLIC | Modifiers.DEBUGGER_HIDDEN,
-                               null, new AnonymousParameters (ctx, ctor_params), null, loc);
+                               null, all_parameters, null, loc);
                        c.Block = new ToplevelBlock (ctx, c.ParameterInfo, loc);
 
                        // 
@@ -1705,7 +1703,7 @@ namespace Mono.CSharp {
                        //
                        bool error = false;
                        for (int i = 0; i < parameters.Count; ++i) {
-                               AnonymousTypeParameter p = (AnonymousTypeParameter) parameters [i];
+                               AnonymousTypeParameter p = parameters [i];
 
                                Field f = new Field (a_type, t_args [i], Modifiers.PRIVATE | Modifiers.READONLY,
                                        new MemberName ("<" + p.Name + ">", p.Location), null);
@@ -1717,7 +1715,7 @@ namespace Mono.CSharp {
 
                                c.Block.AddStatement (new StatementExpression (
                                        new SimpleAssign (new MemberAccess (new This (p.Location), f.Name),
-                                               c.Block.GetParameterReference (p.Name, p.Location))));
+                                               c.Block.GetParameterReference (i, p.Location))));
 
                                ToplevelBlock get_block = new ToplevelBlock (ctx, p.Location);
                                get_block.AddStatement (new Return (
@@ -1762,15 +1760,21 @@ namespace Mono.CSharp {
 
                        Location loc = Location;
 
+                       var equals_parameters = ParametersCompiled.CreateFullyResolved (
+                               new Parameter (new TypeExpression (TypeManager.object_type, loc), "obj", 0, null, loc), TypeManager.object_type);
+
                        Method equals = new Method (this, null, new TypeExpression (TypeManager.bool_type, loc),
                                Modifiers.PUBLIC | Modifiers.OVERRIDE | Modifiers.DEBUGGER_HIDDEN, new MemberName ("Equals", loc),
-                               Mono.CSharp.ParametersCompiled.CreateFullyResolved (new Parameter (null, "obj", 0, null, loc), TypeManager.object_type), null);
+                               equals_parameters, null);
+
+                       equals_parameters[0].Resolve (equals, 0);
 
                        Method tostring = new Method (this, null, new TypeExpression (TypeManager.string_type, loc),
                                Modifiers.PUBLIC | Modifiers.OVERRIDE | Modifiers.DEBUGGER_HIDDEN, new MemberName ("ToString", loc),
                                Mono.CSharp.ParametersCompiled.EmptyReadOnlyParameters, null);
 
                        ToplevelBlock equals_block = new ToplevelBlock (Compiler, equals.ParameterInfo, loc);
+
                        TypeExpr current_type;
                        if (type_params != null) {
                                var targs = new TypeArguments ();
@@ -1782,8 +1786,9 @@ namespace Mono.CSharp {
                                current_type = new TypeExpression (Definition, loc);
                        }
 
-                       equals_block.AddVariable (current_type, "other", loc);
-                       LocalVariableReference other_variable = new LocalVariableReference (equals_block, "other", loc);
+                       var li_other = LocalVariable.CreateCompilerGenerated (CurrentType, equals_block, loc);
+                       equals_block.AddStatement (new BlockVariableDeclaration (new TypeExpression (li_other.Type, loc), li_other));
+                       var other_variable = new LocalVariableReference (li_other, loc);
 
                        MemberAccess system_collections_generic = new MemberAccess (new MemberAccess (
                                new QualifiedAliasMember ("global", "System", loc), "Collections", loc), "Generic", loc);
@@ -1857,10 +1862,10 @@ namespace Mono.CSharp {
                        //
                        // Equals (object obj) override
                        //              
-                       LocalVariableReference other_variable_assign = new LocalVariableReference (equals_block, "other", loc);
+                       var other_variable_assign = new TemporaryVariableReference (li_other, loc);
                        equals_block.AddStatement (new StatementExpression (
                                new SimpleAssign (other_variable_assign,
-                                       new As (equals_block.GetParameterReference ("obj", loc),
+                                       new As (equals_block.GetParameterReference (0, loc),
                                                current_type, loc), loc)));
 
                        Expression equals_test = new Binary (Binary.Operator.Inequality, other_variable, new NullLiteral (loc), loc);
@@ -1895,15 +1900,16 @@ namespace Mono.CSharp {
                        // hash += hash << 5;
 
                        ToplevelBlock hashcode_top = new ToplevelBlock (Compiler, loc);
-                       Block hashcode_block = new Block (hashcode_top);
+                       Block hashcode_block = new Block (hashcode_top, loc, loc);
                        hashcode_top.AddStatement (new Unchecked (hashcode_block, loc));
 
-                       hashcode_block.AddVariable (new TypeExpression (TypeManager.int32_type, loc), "hash", loc);
-                       LocalVariableReference hash_variable = new LocalVariableReference (hashcode_block, "hash", loc);
-                       LocalVariableReference hash_variable_assign = new LocalVariableReference (hashcode_block, "hash", loc);
+                       var li_hash = LocalVariable.CreateCompilerGenerated (TypeManager.int32_type, hashcode_top, loc);
+                       hashcode_block.AddStatement (new BlockVariableDeclaration (new TypeExpression (li_hash.Type, loc), li_hash));
+                       LocalVariableReference hash_variable_assign = new LocalVariableReference (li_hash, loc);
                        hashcode_block.AddStatement (new StatementExpression (
                                new SimpleAssign (hash_variable_assign, rs_hashcode)));
 
+                       var hash_variable = new LocalVariableReference (li_hash, loc);
                        hashcode_block.AddStatement (new StatementExpression (
                                new CompoundAssign (Binary.Operator.Addition, hash_variable,
                                        new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (13, loc), loc), loc)));
index 8cb7e9780e38b25ff0c97f9bb527d2bd7d20b481..23515cc5f8fc8e22ec5885675180937ddf8933a5 100644 (file)
@@ -238,8 +238,7 @@ namespace Mono.CSharp
                                const string info_flags_enum = "CSharpArgumentInfoFlags";
                                Expression info_flags = new IntLiteral (0, loc);
 
-                               var constant = a.Expr as Constant;
-                               if (constant != null && constant.IsLiteral) {
+                               if (a.Expr is Constant) {
                                        info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags,
                                                new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "Constant", loc), loc);
                                } else if (a.ArgType == Argument.AType.Ref) {
@@ -255,7 +254,7 @@ namespace Mono.CSharp
 
                                var arg_type = a.Expr.Type;
 
-                               if (arg_type != InternalType.Dynamic) {
+                               if (arg_type != InternalType.Dynamic && arg_type != InternalType.Null) {
                                        MethodGroupExpr mg = a.Expr as MethodGroupExpr;
                                        if (mg != null) {
                                                rc.Report.Error (1976, a.Expr.Location,
index 310765bcaf66bc4cc2ea17e973e5f4611794a725..c98b09c7ccf5e6a60b1d2fa01d25f6c6152976c7 100644 (file)
@@ -301,7 +301,9 @@ namespace Mono.CSharp {
                }
 
                public Expression Source {
-                       get { return source; }
+                       get {
+                               return source;
+                       }
                }
 
                protected override Expression DoResolve (ResolveContext ec)
@@ -432,6 +434,22 @@ namespace Mono.CSharp {
                }
        }
 
+       //
+       // Compiler generated assign
+       //
+       class CompilerAssign : Assign
+       {
+               public CompilerAssign (Expression target, Expression source, Location loc)
+                       : base (target, source, loc)
+               {
+               }
+
+               public void UpdateSource (Expression source)
+               {
+                       base.source = source;
+               }
+       }
+
        //
        // Implements fields and events class initializers
        //
index 2a26b99e6d51b9a4ef02f3527a50ea02368f3ef3..8330f5000763fa5d98ef0641cd9d210cf3aa5a0c 100644 (file)
@@ -308,7 +308,7 @@ namespace Mono.CSharp {
 
                public bool HasSecurityAttribute {
                        get {
-                               PredefinedAttribute pa = PredefinedAttributes.Get.Security;
+                               PredefinedAttribute pa = context.Compiler.PredefinedAttributes.Security;
                                return pa.IsDefined && TypeSpec.IsBaseClass (type, pa.Type, false);
                        }
                }
@@ -337,7 +337,7 @@ namespace Mono.CSharp {
 
                void ApplyModuleCharSet (ResolveContext rc)
                {
-                       if (Type != PredefinedAttributes.Get.DllImport)
+                       if (Type != context.Compiler.PredefinedAttributes.DllImport)
                                return;
 
                        if (!RootContext.ToplevelTypes.HasDefaultCharSet)
@@ -443,10 +443,10 @@ namespace Mono.CSharp {
 
                                a.Resolve (ec);
 
-                               Expression member = Expression.MemberLookup (ec, ec.CurrentType, Type, name, 0, false, loc);
+                               Expression member = Expression.MemberLookup (ec, ec.CurrentType, Type, name, 0, MemberLookupRestrictions.ExactArity, loc);
 
                                if (member == null) {
-                                       member = Expression.MemberLookup (null, ec.CurrentType, Type, name, 0, false, loc);
+                                       member = Expression.MemberLookup (null, ec.CurrentType, Type, name, 0, MemberLookupRestrictions.ExactArity, loc);
 
                                        if (member != null) {
                                                // TODO: ec.Report.SymbolRelatedToPreviousError (member);
@@ -522,7 +522,7 @@ namespace Mono.CSharp {
                public string GetValidTargets ()
                {
                        StringBuilder sb = new StringBuilder ();
-                       AttributeTargets targets = Type.GetAttributeUsage (PredefinedAttributes.Get.AttributeUsage).ValidOn;
+                       AttributeTargets targets = Type.GetAttributeUsage (context.Compiler.PredefinedAttributes.AttributeUsage).ValidOn;
 
                        if ((targets & AttributeTargets.Assembly) != 0)
                                sb.Append ("assembly, ");
@@ -993,7 +993,7 @@ namespace Mono.CSharp {
 
                public bool IsInternalMethodImplAttribute {
                        get {
-                               if (Type != PredefinedAttributes.Get.MethodImpl)
+                               if (Type != context.Compiler.PredefinedAttributes.MethodImpl)
                                        return false;
 
                                MethodImplOptions options;
@@ -1048,7 +1048,9 @@ namespace Mono.CSharp {
                        if (ctor == null)
                                return;
 
-                       AttributeUsageAttribute usage_attr = Type.GetAttributeUsage (PredefinedAttributes.Get.AttributeUsage);
+                       var predefined = context.Compiler.PredefinedAttributes;
+
+                       AttributeUsageAttribute usage_attr = Type.GetAttributeUsage (predefined.AttributeUsage);
                        if ((usage_attr.ValidOn & Target) == 0) {
                                Report.Error (592, Location, "The attribute `{0}' is not valid on this declaration type. " +
                                              "It is valid on `{1}' declarations only",
@@ -1056,8 +1058,6 @@ namespace Mono.CSharp {
                                return;
                        }
 
-                       var predefined = PredefinedAttributes.Get;
-
                        AttributeEncoder encoder = new AttributeEncoder (false);
 
                        if (PosArguments != null) {
@@ -1560,7 +1560,7 @@ namespace Mono.CSharp {
 
                public static void VerifyModulesClsCompliance (CompilerContext ctx)
                {
-                       Module[] modules = GlobalRootNamespace.Instance.Modules;
+                       Module[] modules = ctx.GlobalRootNamespace.Modules;
                        if (modules == null)
                                return;
 
@@ -1659,9 +1659,7 @@ namespace Mono.CSharp {
                public readonly PredefinedAttribute StructLayout;
                public readonly PredefinedAttribute FieldOffset;
 
-               public static PredefinedAttributes Get = new PredefinedAttributes ();
-
-               private PredefinedAttributes ()
+               public PredefinedAttributes ()
                {
                        ParamArray = new PredefinedAttribute ("System", "ParamArrayAttribute");
                        Out = new PredefinedAttribute ("System.Runtime.InteropServices", "OutAttribute");
@@ -1713,11 +1711,6 @@ namespace Mono.CSharp {
                                ((PredefinedAttribute) fi.GetValue (this)).Initialize (ctx, true);
                        }
                }
-
-               public static void Reset ()
-               {
-                       Get = new PredefinedAttributes ();
-               }
        }
 
        public class PredefinedAttribute
index cd8a1b47f3904e4adc85e5348c9a5c90b2db197d..5b10a448c18c29357bedd370a6b9b3135342103f 100644 (file)
@@ -216,6 +216,8 @@ namespace Mono.CSharp {
 
                List<TypeContainer> partial_parts;
 
+               public int DynamicSitesCounter;
+
                /// <remarks>
                ///  The pending methods that need to be implemented
                //   (interfaces or abstract methods)
@@ -667,7 +669,7 @@ namespace Mono.CSharp {
                                if (OptAttributes == null)
                                        return false;
 
-                               return OptAttributes.Contains (PredefinedAttributes.Get.ComImport);
+                               return OptAttributes.Contains (Compiler.PredefinedAttributes.ComImport);
                        }
                }
 
@@ -781,7 +783,7 @@ namespace Mono.CSharp {
                        if (OptAttributes == null)
                                return null;
 
-                       Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CoClass);
+                       Attribute a = OptAttributes.Search (Compiler.PredefinedAttributes.CoClass);
                        if (a == null)
                                return null;
 
@@ -998,7 +1000,7 @@ namespace Mono.CSharp {
                        int type_size = Kind == MemberKind.Struct && first_nonstatic_field == null ? 1 : 0;
 
                        if (IsTopLevel) {
-                               if (GlobalRootNamespace.Instance.IsNamespace (Name)) {
+                               if (Compiler.GlobalRootNamespace.IsNamespace (Name)) {
                                        Report.Error (519, Location, "`{0}' clashes with a predefined namespace", Name);
                                        return false;
                                }
@@ -1060,6 +1062,7 @@ namespace Mono.CSharp {
                                                var base_param = method.Parameters.FixedParameters[i];
                                                base_parameters[i] = new Parameter (new TypeExpression (method.Parameters.Types[i], Location),
                                                        base_param.Name, base_param.ModFlags, null, Location);
+                                               base_parameters[i].Resolve (this, i);
                                        }
                                }
 
@@ -1612,7 +1615,7 @@ namespace Mono.CSharp {
                        if (!seen_normal_indexers)
                                return;
 
-                       PredefinedAttribute pa = PredefinedAttributes.Get.DefaultMember;
+                       PredefinedAttribute pa = Compiler.PredefinedAttributes.DefaultMember;
                        if (pa.Constructor == null &&
                                !pa.ResolveConstructor (Location, TypeManager.string_type))
                                return;
@@ -1751,7 +1754,7 @@ namespace Mono.CSharp {
                        }
 
                        if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
-                               PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (TypeBuilder);
+                               Compiler.PredefinedAttributes.CompilerGenerated.EmitAttribute (TypeBuilder);
 
                        base.Emit ();
                }
@@ -2399,11 +2402,11 @@ namespace Mono.CSharp {
                        base.Emit ();
 
                        if ((ModFlags & Modifiers.METHOD_EXTENSION) != 0)
-                               PredefinedAttributes.Get.Extension.EmitAttribute (TypeBuilder);
+                               Compiler.PredefinedAttributes.Extension.EmitAttribute (TypeBuilder);
 
                        var trans_flags = TypeManager.HasDynamicTypeUsed (base_type);
                        if (trans_flags != null) {
-                               var pa = PredefinedAttributes.Get.DynamicTransform;
+                               var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                        TypeBuilder.SetCustomAttribute (new CustomAttributeBuilder (pa.Constructor, new object[] { trans_flags }));
                                }
@@ -2475,7 +2478,7 @@ namespace Mono.CSharp {
                        if (OptAttributes == null)
                                return null;
 
-                       Attribute[] attrs = OptAttributes.SearchMulti (PredefinedAttributes.Get.Conditional);
+                       Attribute[] attrs = OptAttributes.SearchMulti (Compiler.PredefinedAttributes.Conditional);
                        if (attrs == null)
                                return null;
 
@@ -2884,13 +2887,13 @@ namespace Mono.CSharp {
 
                                ObsoleteAttribute oa = base_member.GetAttributeObsolete ();
                                if (oa != null) {
-                                       if (OptAttributes == null || !OptAttributes.Contains (PredefinedAttributes.Get.Obsolete)) {
+                                       if (OptAttributes == null || !OptAttributes.Contains (Compiler.PredefinedAttributes.Obsolete)) {
                                                Report.SymbolRelatedToPreviousError (base_member);
                                                Report.Warning (672, 1, Location, "Member `{0}' overrides obsolete member `{1}'. Add the Obsolete attribute to `{0}'",
                                                        GetSignatureForError (), TypeManager.GetFullNameSignature (base_member));
                                        }
                                } else {
-                                       if (OptAttributes != null && OptAttributes.Contains (PredefinedAttributes.Get.Obsolete)) {
+                                       if (OptAttributes != null && OptAttributes.Contains (Compiler.PredefinedAttributes.Obsolete)) {
                                                Report.SymbolRelatedToPreviousError (base_member);
                                                Report.Warning (809, 1, Location, "Obsolete member `{0}' overrides non-obsolete member `{1}'",
                                                        GetSignatureForError (), TypeManager.GetFullNameSignature (base_member));
index 85926d23be186278bc5eecc79005bd484e4a2ae3..b425f993c3566faa69a00e29dc8911c01fc3912f 100644 (file)
@@ -38,6 +38,7 @@ namespace Mono.CSharp {
        public class CodeGen {
                static AppDomain current_domain;
 
+               // Breaks dynamic and repl
                public static AssemblyClass Assembly;
 
                static CodeGen ()
@@ -107,7 +108,7 @@ namespace Mono.CSharp {
                        if (an.KeyPair != null) {
                                // If we are going to strong name our assembly make
                                // sure all its refs are strong named
-                               foreach (Assembly a in GlobalRootNamespace.Instance.Assemblies) {
+                               foreach (Assembly a in ctx.GlobalRootNamespace.Assemblies) {
                                        AssemblyName ref_name = a.GetName ();
                                        byte [] b = ref_name.GetPublicKeyToken ();
                                        if (b == null || b.Length == 0) {
@@ -1012,7 +1013,7 @@ namespace Mono.CSharp {
                                Arguments named = new Arguments (1);
                                named.Add (new NamedArgument ("SkipVerification", loc, new BoolLiteral (true, loc)));
 
-                               GlobalAttribute g = new GlobalAttribute (new NamespaceEntry (null, null, null), "assembly",
+                               GlobalAttribute g = new GlobalAttribute (new NamespaceEntry (Compiler, null, null, null), "assembly",
                                        new MemberAccess (system_security_permissions, "SecurityPermissionAttribute"),
                                        new Arguments[] { pos, named }, loc, false);
                                g.AttachTo (this, this);
@@ -1030,13 +1031,13 @@ namespace Mono.CSharp {
                        if (!OptAttributes.CheckTargets())
                                return;
 
-                       ClsCompliantAttribute = ResolveAttribute (PredefinedAttributes.Get.CLSCompliant);
+                       ClsCompliantAttribute = ResolveAttribute (Compiler.PredefinedAttributes.CLSCompliant);
 
                        if (ClsCompliantAttribute != null) {
                                is_cls_compliant = ClsCompliantAttribute.GetClsCompliantAttributeValue ();
                        }
 
-                       Attribute a = ResolveAttribute (PredefinedAttributes.Get.RuntimeCompatibility);
+                       Attribute a = ResolveAttribute (Compiler.PredefinedAttributes.RuntimeCompatibility);
                        if (a != null) {
                                var val = a.GetPropertyValue ("WrapNonExceptionThrows") as BoolConstant;
                                if (val != null)
@@ -1281,7 +1282,7 @@ namespace Mono.CSharp {
 
                                try {
                                        var fi = typeof (AssemblyBuilder).GetField ("culture", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetField);
-                                       fi.SetValue (CodeGen.Assembly.Builder, value == "neutral" ? "" : value);
+                                       fi.SetValue (Builder, value == "neutral" ? "" : value);
                                } catch {
                                        Report.RuntimeMissingSupport (a.Location, "AssemblyCultureAttribute setting");
                                }
@@ -1302,7 +1303,7 @@ namespace Mono.CSharp {
 
                                try {
                                        var fi = typeof (AssemblyBuilder).GetField ("version", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetField);
-                                       fi.SetValue (CodeGen.Assembly.Builder, vinfo);
+                                       fi.SetValue (Builder, vinfo);
                                } catch {
                                        Report.RuntimeMissingSupport (a.Location, "AssemblyVersionAttribute setting");
                                }
@@ -1319,7 +1320,7 @@ namespace Mono.CSharp {
 
                                try {
                                        var fi = typeof (AssemblyBuilder).GetField ("algid", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetField);
-                                       fi.SetValue (CodeGen.Assembly.Builder, alg);
+                                       fi.SetValue (Builder, alg);
                                } catch {
                                        Report.RuntimeMissingSupport (a.Location, "AssemblyAlgorithmIdAttribute setting");
                                }
@@ -1335,12 +1336,12 @@ namespace Mono.CSharp {
                                flags |= ((uint) cdata[pos + 3]) << 24;
 
                                // Ignore set PublicKey flag if assembly is not strongnamed
-                               if ((flags & (uint) AssemblyNameFlags.PublicKey) != 0 && (CodeGen.Assembly.Builder.GetName ().KeyPair == null))
+                               if ((flags & (uint) AssemblyNameFlags.PublicKey) != 0 && (Builder.GetName ().KeyPair == null))
                                        flags &= ~(uint)AssemblyNameFlags.PublicKey;
 
                                try {
                                        var fi = typeof (AssemblyBuilder).GetField ("flags", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetField);
-                                       fi.SetValue (CodeGen.Assembly.Builder, flags);
+                                       fi.SetValue (Builder, flags);
                                } catch {
                                        Report.RuntimeMissingSupport (a.Location, "AssemblyFlagsAttribute setting");
                                }
@@ -1409,13 +1410,13 @@ namespace Mono.CSharp {
                        base.Emit (tc);
 
                        if (has_extension_method)
-                               PredefinedAttributes.Get.Extension.EmitAttribute (Builder);
+                               Compiler.PredefinedAttributes.Extension.EmitAttribute (Builder);
 
-                       // FIXME: Does this belong inside SRE.AssemblyBuilder instead?
-                       PredefinedAttribute pa = PredefinedAttributes.Get.RuntimeCompatibility;
+                       PredefinedAttribute pa = tc.Compiler.PredefinedAttributes.RuntimeCompatibility;
                        if (pa.IsDefined && (OptAttributes == null || !OptAttributes.Contains (pa))) {
                                var ci = TypeManager.GetPredefinedConstructor (pa.Type, Location.Null, TypeSpec.EmptyTypes);
                                PropertyInfo [] pis = new PropertyInfo [1];
+
                                pis [0] = TypeManager.GetPredefinedProperty (pa.Type,
                                        "WrapNonExceptionThrows", Location.Null, TypeManager.bool_type).MetaInfo;
                                object [] pargs = new object [1];
index 3ad88788a7c16bf5800fa0f0a15d556287ea2b46..be6104b3869eb8e4cd04c3a78f6843b29d016a96 100644 (file)
@@ -86,7 +86,7 @@ namespace Mono.CSharp {
                {
                        var c = ((ConstSpec) spec).Value as Constant;
                        if (c.Type == TypeManager.decimal_type) {
-                               FieldBuilder.SetCustomAttribute (CreateDecimalConstantAttribute (c));
+                               FieldBuilder.SetCustomAttribute (CreateDecimalConstantAttribute (c, Compiler.PredefinedAttributes));
                        } else {
                                FieldBuilder.SetConstant (c.GetTypedValue ());
                        }
@@ -94,11 +94,11 @@ namespace Mono.CSharp {
                        base.Emit ();
                }
 
-               public static CustomAttributeBuilder CreateDecimalConstantAttribute (Constant c)
+               public static CustomAttributeBuilder CreateDecimalConstantAttribute (Constant c, PredefinedAttributes pa)
                {
-                       PredefinedAttribute pa = PredefinedAttributes.Get.DecimalConstant;
-                       if (pa.Constructor == null &&
-                               !pa.ResolveConstructor (c.Location, TypeManager.byte_type, TypeManager.byte_type,
+                       PredefinedAttribute attr = pa.DecimalConstant;
+                       if (attr.Constructor == null &&
+                               !attr.ResolveConstructor (c.Location, TypeManager.byte_type, TypeManager.byte_type,
                                        TypeManager.uint32_type, TypeManager.uint32_type, TypeManager.uint32_type))
                                return null;
 
@@ -110,7 +110,7 @@ namespace Mono.CSharp {
                                (uint) bits [2], (uint) bits [1], (uint) bits [0]
                        };
 
-                       return new CustomAttributeBuilder (pa.Constructor, args);
+                       return new CustomAttributeBuilder (attr.Constructor, args);
                }
 
                public static void Error_InvalidConstantType (TypeSpec t, Location loc, Report Report)
index 074312cbae28cca2e92a7b1f0f6befb54e513b3f..33a003430be97e60c3f95d40b2046f0789e54ece 100644 (file)
@@ -71,6 +71,8 @@ namespace Mono.CSharp
                /// </summary>
                public bool HasReturnLabel;
 
+               public int FlowOffset;
+
                public BlockContext (IMemberContext mc, ExplicitBlock block, TypeSpec returnType)
                        : base (mc)
                {
@@ -83,6 +85,16 @@ namespace Mono.CSharp
                        CurrentBlock = block;
                }
 
+               public BlockContext (ResolveContext rc, ExplicitBlock block, TypeSpec returnType)
+                       : this (rc.MemberContext, block, returnType)
+               {
+                       if (rc.IsUnsafe)
+                               flags |= ResolveContext.Options.UnsafeScope;
+
+                       if (rc.HasSet (ResolveContext.Options.CheckedScope))
+                               flags |= ResolveContext.Options.CheckedScope;
+               }
+
                public override FlowBranching CurrentBranching {
                        get { return current_flow_branching; }
                }
@@ -130,14 +142,14 @@ namespace Mono.CSharp
                        return branching;
                }
 
-               public FlowBranchingIterator StartFlowBranching (Iterator iterator)
+               public FlowBranchingIterator StartFlowBranching (Iterator iterator, FlowBranching parent)
                {
-                       FlowBranchingIterator branching = new FlowBranchingIterator (CurrentBranching, iterator);
+                       FlowBranchingIterator branching = new FlowBranchingIterator (parent, iterator);
                        current_flow_branching = branching;
                        return branching;
                }
 
-               public FlowBranchingToplevel StartFlowBranching (ToplevelBlock stmt, FlowBranching parent)
+               public FlowBranchingToplevel StartFlowBranching (ParametersBlock stmt, FlowBranching parent)
                {
                        FlowBranchingToplevel branching = new FlowBranchingToplevel (parent, stmt);
                        current_flow_branching = branching;
@@ -236,6 +248,8 @@ namespace Mono.CSharp
 
                        ConstructorScope = 1 << 11,
 
+                       UsingInitializerScope = 1 << 12,
+
                        /// <summary>
                        ///   Whether control flow analysis is enabled
                        /// </summary>
@@ -298,7 +312,7 @@ namespace Mono.CSharp
                        }
                }
 
-               Options flags;
+               protected Options flags;
 
                //
                // Whether we are inside an anonymous method.
@@ -411,7 +425,7 @@ namespace Mono.CSharp
                        return my_this;
                }
 
-               public bool MustCaptureVariable (LocalInfo local)
+               public bool MustCaptureVariable (INamedBlockVariable local)
                {
                        if (CurrentAnonymousMethod == null)
                                return false;
@@ -421,7 +435,7 @@ namespace Mono.CSharp
                        if (CurrentAnonymousMethod.IsIterator)
                                return true;
 
-                       return local.Block.Toplevel != CurrentBlock.Toplevel;
+                       return local.Block.ParametersBlock != CurrentBlock.ParametersBlock.Original;
                }
 
                public bool HasSet (Options options)
@@ -502,7 +516,6 @@ namespace Mono.CSharp
        public class CloneContext
        {
                Dictionary<Block, Block> block_map = new Dictionary<Block, Block> ();
-               Dictionary<LocalInfo, LocalInfo> variable_map;
 
                public void AddBlockMap (Block from, Block to)
                {
@@ -530,25 +543,6 @@ namespace Mono.CSharp
 
                        return mapped_to;
                }
-
-               public void AddVariableMap (LocalInfo from, LocalInfo to)
-               {
-                       if (variable_map == null)
-                               variable_map = new Dictionary<LocalInfo, LocalInfo> ();
-                       else if (variable_map.ContainsKey (from))
-                               return;
-
-                       variable_map[from] = to;
-               }
-
-               public LocalInfo LookupVariable (LocalInfo from)
-               {
-                       try {
-                               return variable_map[from];
-                       } catch (KeyNotFoundException) {
-                               throw new Exception ("LookupVariable: looking up a variable that has not been registered yet");
-                       }
-               }
        }
 
        //
@@ -558,11 +552,22 @@ namespace Mono.CSharp
        {
                readonly Report report;
                readonly ReflectionMetaImporter meta_importer;
+               readonly PredefinedAttributes attributes;
+               readonly GlobalRootNamespace root;
 
                public CompilerContext (ReflectionMetaImporter metaImporter, Report report)
                {
                        this.meta_importer = metaImporter;
                        this.report = report;
+
+                       this.attributes = new PredefinedAttributes ();
+                       this.root = new GlobalRootNamespace ();
+               }
+
+               public GlobalRootNamespace GlobalRootNamespace {
+                       get {
+                               return root;
+                       }
                }
 
                public bool IsRuntimeBinder { get; set; }
@@ -573,15 +578,17 @@ namespace Mono.CSharp
                        }
                }
 
+               public PredefinedAttributes PredefinedAttributes {
+                       get {
+                               return attributes;
+                       }
+               }
+
                public Report Report {
                        get {
                                return report;
                        }
                }
-
-               //public PredefinedAttributes PredefinedAttributes {
-               //    get { throw new NotImplementedException (); }
-               //}
        }
 
        //
index 73ad9f1ee94d2bfa56958cf573cd311faf68bab6..9330e8e6ca82aa50312e644c2b3640b71aa2e969 100644 (file)
@@ -129,7 +129,7 @@ namespace Mono.CSharp {
                        // From T to any interface implemented by C
                        //
                        var base_type = expr_type.GetEffectiveBase ();
-                       if (base_type == target_type || TypeSpec.IsBaseClass (base_type, target_type, false) || base_type.ImplementsInterface (target_type)) {
+                       if (base_type == target_type || TypeSpec.IsBaseClass (base_type, target_type, false) || base_type.ImplementsInterface (target_type, true)) {
                                if (expr_type.IsReferenceType)
                                        return new ClassCast (expr, target_type);
 
@@ -239,7 +239,7 @@ namespace Mono.CSharp {
 
                        // from any class-type S to any interface-type T.
                        if (target_type.IsInterface) {
-                               if (expr_type.ImplementsInterface (target_type)){
+                               if (expr_type.ImplementsInterface (target_type, true)){
                                        return !TypeManager.IsValueType (expr_type);
                                }
                        }
@@ -316,12 +316,15 @@ namespace Mono.CSharp {
                                return false;
                        }
 
+                       if (TypeSpecComparer.IsEqual (expr_type, target_type))
+                               return true;
+
                        if (TypeSpecComparer.Variant.IsEqual (expr_type, target_type))
                                return true;
 
                        // from any interface type S to interface-type T.
                        if (expr_type.IsInterface && target_type.IsInterface) {
-                               return expr_type.ImplementsInterface (target_type);
+                               return expr_type.ImplementsInterface (target_type, true);
                        }
 
                        // from any delegate type to System.Delegate
@@ -403,7 +406,7 @@ namespace Mono.CSharp {
 
                        // from any class-type S to any interface-type T.
                        if (target_type.IsInterface) {
-                               if (expr_type.ImplementsInterface (target_type) &&
+                               if (expr_type.ImplementsInterface (target_type, true) &&
                                        (TypeManager.IsGenericParameter (expr_type) || TypeManager.IsValueType (expr_type))) {
                                        return expr == null ? EmptyExpression.Null : new BoxedCast (expr, target_type);
                                }
@@ -436,7 +439,7 @@ namespace Mono.CSharp {
 
                        // conversion exists only mode
                        if (ec == null) {
-                               if (expr_type == t_el)
+                               if (TypeSpecComparer.IsEqual (expr_type, t_el))
                                        return EmptyExpression.Null;
 
                                if (expr is Constant)
@@ -452,7 +455,7 @@ namespace Mono.CSharp {
                                unwrap = expr;
 
                        Expression conv = unwrap;
-                       if (expr_type != t_el) {
+                       if (!TypeSpecComparer.IsEqual (expr_type, t_el)) {
                                if (conv is Constant)
                                        conv = ((Constant)conv).ConvertImplicitly (ec, t_el);
                                else
@@ -765,7 +768,7 @@ namespace Mono.CSharp {
                        // If `expr_type' implements `target_type' (which is an iface)
                        // see TryImplicitIntConversion
                        //
-                       if (target_type.IsInterface && expr_type.ImplementsInterface (target_type))
+                       if (target_type.IsInterface && expr_type.ImplementsInterface (target_type, true))
                                return true;
 
                        if (target_type == TypeManager.void_ptr_type && expr_type.IsPointer)
@@ -775,6 +778,9 @@ namespace Mono.CSharp {
                        if (expr_type == InternalType.Arglist)
                                return target_type == TypeManager.arg_iterator_type;
 
+                       if (TypeSpecComparer.IsEqual (expr_type, target_type))
+                               return true;
+
                        return false;
                }
 
@@ -855,27 +861,25 @@ namespace Mono.CSharp {
                        return best;
                }
 
-               /// <summary>
-               ///   Finds the most specific source Sx according to the rules of the spec (13.4.4)
-               ///   by making use of FindMostEncomp* methods. Applies the correct rules separately
-               ///   for explicit and implicit conversion operators.
-               /// </summary>
-               static TypeSpec FindMostSpecificSource (IList<MethodSpec> list,
-                                                          Expression source, bool apply_explicit_conv_rules)
+               //
+               // Finds the most specific source Sx according to the rules of the spec (13.4.4)
+               // by making use of FindMostEncomp* methods. Applies the correct rules separately
+               // for explicit and implicit conversion operators.
+               //
+               static TypeSpec FindMostSpecificSource (List<MethodSpec> list, TypeSpec sourceType, Expression source, bool apply_explicit_conv_rules)
                {
-                       var src_types_set = new List<TypeSpec> ();
+                       var src_types_set = new TypeSpec [list.Count];
 
                        //
-                       // If any operator converts from S then Sx = S
+                       // Try exact match first, if any operator converts from S then Sx = S
                        //
-                       TypeSpec source_type = source.Type;
-                       foreach (var mb in list){
-                               TypeSpec param_type = mb.Parameters.Types [0];
+                       for (int i = 0; i < src_types_set.Length; ++i) {
+                               TypeSpec param_type = list [i].Parameters.Types [0];
 
-                               if (param_type == source_type)
+                               if (param_type == sourceType)
                                        return param_type;
 
-                               src_types_set.Add (param_type);
+                               src_types_set [i] = param_type;
                        }
 
                        //
@@ -1044,22 +1048,22 @@ namespace Mono.CSharp {
                        List<MethodSpec> candidates = null;
 
                        //
-                       // If S or T are nullable types, S0 and T0 are their underlying types
-                       // otherwise S0 and T0 are equal to S and T respectively.
+                       // If S or T are nullable types, source_type and target_type are their underlying types
+                       // otherwise source_type and target_type are equal to S and T respectively.
                        //
                        TypeSpec source_type = source.Type;
                        TypeSpec target_type = target;
-                       Expression unwrap;
+                       Expression source_type_expr;
 
                        if (TypeManager.IsNullableType (source_type)) {
                                // No implicit conversion S? -> T for non-reference types
                                if (implicitOnly && !TypeManager.IsReferenceType (target_type) && !TypeManager.IsNullableType (target_type))
                                        return null;
 
-                               unwrap = source = Nullable.Unwrap.Create (source);
-                               source_type = source.Type;
+                               source_type_expr = Nullable.Unwrap.Create (source);
+                               source_type = source_type_expr.Type;
                        } else {
-                               unwrap = null;
+                               source_type_expr = source;
                        }
 
                        if (TypeManager.IsNullableType (target_type))
@@ -1073,13 +1077,13 @@ namespace Mono.CSharp {
 
                                var operators = MemberCache.GetUserOperator (source_type, Operator.OpType.Implicit, declared_only);
                                if (operators != null) {
-                                       FindApplicableUserDefinedConversionOperators (operators, source, target_type, implicitOnly, ref candidates);
+                                       FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, implicitOnly, ref candidates);
                                }
 
                                if (!implicitOnly) {
                                        operators = MemberCache.GetUserOperator (source_type, Operator.OpType.Explicit, declared_only);
                                        if (operators != null) {
-                                               FindApplicableUserDefinedConversionOperators (operators, source, target_type, false, ref candidates);
+                                               FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, false, ref candidates);
                                        }
                                }
                        }
@@ -1089,13 +1093,13 @@ namespace Mono.CSharp {
 
                                var operators = MemberCache.GetUserOperator (target_type, Operator.OpType.Implicit, declared_only);
                                if (operators != null) {
-                                       FindApplicableUserDefinedConversionOperators (operators, source, target_type, implicitOnly, ref candidates);
+                                       FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, implicitOnly, ref candidates);
                                }
 
                                if (!implicitOnly) {
                                        operators = MemberCache.GetUserOperator (target_type, Operator.OpType.Explicit, declared_only);
                                        if (operators != null) {
-                                               FindApplicableUserDefinedConversionOperators (operators, source, target_type, false, ref candidates);
+                                               FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, false, ref candidates);
                                        }
                                }
                        }
@@ -1113,7 +1117,11 @@ namespace Mono.CSharp {
                                s_x = most_specific_operator.Parameters.Types[0];
                                t_x = most_specific_operator.ReturnType;
                        } else {
-                               s_x = FindMostSpecificSource (candidates, source, !implicitOnly);
+                               //
+                               // Pass original source type to find best match against input type and
+                               // not the unwrapped expression
+                               //
+                               s_x = FindMostSpecificSource (candidates, source.Type, source_type_expr, !implicitOnly);
                                if (s_x == null)
                                        return null;
 
@@ -1134,10 +1142,13 @@ namespace Mono.CSharp {
                        //
                        // Convert input type when it's different to best operator argument
                        //
-                       if (s_x != source.Type)
+                       if (s_x != source_type)
                                source = implicitOnly ?
-                                       ImplicitConversionStandard (ec, source, s_x, loc) :
-                                       ExplicitConversionStandard (ec, source, s_x, loc);
+                                       ImplicitConversionStandard (ec, source_type_expr, s_x, loc) :
+                                       ExplicitConversionStandard (ec, source_type_expr, s_x, loc);
+                       else {
+                               source = source_type_expr;
+                       }
 
                        source = new UserCast (most_specific_operator, source, loc).Resolve (ec);
 
@@ -1157,10 +1168,11 @@ namespace Mono.CSharp {
                        }
 
                        //
-                       // Source expression is of nullable type, lift the result in case of it's null
+                       // Source expression is of nullable type, lift the result in the case it's null and
+                       // not nullable/lifted user operator is used
                        //
-                       if (unwrap != null && (TypeManager.IsReferenceType (target) || target_type != target))
-                               source = new Nullable.Lifted (source, unwrap, target).Resolve (ec);
+                       if (source_type_expr is Nullable.Unwrap && !TypeManager.IsNullableType (s_x) && (TypeManager.IsReferenceType (target) || target_type != target))
+                               source = new Nullable.Lifted (source, source_type_expr, target).Resolve (ec);
                        else if (target_type != target)
                                source = Nullable.Wrap.Create (source, target);
 
@@ -1328,6 +1340,9 @@ namespace Mono.CSharp {
                        if (expr_type == InternalType.Arglist && target_type == TypeManager.arg_iterator_type)
                                return expr;
 
+                       if (TypeSpecComparer.IsEqual (expr_type, target_type))
+                               return expr;
+
                        return null;
                }
 
@@ -1679,7 +1694,7 @@ namespace Mono.CSharp {
                        // sealed, or provided T implements S.
                        //
                        if (source_type.IsInterface) {
-                               if (!target_type.IsSealed || target_type.ImplementsInterface (source_type)) {
+                               if (!target_type.IsSealed || target_type.ImplementsInterface (source_type, true)) {
                                        if (target_type.IsClass)
                                                return source == null ? EmptyExpression.Null : new ClassCast (source, target_type);
 
@@ -1750,7 +1765,7 @@ namespace Mono.CSharp {
                        // From any class type S to any interface T, provides S is not sealed
                        // and provided S does not implement T.
                        //
-                       if (target_type.IsInterface && !source_type.IsSealed && !source_type.ImplementsInterface (target_type)) {
+                       if (target_type.IsInterface && !source_type.IsSealed && !source_type.ImplementsInterface (target_type, true)) {
                                return source == null ? EmptyExpression.Null : new ClassCast (source, target_type);
                        }
 
index 1c2b452b4f635db267c3075357ec602d0bb964c6..1be926db00f131b7ecde7d26432b7a8e5518bbf7 100644 (file)
@@ -57,6 +57,8 @@ namespace Mono.CSharp
                ///   them.  
                /// </summary>
                Block      current_block;
+               
+               BlockVariableDeclaration current_variable;
 
                Delegate   current_delegate;
                
@@ -78,11 +80,6 @@ namespace Mono.CSharp
                ///
                static Stack<object> oob_stack;
 
-               ///
-               /// Switch stack.
-               ///
-               Stack<Block> switch_stack;
-
                ///
                /// Controls the verbosity of the errors produced by the parser
                ///
@@ -138,7 +135,6 @@ namespace Mono.CSharp
                // be recursive
                //
                static List<Parameter> parameters_bucket = new List<Parameter> (6);
-               static List<object> variables_bucket = new List<object> (6);
                
                //
                // Full AST support members
@@ -255,11 +251,6 @@ namespace Mono.CSharp
 %token INTERR_NULLABLE
 %token EXTERN_ALIAS
 
-/* Generics <,> tokens */
-%token OP_GENERICS_LT
-%token OP_GENERICS_LT_DECL
-%token OP_GENERICS_GT
-
 /* C# keywords which are not really keywords */
 %token GET
 %token SET
@@ -319,6 +310,11 @@ namespace Mono.CSharp
 %token OP_PTR
 %token OP_COALESCING
 
+/* Generics <,> tokens */
+%token OP_GENERICS_LT
+%token OP_GENERICS_LT_DECL
+%token OP_GENERICS_GT
+
 %token LITERAL
 
 %token IDENTIFIER
@@ -447,8 +443,9 @@ using_alias_directive
                var lt = (Tokenizer.LocatedToken) $2;
                current_namespace.AddUsingAlias (lt.Value, (MemberName) $4, GetLocation ($1));
          }
-       | USING error {
-               CheckIdentifierToken (yyToken, GetLocation ($2));
+       | USING error
+        {
+               Error_SyntaxError (yyToken);
                $$ = null;
          }
        ;
@@ -474,7 +471,7 @@ namespace_declaration
                        Report.Error(1671, name.Location, "A namespace declaration cannot have modifiers or attributes");
                }
 
-               current_namespace = new NamespaceEntry (
+               current_namespace = new NamespaceEntry (compiler,
                        current_namespace, file, name.GetName ());
                current_class = current_namespace.SlaveDeclSpace;
                current_container = current_class.PartialContainer;
@@ -545,7 +542,6 @@ namespace_body_body
          {
                Report.Error (1518, lexer.Location, "Expected `class', `delegate', `enum', `interface', or `struct'");
          }
-         CLOSE_BRACE
        | opt_extern_alias_directives
          opt_using_directives
          opt_namespace_member_declarations
@@ -956,8 +952,9 @@ struct_declaration
                lbag.AppendToMember (current_class, GetLocation ($13));
                $$ = pop_current_class ();
          }
-       | opt_attributes opt_modifiers opt_partial STRUCT error {
-               CheckIdentifierToken (yyToken, GetLocation ($5));
+       | opt_attributes opt_modifiers opt_partial STRUCT error
+         {
+               Error_SyntaxError (yyToken);
          }
        ;
 
@@ -1145,11 +1142,15 @@ opt_field_initializer
        | ASSIGN
          {
                ++lexer.parsing_block;
+               current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
+               start_block (GetLocation ($1));
          }
          variable_initializer
          {
                --lexer.parsing_block;
                current_field.Initializer = (Expression) $3;
+               end_block (lexer.Location);
+               current_local_parameters = null;
          }
        ;
        
@@ -1231,72 +1232,18 @@ fixed_field_size
                $$ = null;
          }       
        ;
-       
-local_variable_declarators     
-       : local_variable_declarator 
-         {
-               variables_bucket.Clear ();
-               if ($1 != null)
-                       variables_bucket.Add ($1);
-               $$ = variables_bucket;
-         }
-       | local_variable_declarators COMMA local_variable_declarator
-         {
-               var decls = (List<object>) $1;
-               decls.Add ($3);
-               lbag.AppendTo ($3, GetLocation ($2));
-               $$ = $1;
-         }
-       ;
-       
-local_variable_declarator
-       : IDENTIFIER ASSIGN local_variable_initializer
-         {
-               $$ = new VariableDeclaration ((Tokenizer.LocatedToken) $1, (Expression) $3);
-               lbag.AddLocation ($$, GetLocation ($2));
-         }
-       | IDENTIFIER
-         {
-               $$ = new VariableDeclaration ((Tokenizer.LocatedToken) $1, null);
-         }
-       | IDENTIFIER variable_bad_array
-         {
-               $$ = null;
-         }
-       ;
 
-local_variable_initializer
+variable_initializer
        : expression
        | array_initializer
-       | STACKALLOC simple_type OPEN_BRACKET_EXPR expression CLOSE_BRACKET
-         {
-               $$ = new StackAlloc ((Expression) $2, (Expression) $4, GetLocation ($1));
-               lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5));
-         }
-       | ARGLIST
-         {
-               $$ = new ArglistAccess (GetLocation ($1));
-         }
-       | STACKALLOC simple_type
-         {
-               Report.Error (1575, GetLocation ($1), "A stackalloc expression requires [] after type");
-               $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1));          
-         }
-       ;
-
-variable_bad_array
-       : OPEN_BRACKET_EXPR opt_expression CLOSE_BRACKET
+       | error
          {
-               Report.Error (650, GetLocation ($1), "Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. " +
-                       "To declare a fixed size buffer field, use the fixed keyword before the field type");
+               // It has to be here for the parent to safely restore artificial block
+               Error_SyntaxError (yyToken);
+               $$ = null;
          }
        ;
 
-variable_initializer
-       : expression
-       | array_initializer
-       ;
-
 method_declaration
        : method_header {
                if (RootContext.Documentation != null)
@@ -1461,29 +1408,29 @@ opt_formal_parameter_list
        
 formal_parameter_list
        : fixed_parameters
-         { 
+         {
                var pars_list = (List<Parameter>) $1;
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray ());
+               $$ = new ParametersCompiled (pars_list.ToArray ());
          } 
        | fixed_parameters COMMA parameter_array
          {
                var pars_list = (List<Parameter>) $1;
                pars_list.Add ((Parameter) $3);
 
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray ()); 
+               $$ = new ParametersCompiled (pars_list.ToArray ()); 
          }
        | fixed_parameters COMMA arglist_modifier
          {
                var pars_list = (List<Parameter>) $1;
                pars_list.Add (new ArglistParameter (GetLocation ($3)));
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray (), true);
+               $$ = new ParametersCompiled (pars_list.ToArray (), true);
          }
        | parameter_array COMMA error
          {
                if ($1 != null)
                        Report.Error (231, ((Parameter) $1).Location, "A params parameter must be the last parameter in a formal parameter list");
 
-               $$ = new ParametersCompiled (compiler, new Parameter[] { (Parameter) $1 } );                    
+               $$ = new ParametersCompiled (new Parameter[] { (Parameter) $1 } );                      
          }
        | fixed_parameters COMMA parameter_array COMMA error
          {
@@ -1493,13 +1440,13 @@ formal_parameter_list
                var pars_list = (List<Parameter>) $1;
                pars_list.Add (new ArglistParameter (GetLocation ($3)));
 
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray (), true);
+               $$ = new ParametersCompiled (pars_list.ToArray (), true);
          }
        | arglist_modifier COMMA error
          {
                Report.Error (257, GetLocation ($1), "An __arglist parameter must be the last parameter in a formal parameter list");
 
-               $$ = new ParametersCompiled (compiler, new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true);
+               $$ = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true);
          }
        | fixed_parameters COMMA ARGLIST COMMA error 
          {
@@ -1508,15 +1455,20 @@ formal_parameter_list
                var pars_list = (List<Parameter>) $1;
                pars_list.Add (new ArglistParameter (GetLocation ($3)));
 
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray (), true);
+               $$ = new ParametersCompiled (pars_list.ToArray (), true);
          }
        | parameter_array 
          {
-               $$ = new ParametersCompiled (compiler, new Parameter[] { (Parameter) $1 } );
+               $$ = new ParametersCompiled (new Parameter[] { (Parameter) $1 } );
          }
        | arglist_modifier
          {
-               $$ = new ParametersCompiled (compiler, new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true);
+               $$ = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true);
+         }
+       | error
+         {
+               Error_SyntaxError (yyToken);
+               $$ = ParametersCompiled.EmptyReadOnlyParameters;
          }
        ;
 
@@ -1573,8 +1525,8 @@ fixed_parameter
          parameter_type
          error
          {
+               Error_SyntaxError (yyToken);      
                Location l = GetLocation ($4);
-               CheckIdentifierToken (yyToken, l);
                $$ = new Parameter ((FullNamedExpression) $3, "NeedSomeGeneratorHere", (Parameter.Modifier) $2, (Attributes) $1, l);
          }
        | opt_attributes
@@ -1699,7 +1651,7 @@ parameter_array
          }
        | opt_attributes params_modifier type error
          {
-               CheckIdentifierToken (yyToken, GetLocation ($4));
+               Error_SyntaxError (yyToken);
                $$ = null;
          }
        ;
@@ -1977,8 +1929,9 @@ interface_declaration
            lbag.AppendToMember (current_class, GetLocation ($11), GetLocation ($13));
                $$ = pop_current_class ();
          }
-       | opt_attributes opt_modifiers opt_partial INTERFACE error {
-               CheckIdentifierToken (yyToken, GetLocation ($5));
+       | opt_attributes opt_modifiers opt_partial INTERFACE error
+         {
+               Error_SyntaxError (yyToken);      
          }
        ;
 
@@ -2794,7 +2747,7 @@ type_declaration_name
          {
                lexer.parsing_generic_declaration = false;
                var lt = (Tokenizer.LocatedToken) $1;
-               $$ = new MemberName (lt.Value, (TypeArguments)$3, lt.Location);   
+               $$ = new MemberName (lt.Value, (TypeArguments)$3, lt.Location);
          }
        ;
 
@@ -2987,7 +2940,7 @@ type_expression
        | VOID pointer_stars
          {
                $$ = new ComposedCast (new TypeExpression (TypeManager.void_type, GetLocation ($1)), (ComposedTypeSpecifier) $2);
-         }     
+         }
        ;
 
 type_list
@@ -3070,7 +3023,7 @@ primary_expression
        | checked_expression
        | unchecked_expression
        | pointer_member_access
-       | anonymous_method_expression   
+       | anonymous_method_expression
        ;
 
 primary_expression_or_type
@@ -3349,10 +3302,6 @@ non_simple_argument
                $$ = new Argument (new Arglist (GetLocation ($1)));
                lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3));
          }       
-       | ARGLIST
-         {
-               $$ = new Argument (new ArglistAccess (GetLocation ($1)));
-         }
        ;
 
 variable_reference
@@ -3630,13 +3579,17 @@ opt_array_initializer
 array_initializer
        : OPEN_BRACE CLOSE_BRACE
          {
-               $$ = new ArrayInitializer (0, GetLocation ($1));
-               lbag.AddLocation ($$, GetLocation ($2));
+               var ai = new ArrayInitializer (0, GetLocation ($1));
+               ai.VariableDeclaration = current_variable;
+               lbag.AddLocation (ai, GetLocation ($2));
+               $$ = ai;
          }
        | OPEN_BRACE variable_initializer_list opt_comma CLOSE_BRACE
          {
-               $$ = new ArrayInitializer ((List<Expression>) $2, GetLocation ($1));
-               lbag.AddLocation ($$, GetLocation ($3));
+               var ai = new ArrayInitializer ((List<Expression>) $2, GetLocation ($1));
+               ai.VariableDeclaration = current_variable;
+               lbag.AddLocation (ai, GetLocation ($3));
+               $$ = ai;
          }
        ;
 
@@ -3653,11 +3606,6 @@ variable_initializer_list
                list.Add ((Expression) $3);
                $$ = list;
          }
-       | error
-         {
-               Error_SyntaxError (yyToken);
-               $$ = new List<Expression> ();
-         }
        ;
 
 typeof_expression
@@ -3782,8 +3730,8 @@ anonymous_method_expression
          }
          block
          {
-               $$ = end_anonymous ((ToplevelBlock) $4);
-       }
+               $$ = end_anonymous ((ParametersBlock) $4);
+         }
        ;
 
 opt_anonymous_method_signature
@@ -3836,11 +3784,6 @@ cast_expression
                $$ = new Cast ((FullNamedExpression) $2, (Expression) $4, GetLocation ($1));
                lbag.AddLocation ($$, GetLocation ($3));
          }
-       | OPEN_PARENS builtin_types CLOSE_PARENS prefixed_unary_expression
-         {
-               $$ = new Cast ((FullNamedExpression) $2, (Expression) $4, GetLocation ($1));
-               lbag.AddLocation ($$, GetLocation ($3));
-         }
        ;
 
        //
@@ -4139,7 +4082,7 @@ opt_lambda_parameter_list
        : /* empty */                   { $$ = ParametersCompiled.EmptyReadOnlyParameters; }
        | lambda_parameter_list         { 
                var pars_list = (List<Parameter>) $1;
-               $$ = new ParametersCompiled (compiler, pars_list.ToArray ());
+               $$ = new ParametersCompiled (pars_list.ToArray ());
          }
        ;
 
@@ -4153,7 +4096,8 @@ lambda_expression_body
                b.AddStatement (new ContextualReturn ((Expression) $2));
                $$ = b;
          } 
-       | block { 
+       | block
+         { 
                $$ = $1; 
          } 
        ;
@@ -4163,11 +4107,11 @@ lambda_expression
          {
                var lt = (Tokenizer.LocatedToken) $1;
                Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location);
-               start_anonymous (true, new ParametersCompiled (compiler, p), GetLocation ($1));
+               start_anonymous (true, new ParametersCompiled (p), GetLocation ($1));
          }
          lambda_expression_body
          {
-               $$ = end_anonymous ((ToplevelBlock) $4);
+               $$ = end_anonymous ((ParametersBlock) $4);
                lbag.AddLocation ($$, GetLocation ($2));
          }
        | OPEN_PARENS_LAMBDA
@@ -4184,20 +4128,24 @@ lambda_expression
          }
          lambda_expression_body 
          {
-               $$ = end_anonymous ((ToplevelBlock) $7);
+               $$ = end_anonymous ((ParametersBlock) $7);
                lbag.AddLocation ($$, GetLocation ($3), GetLocation ($4));
          }
        ;
 
 expression
        : assignment_expression 
-       | non_assignment_expression 
+       | non_assignment_expression
        ;
        
 non_assignment_expression
        : conditional_expression
        | lambda_expression
-       | query_expression 
+       | query_expression
+       | ARGLIST
+         {
+               $$ = new ArglistAccess (GetLocation ($1));
+         }     
        ;
 
 constant_expression
@@ -4376,7 +4324,7 @@ opt_class_base
        ;
 
 opt_type_parameter_constraints_clauses
-       : /* empty */           { $$ = null; }
+       : /* empty */
        | type_parameter_constraints_clauses 
          {
                $$ = $1;
@@ -4561,18 +4509,20 @@ statement_list
        ;
 
 statement
-       : declaration_statement
+       : block_variable_declaration
          {
-               if ($1 != null && (Block) $1 != current_block){
-                       current_block.AddStatement ((Statement) $1);
-                       current_block = (Block) $1;
-               }
+               current_block.AddStatement ((Statement) $1);
          }
        | valid_declaration_statement
          {
                current_block.AddStatement ((Statement) $1);
          }
        | labeled_statement
+       | error
+         {
+               Error_SyntaxError (yyToken);
+               $$ = null;
+         }
        ;
 
 //
@@ -4587,12 +4537,9 @@ interactive_statement_list
        ;
 
 interactive_statement
-       : declaration_statement
+       : block_variable_declaration
          {
-               if ($1 != null && (Block) $1 != current_block){
-                       current_block.AddStatement ((Statement) $1);
-                       current_block = (Block) $1;
-               }
+               current_block.AddStatement ((Statement) $1);
          }
        | interactive_valid_declaration_statement
          {
@@ -4635,7 +4582,7 @@ interactive_valid_declaration_statement
 
 embedded_statement
        : valid_declaration_statement
-       | declaration_statement
+       | block_variable_declaration
          {
                  Report.Error (1023, GetLocation ($1), "An embedded statement may not be a declaration or labeled statement");
                  $$ = null;
@@ -4645,6 +4592,11 @@ embedded_statement
                  Report.Error (1023, GetLocation ($1), "An embedded statement may not be a declaration or labeled statement");
                  $$ = null;
          }
+       | error
+         {
+               Error_SyntaxError (yyToken);
+               $$ = new EmptyStatement (GetLocation ($1));
+         }
        ;
 
 empty_statement
@@ -4658,33 +4610,14 @@ labeled_statement
        : IDENTIFIER COLON 
          {
                var lt = (Tokenizer.LocatedToken) $1;
-               LabeledStatement labeled = new LabeledStatement (lt.Value, lt.Location);
+               LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location);
 
-               if (current_block.AddLabel (labeled))
-                       current_block.AddStatement (labeled);
+               current_block.AddLabel (labeled);
+               current_block.AddStatement (labeled);
          }
          statement
        ;
 
-declaration_statement
-       : local_variable_declaration SEMICOLON
-         {
-               if ($1 != null){
-                       var de = (Tuple<FullNamedExpression, List<object>>) $1;
-                       $$ = declare_local_variables (de.Item1, de.Item2, de.Item1.Location);
-               }
-         }
-
-       | local_constant_declaration SEMICOLON
-         {
-               if ($1 != null){
-                       var de = (Tuple<FullNamedExpression, List<object>>) $1;
-
-                       $$ = declare_local_constants (de.Item1, de.Item2);
-               }
-         }
-       ;
-
 variable_type
        : variable_type_simple
        | variable_type_simple rank_specifiers
@@ -4782,60 +4715,128 @@ pointer_star
          }
        ;
 
-local_variable_declaration
-       : variable_type local_variable_declarators
+block_variable_declaration
+       : variable_type IDENTIFIER
          {
-               if ($1 != null) {
-                       VarExpr ve = $1 as VarExpr;
-                       if (ve != null) {
-                               if (!((VariableDeclaration) ((List<object>)$2) [0]).HasInitializer)
-                                       ve.VariableInitializersCount = 0;
-                               else
-                                       ve.VariableInitializersCount = ((List<object>)$2).Count;
-                       }
-                               
-                       $$ = new Tuple<FullNamedExpression, List<object>> ((FullNamedExpression) $1, (List<object>) $2);
-               } else
-                       $$ = null;
+               var lt = (Tokenizer.LocatedToken) $2;
+               var li = new LocalVariable (current_block, lt.Value, lt.Location);
+               current_block.AddLocalName (li);
+               current_variable = new BlockVariableDeclaration ((FullNamedExpression) $1, li);
          }
-       ;
-
-local_constant_declaration
-       : CONST variable_type local_constant_declarators
+         opt_local_variable_initializer opt_variable_declarators SEMICOLON
          {
-               if ($2 != null)
-                       $$ = new Tuple<FullNamedExpression, List<object>> ((FullNamedExpression) $2, (List<object>) $3);
-               else
-                       $$ = null;
+               $$ = current_variable;
+               current_variable = null;
+               lbag.AddLocation ($$, GetLocation ($6));
+         }
+       | CONST variable_type IDENTIFIER
+         {
+               var lt = (Tokenizer.LocatedToken) $3;
+               var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location);
+               current_block.AddLocalName (li);
+               current_variable = new BlockConstantDeclaration ((FullNamedExpression) $2, li);
+         }
+         const_variable_initializer opt_const_declarators SEMICOLON
+         {
+               $$ = current_variable;
+               current_variable = null;
+               lbag.AddLocation ($$, GetLocation ($1), GetLocation ($7));
          }
        ;
-       
-local_constant_declarators
-       : local_constant_declarator 
+
+opt_local_variable_initializer
+       : /* empty */
+       | ASSIGN block_variable_initializer
          {
-               variables_bucket.Clear ();
-               if ($1 != null)
-                       variables_bucket.Add ($1);
-               $$ = variables_bucket;
+               current_variable.Initializer = (Expression) $2;
+               // TODO: lbag
          }
-       | local_constant_declarators COMMA local_constant_declarator
+       | error
          {
-               if ($3 != null) {
-                       var constants = (List<object>) $1;
-                       constants.Add ($3);
+               if (yyToken == Token.OPEN_BRACKET_EXPR) {
+                       Report.Error (650, lexer.Location,
+                               "Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type");
+               } else {
+                       Error_SyntaxError (yyToken);
                }
          }
        ;
 
-local_constant_declarator
-       : IDENTIFIER ASSIGN constant_initializer_expr
+opt_variable_declarators
+       : /* empty */
+       | variable_declarators
+       ;
+       
+variable_declarators
+       : variable_declarator
+       | variable_declarators variable_declarator
+       ;
+       
+variable_declarator
+       : COMMA IDENTIFIER
          {
-               $$ = new VariableDeclaration ((Tokenizer.LocatedToken) $1, (Expression) $3);
+               var lt = (Tokenizer.LocatedToken) $2;     
+               var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location);
+               var d = new BlockVariableDeclaration.Declarator (li, null);
+               current_variable.AddDeclarator (d);
+               current_block.AddLocalName (li);
+               lbag.AddLocation (d, GetLocation ($1));
          }
-       | IDENTIFIER error
+       | COMMA IDENTIFIER ASSIGN block_variable_initializer
          {
-               Report.Error (145, GetLocation ($1), "A const field requires a value to be provided");
-               $$ = null;
+               var lt = (Tokenizer.LocatedToken) $2;     
+               var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location);
+               var d = new BlockVariableDeclaration.Declarator (li, (Expression) $4);
+               current_variable.AddDeclarator (d);
+               current_block.AddLocalName (li);
+               lbag.AddLocation (d, GetLocation ($1), GetLocation ($3));
+         }
+       ;
+       
+const_variable_initializer
+       : /* empty */
+         {
+               Report.Error (145, lexer.Location, "A const field requires a value to be provided");
+         }
+       | ASSIGN constant_initializer_expr 
+         {
+               current_variable.Initializer = (Expression) $2;
+         }
+       ;
+       
+opt_const_declarators
+       : /* empty */
+       | const_declarators
+       ;
+       
+const_declarators
+       : const_declarator
+       | const_declarators const_declarator
+       ;
+       
+const_declarator
+       : COMMA IDENTIFIER ASSIGN constant_initializer_expr
+         {
+               var lt = (Tokenizer.LocatedToken) $2;     
+               var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location);
+               var d = new BlockVariableDeclaration.Declarator (li, (Expression) $4);
+               current_variable.AddDeclarator (d);
+               current_block.AddLocalName (li);
+               lbag.AddLocation (d, GetLocation ($1), GetLocation ($3));
+         }
+       ;
+       
+block_variable_initializer
+       : variable_initializer
+       | STACKALLOC simple_type OPEN_BRACKET_EXPR expression CLOSE_BRACKET
+         {
+               $$ = new StackAlloc ((Expression) $2, (Expression) $4, GetLocation ($1));
+               lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5));
+         }
+       | STACKALLOC simple_type
+         {
+               Report.Error (1575, GetLocation ($1), "A stackalloc expression requires [] after type");
+               $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1));          
          }
        ;
 
@@ -4868,11 +4869,6 @@ statement_expression
 
                $$ = new StatementExpression (s);
          }
-       | error
-         {
-               Error_SyntaxError (yyToken);
-               $$ = null;
-         }
        ;
 
 interactive_statement_expression
@@ -4901,7 +4897,7 @@ if_statement
          embedded_statement
          { 
                if ($5 is EmptyStatement)
-                       Report.Warning (642, 3, GetLocation ($5), "Possible mistaken empty statement");
+                       Warning_EmptyStatement (GetLocation ($5));
                
                $$ = new If ((BooleanExpression) $3, (Statement) $5, GetLocation ($1));
                lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
@@ -4913,33 +4909,29 @@ if_statement
                lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4), GetLocation ($6));
                
                if ($5 is EmptyStatement)
-                       Report.Warning (642, 3, GetLocation ($5), "Possible mistaken empty statement");
+                       Warning_EmptyStatement (GetLocation ($5));
                if ($7 is EmptyStatement)
-                       Report.Warning (642, 3, GetLocation ($7), "Possible mistaken empty statement");
+                       Warning_EmptyStatement (GetLocation ($7));
          }
        ;
 
 switch_statement
-       : SWITCH open_parens_any
-         { 
-               if (switch_stack == null)
-                       switch_stack = new Stack<Block> (2);
-               switch_stack.Push (current_block);
+       : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE
+         {
+               start_block (GetLocation ($5));
          }
-         expression CLOSE_PARENS 
-         OPEN_BRACE opt_switch_sections CLOSE_BRACE
+         opt_switch_sections CLOSE_BRACE
          {
-               $$ = new Switch ((Expression) $4, (List<SwitchSection>) $7, GetLocation ($1));
-               lbag.AddStatement ($$, GetLocation ($2), GetLocation ($5), GetLocation ($6), GetLocation ($8));
-               
-               current_block = (Block) switch_stack.Pop ();
+               $$ = new Switch ((Expression) $3, (ExplicitBlock) current_block.Explicit, (List<SwitchSection>) $7, GetLocation ($1));  
+               end_block (GetLocation ($8));
+               lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
          }
        ;
 
 opt_switch_sections
        : /* empty */           
       {
-               Report.Warning (1522, 1, lexer.Location, "Empty switch block"); 
+               Report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); 
                $$ = new List<SwitchSection> ();
          }
        | switch_sections
@@ -4960,6 +4952,11 @@ switch_sections
                sections.Add ((SwitchSection) $2);
                $$ = sections;
          }
+       | error
+         {
+               Error_SyntaxError (yyToken);      
+               $$ = new List<SwitchSection> ();
+         } 
        ;
 
 switch_section
@@ -4969,7 +4966,7 @@ switch_section
          }
          statement_list 
          {
-               $$ = new SwitchSection ((List<SwitchLabel>) $1, current_block.Explicit);
+               $$ = new SwitchSection ((List<SwitchLabel>) $1, current_block);
          }
        ;
 
@@ -5012,6 +5009,9 @@ iteration_statement
 while_statement
        : WHILE open_parens_any boolean_expression CLOSE_PARENS embedded_statement
          {
+               if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($5));
+         
                $$ = new While ((BooleanExpression) $3, (Statement) $5, GetLocation ($1));
                lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
          }
@@ -5027,54 +5027,25 @@ do_statement
        ;
 
 for_statement
-       : FOR open_parens_any opt_for_initializer SEMICOLON
+       : FOR open_parens_any
          {
-               Location l = lexer.Location;
-               start_block (l);  
-               Block assign_block = current_block;
-
-               if ($3 is Tuple<FullNamedExpression, List<object>>){
-                       var de = (Tuple<FullNamedExpression, List<object>>) $3;
-                       
-                       var type = de.Item1;
-
-                       foreach (VariableDeclaration decl in de.Item2){
-
-                               LocalInfo vi;
-
-                               vi = current_block.AddVariable (type, decl.identifier, decl.Location);
-                               if (vi == null)
-                                       continue;
-
-                               Expression expr = decl.GetInitializer (type);
-                                       
-                               LocalVariableReference var;
-                               var = new LocalVariableReference (assign_block, decl.identifier, l);
-
-                               if (expr != null) {
-                                       Assign a = new SimpleAssign (var, expr, decl.Location);
-                                       
-                                       assign_block.AddStatement (new StatementExpression (a));
-                               }
-                       }
-                       
-                       // Note: the $$ below refers to the value of this code block, not of the LHS non-terminal.
-                       // This can be referred to as $5 below.
-                       $$ = null;
-               } else {
-                       $$ = $3;
-               }
-         } 
+               start_block (GetLocation ($2));
+               current_block.IsCompilerGenerated = true;
+         }
+         opt_for_initializer SEMICOLON
          opt_for_condition SEMICOLON
          opt_for_iterator CLOSE_PARENS 
          embedded_statement
          {
-               For f = new For ((Statement) $5, (BooleanExpression) $6, (Statement) $8, (Statement) $10, GetLocation ($1));
+               if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($10));
+         
+               For f = new For ((Statement) $4, (BooleanExpression) $6, (Statement) $8, (Statement) $10, GetLocation ($1));
                current_block.AddStatement (f);
                
-               lbag.AddStatement (f, GetLocation ($2), GetLocation ($4), GetLocation ($7), GetLocation ($9));
+               lbag.AddStatement (f, GetLocation ($2), GetLocation ($5), GetLocation ($7), GetLocation ($9));
 
-               $$ = end_block (lexer.Location);
+               $$ = end_block (GetLocation ($5));
          }
        ;
 
@@ -5084,7 +5055,18 @@ opt_for_initializer
        ;
 
 for_initializer
-       : local_variable_declaration
+       : variable_type IDENTIFIER
+         {
+               var lt = (Tokenizer.LocatedToken) $2;
+               var li = new LocalVariable (current_block, lt.Value, lt.Location);
+               current_block.AddLocalName (li);
+               current_variable = new BlockVariableDeclaration ((FullNamedExpression) $1, li);
+         }
+         opt_local_variable_initializer opt_variable_declarators
+         {
+               $$ = current_variable;
+               current_variable = null;
+         }
        | statement_expression_list
        ;
 
@@ -5107,12 +5089,14 @@ statement_expression_list
        | statement_expression_list COMMA statement_expression
          {
                var sl = $1 as StatementList;
-               if (sl == null)
+               if (sl == null) {
                        sl = new StatementList ((Statement) $1, (Statement) $3);
-               else
+                       lbag.AddStatement (sl, GetLocation ($2));
+               } else {
                        sl.Add ((Statement) $3);
+                       lbag.AppendTo (sl, GetLocation ($2));
+               }
                        
-               lbag.AddStatement (sl, GetLocation ($2));
                $$ = sl;
          }
        ;
@@ -5123,37 +5107,26 @@ foreach_statement
                Report.Error (230, GetLocation ($1), "Type and identifier are both required in a foreach statement");
                $$ = null;
          }
-       | FOREACH open_parens_any type IDENTIFIER IN
-         expression CLOSE_PARENS 
+       | FOREACH open_parens_any type IDENTIFIER IN expression CLOSE_PARENS 
          {
-               start_block (lexer.Location);
-               Block foreach_block = current_block;
-
+               start_block (GetLocation ($2));
+               current_block.IsCompilerGenerated = true;
+               
                var lt = (Tokenizer.LocatedToken) $4;
-               Location l = lt.Location;
-               LocalInfo vi = foreach_block.AddVariable ((Expression) $3, lt.Value, l);
-               if (vi != null) {
-                       vi.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Foreach);
-
-                       // Get a writable reference to this read-only variable.
-                       //
-                       // Note that the $$ here refers to the value of _this_ code block,
-                       // not the value of the LHS non-terminal.  This can be referred to as $8 below.
-                       $$ = new LocalVariableReference (foreach_block, lt.Value, l, vi, false);
-               } else {
-                       $$ = null;
-               }
+               var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location);
+               current_block.AddLocalName (li);
+               $$ = li;
          } 
-         embedded_statement 
+         embedded_statement
          {
-               if ($8 != null) {
-                       Foreach f = new Foreach ((Expression) $3, (LocalVariableReference) $8, (Expression) $6, (Statement) $9, GetLocation ($1));
-                       lbag.AddStatement (f, GetLocation ($2), GetLocation ($5), GetLocation ($7));
-                       
-                       current_block.AddStatement (f);
-               }
-
-               $$ = end_block (lexer.Location);
+               if ($9 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($9));
+         
+               Foreach f = new Foreach ((Expression) $3, (LocalVariable) $8, (Expression) $6, (Statement) $9, GetLocation ($1));
+               current_block.AddStatement (f);
+               
+               lbag.AddStatement (f, GetLocation ($2), GetLocation ($5), GetLocation ($7));
+               $$ = end_block (GetLocation ($7));
          }
        ;
 
@@ -5230,7 +5203,7 @@ yield_statement
                        Report.FeatureIsNotAvailable (lt.Location, "iterators");
                }
                
-               current_block.Toplevel.IsIterator = true;
+               current_block.ParametersBlock.TopBlock.IsIterator = true;
                $$ = new Yield ((Expression) $3, lt.Location);
                lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
          }
@@ -5244,7 +5217,7 @@ yield_statement
                        Report.FeatureIsNotAvailable (lt.Location, "iterators");
                }
                
-               current_block.Toplevel.IsIterator = true;
+               current_block.ParametersBlock.TopBlock.IsIterator = true;
                $$ = new YieldBreak (lt.Location);
                lbag.AddStatement ($$, GetLocation ($2), GetLocation ($3));
          }
@@ -5304,63 +5277,44 @@ catch_clauses
        ;
 
 opt_identifier
-       : /* empty */   { $$ = null; }
+       : /* empty */
        | IDENTIFIER
        ;
 
 catch_clause 
-       : CATCH opt_catch_args 
+       : CATCH block
          {
-               if ($2 != null) {
-                       var cc = (Tuple<FullNamedExpression, Tokenizer.LocatedToken>) $2;
-                       var lt = cc.Item2;
-
-                       if (lt != null){
-                               List<object> one = new List<object> (1);
-
-                               one.Add (new VariableDeclaration (lt, null));
+               $$ = new Catch ((Block) $2, GetLocation ($1));
+         }
+       | CATCH open_parens_any type opt_identifier CLOSE_PARENS
+         {
+               start_block (GetLocation ($2));
+               var c = new Catch (current_block, GetLocation ($1));
+               c.TypeExpression = (FullNamedExpression) $3;
 
-                               start_block (lexer.Location);
-                               current_block = declare_local_variables (cc.Item1, one, lt.Location);
-                       }
-               }
-         } block {
-               Expression type = null;
-               string id = null;
-               Block var_block = null;
-
-               if ($2 != null){
-                       var cc = (Tuple<FullNamedExpression, Tokenizer.LocatedToken>) $2;
-                       type = cc.Item1;
-                       var lt = cc.Item2;
-
-                       if (lt != null){
-                               id = lt.Value;
-                               var_block = end_block (lexer.Location);
-                       }
+               if ($4 != null) {
+                       var lt = (Tokenizer.LocatedToken) $4;
+                       c.Variable = new LocalVariable (current_block, lt.Value, lt.Location);
+                       current_block.AddLocalName (c.Variable);
                }
-
-               $$ = new Catch (type, id, (Block) $4, var_block, ((Block) $4).loc);
-               lbag.AddLocation ($$, GetLocation ($1));
-               lbag.AppendTo ($$, lbag.GetLocations ($2));
+               
+               lbag.AddLocation (c, GetLocation ($2), GetLocation ($5));
+               $$ = c;
          }
-        ;
-
-opt_catch_args
-       : /* empty */ { $$ = null; }
-       | catch_args
-       ;         
-
-catch_args 
-       : open_parens_any type opt_identifier CLOSE_PARENS 
+         block_prepared
          {
-               $$ = new Tuple<FullNamedExpression, Tokenizer.LocatedToken> ((FullNamedExpression)$2, (Tokenizer.LocatedToken) $3);
-               lbag.AddLocation ($$, GetLocation ($1), GetLocation ($4));
+               $$ = $6;
          }
-       | open_parens_any CLOSE_PARENS 
+       | CATCH open_parens_any error
          {
-               Report.Error (1015, GetLocation ($1), "A type that derives from `System.Exception', `object', or `string' expected");
-               $$ = null;
+               if (yyToken == Token.CLOSE_PARENS) {
+                       Report.Error (1015, lexer.Location,
+                               "A type that derives from `System.Exception', `object', or `string' expected");
+               } else {
+                       Error_SyntaxError (yyToken);
+               }
+               
+               $$ = new Catch (null, GetLocation ($1));
          }
        ;
 
@@ -5388,139 +5342,89 @@ unsafe_statement
          }
        ;
 
-fixed_statement
-       : FIXED open_parens_any 
-         type_and_void fixed_pointer_declarators 
-         CLOSE_PARENS
-         {
-               start_block (lexer.Location);
-         }
-         embedded_statement 
+lock_statement
+       : LOCK open_parens_any expression CLOSE_PARENS embedded_statement
          {
-               Expression type = (Expression) $3;
-               var list = (List<KeyValuePair<Tokenizer.LocatedToken, Expression>>) $4;
-               Fixed f = new Fixed (type,
-                       list.ConvertAll (i => {
-                               var v = new KeyValuePair<LocalInfo, Expression> (current_block.AddVariable (type, i.Key.Value, i.Key.Location), i.Value);
-                               if (v.Key != null) {
-                                       v.Key.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Fixed);
-                                       v.Key.Pinned = true;
-                               }
-                               return v;
-                       }), (Statement) $7, GetLocation ($1));
-
-               lbag.AddStatement (f, GetLocation ($2), GetLocation ($5));
-
-               current_block.AddStatement (f);
-
-               $$ = end_block (lexer.Location);
+               if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($5));
+         
+               $$ = new Lock ((Expression) $3, (Statement) $5, GetLocation ($1));
+               lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
          }
        ;
 
-fixed_pointer_declarators
-       : fixed_pointer_declarator      { 
-               var declarators = new List<KeyValuePair<Tokenizer.LocatedToken, Expression>> (2);
-               if ($1 != null)
-                       declarators.Add ((KeyValuePair<Tokenizer.LocatedToken, Expression>)$1);
-               $$ = declarators;
-         }
-       | fixed_pointer_declarators COMMA fixed_pointer_declarator
+fixed_statement
+       : FIXED open_parens_any variable_type IDENTIFIER
          {
-               var declarators = (List<KeyValuePair<Tokenizer.LocatedToken, Expression>>) $1;
-               if ($3 != null)
-                       declarators.Add ((KeyValuePair<Tokenizer.LocatedToken, Expression>)$3);
-               $$ = declarators;
+           start_block (GetLocation ($2));
+           
+               var lt = (Tokenizer.LocatedToken) $4;
+               var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.FixedVariable | LocalVariable.Flags.Used, lt.Location);
+               current_block.AddLocalName (li);
+               current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) $3, li);
          }
-       ;
-
-fixed_pointer_declarator
-       : IDENTIFIER ASSIGN expression
+         using_or_fixed_variable_initializer opt_variable_declarators CLOSE_PARENS
          {
-               var lt = (Tokenizer.LocatedToken) $1;
-               $$ = new KeyValuePair<Tokenizer.LocatedToken, Expression> (lt, (Expression) $3);
+               $$ = current_variable;
+               current_variable = null;
          }
-       | IDENTIFIER
+         embedded_statement
          {
-               Report.Error (210, ((Tokenizer.LocatedToken) $1).Location, "You must provide an initializer in a fixed or using statement declaration");
-               $$ = null;
+               if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($10));
+         
+               Fixed f = new Fixed ((Fixed.VariableDeclaration) $9, (Statement) $10, GetLocation ($1));
+               current_block.AddStatement (f);
+               $$ = end_block (GetLocation ($8));
          }
        ;
 
-lock_statement
-       : LOCK open_parens_any expression CLOSE_PARENS embedded_statement
+using_statement
+       : USING open_parens_any variable_type IDENTIFIER
          {
-               $$ = new Lock ((Expression) $3, (Statement) $5, GetLocation ($1));
-               lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4));
+           start_block (GetLocation ($2));
+           
+               var lt = (Tokenizer.LocatedToken) $4;
+               var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.UsingVariable | LocalVariable.Flags.Used, lt.Location);
+               current_block.AddLocalName (li);
+               current_variable = new Using.VariableDeclaration ((FullNamedExpression) $3, li);
          }
-       ;
-
-using_statement
-       : USING open_parens_any local_variable_declaration CLOSE_PARENS
+         using_or_fixed_variable_initializer opt_variable_declarators CLOSE_PARENS
          {
-               start_block (lexer.Location);
-               Block assign_block = current_block;
-
-               var de = (Tuple<FullNamedExpression, List<object>>) $3;
-               Location l = GetLocation ($1);
-
-               var vars = new Stack<Tuple<LocalVariableReference, Expression>> ();
-
-               lbag.AddStatement (assign_block, GetLocation ($1), GetLocation ($2), GetLocation ($4));
-
-               foreach (VariableDeclaration decl in de.Item2) {
-                       LocalInfo vi = current_block.AddVariable (de.Item1, decl.identifier, decl.Location);
-                       if (vi == null)
-                               continue;
-                       vi.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Using);
-
-                       Expression expr = decl.GetInitializer (de.Item1);
-                       if (expr == null) {
-                               Report.Error (210, l, "You must provide an initializer in a fixed or using statement declaration");
-                               continue;
-                       }
-                       LocalVariableReference var;
-
-                       // Get a writable reference to this read-only variable.
-                       var = new LocalVariableReference (assign_block, decl.identifier, l, vi, false);
-
-                       // This is so that it is not a warning on using variables
-                       vi.Used = true;
-
-                       vars.Push (new Tuple<LocalVariableReference, Expression> (var, expr));
-
-                       // Assign a = new SimpleAssign (var, expr, decl.Location);
-                       // assign_block.AddStatement (new StatementExpression (a));
-               }
-
-               // Note: the $$ here refers to the value of this code block and not of the LHS non-terminal.
-               // It can be referred to as $5 below.
-               $$ = vars;
+               $$ = current_variable;    
+               current_variable = null;
          }
          embedded_statement
          {
-               Statement stmt = (Statement) $6;
-               var vars = (Stack<Tuple<LocalVariableReference, Expression>>) $5;
-               Location l = GetLocation ($1);
-
-               while (vars.Count > 0) {
-                         var de = vars.Pop ();
-                         stmt = new Using (de.Item1, de.Item2, stmt, l);
-               }
-               current_block.AddStatement (stmt);
-               $$ = end_block (lexer.Location);
+               if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($10));
+         
+               Using u = new Using ((Using.VariableDeclaration) $9, (Statement) $10, GetLocation ($1));
+               current_block.AddStatement (u);
+               $$ = end_block (GetLocation ($8));
          }
-       | USING open_parens_any expression CLOSE_PARENS
+       | USING open_parens_any expression CLOSE_PARENS embedded_statement
          {
-               start_block (lexer.Location);
+               if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
+                       Warning_EmptyStatement (GetLocation ($5));
+         
+               Using u = new Using ((Expression) $3, (Statement) $5, GetLocation ($1));
+               lbag.AddStatement (u, GetLocation ($2), GetLocation ($4));
+               $$ = u;
          }
-         embedded_statement
+       ;
+       
+using_or_fixed_variable_initializer
+       : /* empty */
          {
-               UsingTemporary usingTemporary = new UsingTemporary ((Expression) $3, (Statement) $6, GetLocation ($1));
-               lbag.AddStatement (usingTemporary, GetLocation ($2), GetLocation ($4));
-               current_block.AddStatement (usingTemporary);
-               $$ = end_block (lexer.Location);
+               Report.Error (210, lexer.Location, "You must provide an initializer in a fixed or using statement declaration");
          }
-       ; 
+       | ASSIGN variable_initializer
+         {
+               current_variable.Initializer = (Expression) $2;
+               $$ = current_variable;
+         }
+       ;
 
 
 // LINQ
@@ -5569,16 +5473,18 @@ first_from_clause
          {
                current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location);
          
-               var lt = (Tokenizer.LocatedToken) $2;     
-               $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)));
+               var lt = (Tokenizer.LocatedToken) $2;
+               var rv = new Linq.RangeVariable (lt.Value, lt.Location);
+               $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, rv, GetLocation ($1)));
          }
        | FROM_FIRST type IDENTIFIER IN expression
          {
                current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location);
          
                var lt = (Tokenizer.LocatedToken) $3;
+               var rv = new Linq.RangeVariable (lt.Value, lt.Location);
                $$ = new Linq.QueryExpression (
-                       new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)) {
+                       new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, rv, GetLocation ($1)) {
                                IdentifierType = (FullNamedExpression)$2
                        }
                );
@@ -5590,16 +5496,18 @@ nested_from_clause
          {
                current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location);
          
-               var lt = (Tokenizer.LocatedToken) $2;     
-               $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)));
+               var lt = (Tokenizer.LocatedToken) $2;
+               var rv = new Linq.RangeVariable (lt.Value, lt.Location);
+               $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, rv, GetLocation ($1)));
          }
        | FROM type IDENTIFIER IN expression
          {
                current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location);
          
                var lt = (Tokenizer.LocatedToken) $3;
+               var rv = new Linq.RangeVariable (lt.Value, lt.Location);
                $$ = new Linq.QueryExpression (
-                       new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)) {
+                       new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, rv, GetLocation ($1)) {
                                IdentifierType = (FullNamedExpression)$2
                        }
                );
@@ -5614,7 +5522,7 @@ from_clause
          expression
          {
                var lt = (Tokenizer.LocatedToken) $2;
-               var sn = new SimpleMemberName (lt.Value, lt.Location);
+               var sn = new Linq.RangeVariable (lt.Value, lt.Location);
                $$ = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)$5, GetLocation ($1));
                
                current_block.SetEndLocation (lexer.Location);
@@ -5629,7 +5537,7 @@ from_clause
          expression
          {
                var lt = (Tokenizer.LocatedToken) $3;
-               var sn = new SimpleMemberName (lt.Value, lt.Location);
+               var sn = new Linq.RangeVariable (lt.Value, lt.Location);
 
                $$ = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)$6, GetLocation ($1)) {
                        IdentifierType = (FullNamedExpression)$2
@@ -5727,7 +5635,7 @@ let_clause
          expression
          {
                var lt = (Tokenizer.LocatedToken) $2;
-               var sn = new SimpleMemberName (lt.Value, lt.Location);
+               var sn = new Linq.RangeVariable (lt.Value, lt.Location);
                $$ = new Linq.Let ((Linq.QueryBlock) current_block, sn, (Expression)$5, GetLocation ($1));
                
                current_block.SetEndLocation (lexer.Location);
@@ -5778,27 +5686,39 @@ join_clause
          }
          expression opt_join_into
          {
-               var lt = (Tokenizer.LocatedToken) $2;
-               var sn = new SimpleMemberName (lt.Value, lt.Location);
-               SimpleMemberName sn2 = null;
-               
+               current_block.AddStatement (new ContextualReturn ((Expression) $11));
+               current_block.SetEndLocation (lexer.Location);
+         
                var outer_selector = linq_clause_blocks.Pop ();
                var block = linq_clause_blocks.Pop ();
 
+               var lt = (Tokenizer.LocatedToken) $2;   
+               var sn = new Linq.RangeVariable (lt.Value, lt.Location);
+               Linq.RangeVariable into;
+               
                if ($12 == null) {
+                       into = sn;
                        $$ = new Linq.Join (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block, GetLocation ($1));
                } else {
-                       var lt2 = (Tokenizer.LocatedToken) $12;
-                       sn2 = new SimpleMemberName (lt2.Value, lt2.Location);
-                       $$ = new Linq.GroupJoin (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block,
-                               sn2, GetLocation ($1));
+                       //
+                       // Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions
+                       //
+                       var parent = block.Parent;
+                       while (parent is Linq.QueryBlock) {
+                               parent = parent.Parent;
+                       }
+                       current_block.Parent = parent;
+                       
+                       ((Linq.QueryBlock)current_block).AddRangeVariable (sn);
+               
+                       lt = (Tokenizer.LocatedToken) $12;
+                       into = new Linq.RangeVariable (lt.Value, lt.Location);
+
+                       $$ = new Linq.GroupJoin (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1));   
                }
 
-               current_block.AddStatement (new ContextualReturn ((Expression) $11));
-               current_block.SetEndLocation (lexer.Location);
-               current_block = current_block.Parent;
-                       
-               ((Linq.QueryBlock)current_block).AddRangeVariable (sn2 ?? sn);
+               current_block = block.Parent;
+               ((Linq.QueryBlock)current_block).AddRangeVariable (into);
          }
        | JOIN type IDENTIFIER IN
          {
@@ -5826,29 +5746,43 @@ join_clause
          }
          expression opt_join_into
          {
-               var lt = (Tokenizer.LocatedToken) $3;
-               var sn = new SimpleMemberName (lt.Value, lt.Location);
-               SimpleMemberName sn2 = null;
+               current_block.AddStatement (new ContextualReturn ((Expression) $12));
+               current_block.SetEndLocation (lexer.Location);
+         
                var outer_selector = linq_clause_blocks.Pop ();
                var block = linq_clause_blocks.Pop ();
                
+               var lt = (Tokenizer.LocatedToken) $3;
+               var sn = new Linq.RangeVariable (lt.Value, lt.Location);
+               Linq.RangeVariable into;
+               
                if ($13 == null) {
+                       into = sn;              
                        $$ = new Linq.Join (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, GetLocation ($1)) {
                                IdentifierType = (FullNamedExpression)$2
                        };
                } else {
-                       var lt2 = (Tokenizer.LocatedToken) $13;
-                       sn2 = new SimpleMemberName (lt2.Value, lt2.Location);
-                       $$ = new Linq.GroupJoin (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, sn2, GetLocation ($1)) {
+                       //
+                       // Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions
+                       //
+                       var parent = block.Parent;
+                       while (parent is Linq.QueryBlock) {
+                               parent = parent.Parent;
+                       }
+                       current_block.Parent = parent;
+               
+                       ((Linq.QueryBlock)current_block).AddRangeVariable (sn);
+               
+                       lt = (Tokenizer.LocatedToken) $13;
+                       into = new Linq.RangeVariable (lt.Value, lt.Location); // TODO:
+                       
+                       $$ = new Linq.GroupJoin (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1)) {
                                IdentifierType = (FullNamedExpression)$2
                        };                      
                }
                
-               current_block.AddStatement (new ContextualReturn ((Expression) $12));
-               current_block.SetEndLocation (lexer.Location);
-               current_block = current_block.Parent;
-                       
-               ((Linq.QueryBlock)current_block).AddRangeVariable (sn2 ?? sn);
+               current_block = block.Parent;
+               ((Linq.QueryBlock)current_block).AddRangeVariable (into);               
          }
        ;
        
@@ -5959,7 +5893,8 @@ opt_query_continuation
          {
                var current_block = linq_clause_blocks.Pop ();    
                var lt = (Tokenizer.LocatedToken) $2;
-               $$ = new Linq.QueryStartClause ((Linq.QueryBlock)current_block, null, new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)) {
+               var rv = new Linq.RangeVariable (lt.Value, lt.Location);
+               $$ = new Linq.QueryStartClause ((Linq.QueryBlock)current_block, null, rv, GetLocation ($1)) {
                        next = (Linq.AQueryClause)$4
                };
          }
@@ -5980,7 +5915,7 @@ opt_query_continuation
 
 interactive_parsing
        : EVAL_STATEMENT_PARSER EOF 
-       | EVAL_USING_DECLARATIONS_UNIT_PARSER using_directives 
+       | EVAL_USING_DECLARATIONS_UNIT_PARSER using_directives opt_COMPLETE_COMPLETION
        | EVAL_STATEMENT_PARSER { 
                Evaluator.LoadAliases (current_namespace);
 
@@ -5995,7 +5930,7 @@ interactive_parsing
                Parameter [] mpar = new Parameter [1];
                mpar [0] = new Parameter (new TypeExpression (TypeManager.object_type, Location.Null), "$retval", Parameter.Modifier.REF, null, Location.Null);
 
-               ParametersCompiled pars = new ParametersCompiled (compiler, mpar);
+               ParametersCompiled pars = new ParametersCompiled (mpar);
                current_local_parameters = pars;
                Method method = new Method (
                        current_class,
@@ -6046,35 +5981,6 @@ close_brace_or_complete_completion
        ;
 %%
 
-// <summary>
-//   A class used to pass around variable declarations and constants
-// </summary>
-class VariableDeclaration {
-       public string identifier;
-       Expression initializer;
-       public Location Location;
-
-       public VariableDeclaration (Tokenizer.LocatedToken lt, Expression initializer)
-       {
-               this.identifier = lt.Value;
-               this.initializer = initializer;
-               this.Location = lt.Location;
-       }
-
-       public Expression GetInitializer (FullNamedExpression type)
-       {
-               if (initializer is ArrayInitializer)
-                       return new ArrayCreation (type, (ArrayInitializer)initializer);
-
-               return initializer;
-       }
-
-       public bool HasInitializer {
-               get { return initializer != null; }
-       }
-}
-
-
 // <summary>
 //  A class used to hold info about an operator declarator
 // </summary>
@@ -6122,6 +6028,11 @@ void Error_UnsafeCodeNotAllowed (Location loc)
        Report.Error (227, loc, "Unsafe code requires the `unsafe' command line option to be specified");
 }
 
+void Warning_EmptyStatement (Location loc)
+{
+       Report.Warning (642, 3, loc, "Possible mistaken empty statement");
+}
+
 void Error_NamedArgumentExpected (NamedArgument a)
 {
        Report.Error (1738, a.Location, "Named arguments must appear after the positional arguments");
@@ -6184,114 +6095,6 @@ void StoreModifierLocation (object token, Location loc)
        mod_locations.Add (Tuple.Create ((Modifiers) token, loc));
 }
 
-Block declare_local_variables (FullNamedExpression type, List<object> variable_declarators, Location loc)
-{
-       Block implicit_block;
-
-       //
-       // If we are doing interactive editing, we want variable declarations
-       // that are in the top block to be added instead to the class as 
-       // static variables
-       //
-       if (RootContext.StatementMode){
-               bool hoist = true;
-
-               for (Block b = current_block; b != null; b = b.Parent){
-                       if (b is ExplicitBlock && !(b is ToplevelBlock)){
-                               // There has been an explicit block, we cant add to the class
-                               hoist = false;
-                               break;
-                       }
-               }               
-               if (hoist){
-                       //
-                       // We can use "current_block" since we know there are no explicit blocks
-                       //
-                       foreach (VariableDeclaration decl in variable_declarators){
-                               // We can not use the super-handy f.Initializer, because
-                               // multiple lines would force code to be executed out of sync
-                               var init = decl.GetInitializer (type);
-                               if (init != null){
-                                       string id = "$" + decl.identifier;
-                                       LocalInfo vi = current_block.AddVariable (type, id, decl.Location);                                     
-
-                                       // Avoid warning about this variable not being used.
-                                       vi.Used = true;
-
-                                       LocalVariableReference var;
-                                       var = new LocalVariableReferenceWithClassSideEffect (current_container, decl.identifier, current_block, id, vi, decl.Location);
-                                       Assign assign = new SimpleAssign (var, init, decl.Location);
-                                       current_block.AddStatement (new StatementExpression (assign));
-                                       assign = new SimpleAssign (new SimpleName (decl.identifier, decl.Location), var);
-                                       current_block.AddStatement (new StatementExpression (assign));
-                               } else {
-                                       Field f = new Field (current_container, (FullNamedExpression) type, Modifiers.PUBLIC | Modifiers.STATIC,
-                                               new MemberName (decl.identifier, loc), null);
-                                       current_container.AddField (f);
-
-                                       // Register the field to be visible later as a global variable
-                                       Evaluator.QueueField (f);
-                               }
-                       }
-
-                       return current_block;
-               }
-       }
-
-       //
-       // We use the `Used' property to check whether statements
-       // have been added to the current block.  If so, we need
-       // to create another block to contain the new declaration
-       // otherwise, as an optimization, we use the same block to
-       // add the declaration.
-       //
-       // FIXME: A further optimization is to check if the statements
-       // that were added were added as part of the initialization
-       // below.  In which case, no other statements have been executed
-       // and we might be able to reduce the number of blocks for
-       // situations like this:
-       //
-       // int j = 1;  int k = j + 1;
-       //
-       if (current_block.Used)
-               implicit_block = new Block (current_block, loc, lexer.Location);
-       else
-               implicit_block = current_block;
-
-       foreach (VariableDeclaration decl in variable_declarators){
-
-               if (implicit_block.AddVariable (type, decl.identifier, decl.Location) != null) {
-                       if (decl.HasInitializer){
-                               Assign assign;
-                               
-                               var lvr = new LocalVariableReference (implicit_block, decl.identifier, loc);
-
-                               assign = new SimpleAssign (lvr, decl.GetInitializer (type), decl.Location);
-
-                               implicit_block.AddStatement (new StatementExpression (assign));
-                       }
-               }
-       }
-       
-       return implicit_block;
-}
-
-Block declare_local_constants (FullNamedExpression type, List<object> declarators)
-{
-       Block implicit_block;
-
-       if (current_block.Used)
-               implicit_block = new Block (current_block);
-       else
-               implicit_block = current_block;
-
-       foreach (VariableDeclaration decl in declarators){
-               implicit_block.AddConstant (type, decl.identifier, decl.GetInitializer (type), decl.Location);
-       }
-       
-       return implicit_block;
-}
-
 string CheckAttributeTarget (string a, Location l)
 {
        switch (a) {
@@ -6346,7 +6149,7 @@ public CSharpParser (SeekableStreamReader reader, CompilationUnit file, Compiler
 
        this.file = file;
        this.compiler = ctx;
-       current_namespace = new NamespaceEntry (null, file, null);
+       current_namespace = new NamespaceEntry (ctx, null, file, null);
        current_class = current_namespace.SlaveDeclSpace;
        current_container = current_class.PartialContainer; // == RootContest.ToplevelTypes
        oob_stack.Clear ();
@@ -6369,15 +6172,21 @@ public void parse ()
                Tokenizer tokenizer = lexer as Tokenizer;
                tokenizer.cleanup ();           
        } catch (Exception e){
-               if (e is yyParser.yyUnexpectedEof)
+               if (e is yyParser.yyUnexpectedEof) {
+                       Error_SyntaxError (yyToken);
                        UnexpectedEOF = true;
-
-               if (e is yyParser.yyException)
+                       return;
+               }
+                       
+               if (e is yyParser.yyException) {
                        Report.Error (-25, lexer.Location, "Parsing error");
-               else if (yacc_verbose_flag > 0)
-                       throw;  // Used by compiler-tester to test internal errors
-               else 
+               } else {
+                       // Used by compiler-tester to test internal errors
+                       if (yacc_verbose_flag > 0)
+                               throw;
+               
                        Report.Error (589, lexer.Location, "Internal compiler error during parsing");
+               }
        }
 
        if (RootContext.ToplevelTypes.NamespaceEntry != null)
@@ -6392,11 +6201,6 @@ void CheckToken (int error, int yyToken, string msg, Location loc)
                Report.Error (error, loc, msg);
 }
 
-void CheckIdentifierToken (int yyToken, Location loc)
-{
-       CheckToken (1041, yyToken, "Identifier expected", loc);
-}
-
 string ConsumeStoredComment ()
 {
        string s = tmpComment;
@@ -6407,13 +6211,17 @@ string ConsumeStoredComment ()
 
 Location GetLocation (object obj)
 {
-       if (obj is Tokenizer.LocatedToken)
-               return ((Tokenizer.LocatedToken) obj).Location;
-       if (obj is MemberName)
-               return ((MemberName) obj).Location;
-
-       if (obj is Expression)
-               return ((Expression) obj).Location;
+       var lt = obj as Tokenizer.LocatedToken;
+       if (lt != null)
+               return lt.Location;
+               
+       var mn = obj as MemberName;
+       if (mn != null)
+               return mn.Location;
+               
+       var expr = obj as Expression;
+       if (expr != null)
+               return expr.Location;
 
        return lexer.Location;
 }
@@ -6433,8 +6241,10 @@ public LocationsBag LocationsBag {
 
 void start_block (Location loc)
 {
-       if (current_block == null || parsing_anonymous_method) {
-               current_block = new ToplevelBlock (compiler, current_block, current_local_parameters, loc);
+       if (current_block == null) {
+               current_block = new ToplevelBlock (compiler, current_local_parameters, loc);
+       } else if (parsing_anonymous_method) {
+               current_block = new ParametersBlock (current_block, current_local_parameters, loc);
                parsing_anonymous_method = false;
        } else {
                current_block = new ExplicitBlock (current_block, loc, Location.Null);
@@ -6450,8 +6260,7 @@ end_block (Location loc)
        return retval;
 }
 
-void
-start_anonymous (bool lambda, ParametersCompiled parameters, Location loc)
+void start_anonymous (bool lambda, ParametersCompiled parameters, Location loc)
 {
        if (RootContext.Version == LanguageVersion.ISO_1){
                Report.FeatureIsNotAvailable (loc, "anonymous methods");
@@ -6459,6 +6268,7 @@ start_anonymous (bool lambda, ParametersCompiled parameters, Location loc)
 
        oob_stack.Push (current_anonymous_method);
        oob_stack.Push (current_local_parameters);
+       oob_stack.Push (current_variable);
 
        current_local_parameters = parameters;
 
@@ -6474,13 +6284,14 @@ start_anonymous (bool lambda, ParametersCompiled parameters, Location loc)
  * Completes the anonymous method processing, if lambda_expr is null, this
  * means that we have a Statement instead of an Expression embedded 
  */
-AnonymousMethodExpression end_anonymous (ToplevelBlock anon_block)
+AnonymousMethodExpression end_anonymous (ParametersBlock anon_block)
 {
        AnonymousMethodExpression retval;
 
        current_anonymous_method.Block = anon_block;
        retval = current_anonymous_method;
 
+       current_variable = (BlockVariableDeclaration) oob_stack.Pop ();
        current_local_parameters = (ParametersCompiled) oob_stack.Pop ();
        current_anonymous_method = (AnonymousMethodExpression) oob_stack.Pop ();
 
@@ -6493,7 +6304,6 @@ public NamespaceEntry CurrentNamespace {
        }
 }
 
-
 void Error_SyntaxError (int token)
 {
        Error_SyntaxError (0, token, "Unexpected symbol");
@@ -6501,20 +6311,34 @@ void Error_SyntaxError (int token)
 
 void Error_SyntaxError (int error_code, int token, string msg)
 {
+       // An error message has been reported by tokenizer
+       if (token == Token.ERROR)
+               return;
+
        string symbol = GetSymbolName (token);
        string expecting = GetExpecting ();
+       var loc = lexer.Location - symbol.Length;
        
        if (error_code == 0) {
-               if (expecting == "`)'")
+               if (expecting == "`identifier'") {
+                       if (token > Token.FIRST_KEYWORD && token < Token.LAST_KEYWORD) {
+                               Report.Error (1041, loc, "Identifier expected, `{0}' is a keyword", symbol);
+                               return;
+                       }
+                       
+                       error_code = 1001;
+                       expecting = "identifier";
+               } else if (expecting == "`)'") {
                        error_code = 1026;
-               else
+               } else {
                        error_code = 1525;
+               }
        }
        
        if (string.IsNullOrEmpty (expecting))
-               Report.Error (error_code, lexer.Location, "{1} `{0}'", symbol, msg);
+               Report.Error (error_code, loc, "{1} `{0}'", symbol, msg);
        else
-               Report.Error (error_code, lexer.Location, "{2} `{0}', expecting {1}", symbol, expecting, msg);    
+               Report.Error (error_code, loc, "{2} `{0}', expecting {1}", symbol, expecting, msg);       
 }
 
 string GetExpecting ()
@@ -6943,11 +6767,13 @@ static string GetTokenName (int token)
        case Token.IDENTIFIER:
                return "identifier";
 
+       case Token.EOF:
+               return "end-of-file";
+
                // All of these are internal.
        case Token.NONE:
        case Token.ERROR:
        case Token.FIRST_KEYWORD:
-       case Token.EOF:
        case Token.EVAL_COMPILATION_UNIT_PARSER:
        case Token.EVAL_USING_DECLARATIONS_UNIT_PARSER:
        case Token.EVAL_STATEMENT_PARSER:
index 4f6ad6bfd935cf0c720110493efa61e8a5ead8b2..0f5a2886a2a802ae5d05cabc20e73a74f739ac7c 100644 (file)
@@ -355,17 +355,6 @@ namespace Mono.CSharp
 
                static StringBuilder static_cmd_arg = new System.Text.StringBuilder ();
                
-               //
-               // Details about the error encoutered by the tokenizer
-               //
-               string error_details;
-               
-               public string error {
-                       get {
-                               return error_details;
-                       }
-               }
-               
                public int Line {
                        get {
                                return ref_line;
@@ -956,6 +945,12 @@ namespace Mono.CSharp
                                case Token.IDENTIFIER:
                                        switch (ptoken) {
                                        case Token.DOT:
+                                               if (bracket_level == 0) {
+                                                       is_type = false;
+                                                       can_be_type = true;
+                                               }
+
+                                               continue;
                                        case Token.OP_GENERICS_LT:
                                        case Token.COMMA:
                                        case Token.DOUBLE_COLON:
@@ -2702,8 +2697,8 @@ namespace Mono.CSharp
                                }
                        } catch (IndexOutOfRangeException) {
                                Report.Error (645, Location, "Identifier too long (limit is 512 chars)");
-                               col += pos - 1;
-                               return Token.ERROR;
+                               --pos;
+                               col += pos;
                        }
 
                        col += pos - 1;
@@ -3213,8 +3208,7 @@ namespace Mono.CSharp
                                        return consume_identifier (c);
                                }
 
-                               error_details = ((char)c).ToString ();
-                               return Token.ERROR;
+                               Report.Error (1056, Location, "Unexpected character `{0}'", ((char) c).ToString ());
                        }
 
                        if (CompleteOnEOF){
@@ -3234,10 +3228,11 @@ namespace Mono.CSharp
                        int c = get_char ();
                        tokens_seen = true;
                        if (c == '\'') {
-                               error_details = "Empty character literal";
-                               Report.Error (1011, Location, error_details);
-                               return Token.ERROR;
+                               val = new CharLiteral ((char) c, Location);
+                               Report.Error (1011, Location, "Empty character literal");
+                               return Token.LITERAL;
                        }
+
                        if (c == '\r' || c == '\n') {
                                Report.Error (1010, Location, "Newline in constant");
                                return Token.ERROR;
@@ -3261,7 +3256,6 @@ namespace Mono.CSharp
                                        if (c == '\n' || c == '\'')
                                                break;
                                }
-                               return Token.ERROR;
                        }
 
                        return Token.LITERAL;
index ce474490f6fb8b3ae23cd76e435f5cf4e5325c35..6cebf38c3b905c358d41d73e13080445cb40ae5a 100644 (file)
@@ -509,7 +509,7 @@ namespace Mono.CSharp {
                        if (OptAttributes == null)
                                return null;
 
-                       Attribute obsolete_attr = OptAttributes.Search (PredefinedAttributes.Get.Obsolete);
+                       Attribute obsolete_attr = OptAttributes.Search (Compiler.PredefinedAttributes.Obsolete);
                        if (obsolete_attr == null)
                                return null;
 
@@ -706,7 +706,7 @@ namespace Mono.CSharp {
                        caching_flags &= ~Flags.HasCompliantAttribute_Undetected;
 
                        if (OptAttributes != null) {
-                               Attribute cls_attribute = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant);
+                               Attribute cls_attribute = OptAttributes.Search (Compiler.PredefinedAttributes.CLSCompliant);
                                if (cls_attribute != null) {
                                        caching_flags |= Flags.HasClsCompliantAttribute;
                                        if (cls_attribute.GetClsCompliantAttributeValue ())
@@ -750,7 +750,7 @@ namespace Mono.CSharp {
                {
                        if (HasClsCompliantAttribute) {
                                if (CodeGen.Assembly.ClsCompliantAttribute == null) {
-                                       Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant);
+                                       Attribute a = OptAttributes.Search (Compiler.PredefinedAttributes.CLSCompliant);
                                        if ((caching_flags & Flags.ClsCompliantAttributeFalse) != 0) {
                                                Report.Warning (3021, 2, a.Location,
                                                        "`{0}' does not need a CLSCompliant attribute because the assembly is not marked as CLS-compliant",
@@ -764,7 +764,7 @@ namespace Mono.CSharp {
                                }
 
                                if (!IsExposedFromAssembly ()) {
-                                       Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant);
+                                       Attribute a = OptAttributes.Search (Compiler.PredefinedAttributes.CLSCompliant);
                                        Report.Warning (3019, 2, a.Location, "CLS compliance checking will not be performed on `{0}' because it is not visible from outside this assembly", GetSignatureForError ());
                                        return false;
                                }
@@ -780,7 +780,7 @@ namespace Mono.CSharp {
                                }
 
                                if (Parent.Parent != null && !Parent.IsClsComplianceRequired ()) {
-                                       Attribute a = OptAttributes.Search (PredefinedAttributes.Get.CLSCompliant);
+                                       Attribute a = OptAttributes.Search (Compiler.PredefinedAttributes.CLSCompliant);
                                        Report.Warning (3018, 1, a.Location, "`{0}' cannot be marked as CLS-compliant because it is a member of non CLS-compliant type `{1}'",
                                                GetSignatureForError (), Parent.GetSignatureForError ());
                                        return false;
index fc1968d10582f3dcd477af172f0a98a247143104..d329c2f42fd6a06e99a64ec04381881bc1bb66b4 100644 (file)
@@ -170,14 +170,19 @@ namespace Mono.CSharp {
                        //
                        // BeginInvoke
                        //
-                       Parameter[] compiled = new Parameter[Parameters.Count];
-                       for (int i = 0; i < compiled.Length; ++i)
-                               compiled[i] = new Parameter (new TypeExpression (Parameters.Types[i], Location),
-                                       Parameters.FixedParameters[i].Name,
-                                       Parameters.FixedParameters[i].ModFlags & (Parameter.Modifier.REF | Parameter.Modifier.OUT),
-                                       null, Location);
-
-                       ParametersCompiled async_parameters = new ParametersCompiled (Compiler, compiled);
+                       ParametersCompiled async_parameters;
+                       if (Parameters.Count == 0) {
+                               async_parameters = ParametersCompiled.EmptyReadOnlyParameters;
+                       } else {
+                               var compiled = new Parameter[Parameters.Count];
+                               for (int i = 0; i < compiled.Length; ++i)
+                                       compiled[i] = new Parameter (new TypeExpression (Parameters.Types[i], Location),
+                                               Parameters.FixedParameters[i].Name,
+                                               Parameters.FixedParameters[i].ModFlags & (Parameter.Modifier.REF | Parameter.Modifier.OUT),
+                                               null, Location);
+
+                               async_parameters = new ParametersCompiled (compiled);
+                       }
 
                        async_parameters = ParametersCompiled.MergeGenerated (Compiler, async_parameters, false,
                                new Parameter[] {
@@ -254,11 +259,11 @@ namespace Mono.CSharp {
                {
                        if (ReturnType.Type == InternalType.Dynamic) {
                                return_attributes = new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location);
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (return_attributes.Builder);
+                               Compiler.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (ReturnType.Type);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
+                                       var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                        if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                                return_attributes = new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location);
                                                return_attributes.Builder.SetCustomAttribute (
@@ -267,13 +272,13 @@ namespace Mono.CSharp {
                                }
                        }
 
-                       Parameters.ApplyAttributes (InvokeBuilder.MethodBuilder);
+                       Parameters.ApplyAttributes (this, InvokeBuilder.MethodBuilder);
                        
                        Constructor.ConstructorBuilder.SetImplementationFlags (MethodImplAttributes.Runtime);
                        InvokeBuilder.MethodBuilder.SetImplementationFlags (MethodImplAttributes.Runtime);
 
                        if (BeginInvokeBuilder != null) {
-                               BeginInvokeBuilder.ParameterInfo.ApplyAttributes (BeginInvokeBuilder.MethodBuilder);
+                               BeginInvokeBuilder.ParameterInfo.ApplyAttributes (this, BeginInvokeBuilder.MethodBuilder);
 
                                BeginInvokeBuilder.MethodBuilder.SetImplementationFlags (MethodImplAttributes.Runtime);
                                EndInvokeBuilder.MethodBuilder.SetImplementationFlags (MethodImplAttributes.Runtime);
index 759d26dcba6a6bec4cddef9491def14f94a9a45e..79e915b3f1db1cb74cb7ad67d3ff2c7812e40277 100644 (file)
@@ -616,7 +616,7 @@ namespace Mono.CSharp {
                                xref.SetAttribute ("cref", "N:" + ns.GetSignatureForError ());
                                return; // a namespace
                        }
-                       if (GlobalRootNamespace.Instance.IsNamespace (name)) {
+                       if (mc.Compiler.GlobalRootNamespace.IsNamespace (name)) {
                                xref.SetAttribute ("cref", "N:" + name);
                                return; // a namespace
                        }
index 39360e9127f205eaa64983faf9ae2f8eb76e4e46..372c06c738952fb17f033dca343a5864fbdeef78 100644 (file)
@@ -413,9 +413,9 @@ namespace Mono.CSharp
 
                                // Extern aliased refs require special handling
                                if (alias == null)
-                                       GlobalRootNamespace.Instance.AddAssemblyReference (a);
+                                       ctx.GlobalRootNamespace.AddAssemblyReference (a);
                                else
-                                       GlobalRootNamespace.Instance.DefineRootNamespace (alias, a, ctx);
+                                       ctx.GlobalRootNamespace.DefineRootNamespace (alias, a, ctx);
 
                        } catch (BadImageFormatException f) {
                                // .NET 2.0 throws this if we try to load a module without an assembly manifest ...
@@ -455,7 +455,7 @@ namespace Mono.CSharp
                                        }
                                }
 
-                               GlobalRootNamespace.Instance.AddModuleReference (m);
+                               ctx.GlobalRootNamespace.AddModuleReference (m);
 
                        } catch (BadImageFormatException f) {
                                Error9 ("module", f.FileName, f.FusionLog);
@@ -487,7 +487,7 @@ namespace Mono.CSharp
                        foreach (var entry in external_aliases)
                                LoadAssembly (entry.Value, entry.Key, false);
                                
-                       GlobalRootNamespace.Instance.ComputeNamespaces (ctx);
+                       ctx.GlobalRootNamespace.ComputeNamespaces (ctx);
                }
 
                static string [] LoadArgs (string file)
@@ -1695,7 +1695,7 @@ namespace Mono.CSharp
                                set_method.Invoke (CodeGen.Assembly.Builder, BindingFlags.Default, null, new object[]{true}, null);
                        }
 
-                       GlobalRootNamespace.Instance.AddModuleReference (RootContext.ToplevelTypes.Builder);
+                       ctx.GlobalRootNamespace.AddModuleReference (RootContext.ToplevelTypes.Builder);
 
                        //
                        // Load assemblies required
@@ -1778,7 +1778,7 @@ namespace Mono.CSharp
                        if (timestamps)
                                ShowTime ("Closing types");
 
-                       RootContext.CloseTypes ();
+                       RootContext.CloseTypes (ctx);
 
                        PEFileKinds k = PEFileKinds.ConsoleApplication;
 
@@ -2031,13 +2031,11 @@ namespace Mono.CSharp
 
                        RootContext.Reset (full_flag);
                        TypeManager.Reset ();
-                       PredefinedAttributes.Reset ();
                        ArrayContainer.Reset ();
                        ReferenceContainer.Reset ();
                        PointerContainer.Reset ();
                        Parameter.Reset ();
 
-                       GlobalRootNamespace.Reset ();
                        Unary.Reset ();
                        Binary.Reset ();
                        ConstantFold.Reset ();
index b1b5b4a5952f2ee9240037b7e9d6913b1837b7b1..dc8149baab77297ef0a75896e9cae2f1b8ad8232 100644 (file)
@@ -418,7 +418,7 @@ namespace Mono.CSharp
                                Delegate d = new Delegate (site.NamespaceEntry, site, new TypeExpression (rt, loc),
                                        Modifiers.INTERNAL | Modifiers.COMPILER_GENERATED,
                                        new MemberName ("Container" + index.ToString ("X")),
-                                       new ParametersCompiled (null, p), null);
+                                       new ParametersCompiled (p), null);
 
                                d.CreateType ();
                                d.DefineType ();
@@ -757,11 +757,13 @@ namespace Mono.CSharp
                TypeSpec instance_type;
 
                public DynamicSiteClass (TypeContainer parent, MemberBase host, TypeParameter[] tparams)
-                       : base (parent, MakeMemberName (host, "DynamicSite", 0, tparams, Location.Null), tparams, Modifiers.STATIC)
+                       : base (parent, MakeMemberName (host, "DynamicSite", parent.DynamicSitesCounter, tparams, Location.Null), tparams, Modifiers.STATIC)
                {
                        if (tparams != null) {
                                mutator = new TypeParameterMutator (tparams, CurrentTypeParameters);
                        }
+
+                       parent.DynamicSitesCounter++;
                }
 
                public FieldSpec CreateCallSiteField (FullNamedExpression type, Location loc)
index f1d18e2a8d526240cc6a357b6efa8544eb6e1745..1547bdf467cbbfea66775e9e2c6c370a94b00600 100644 (file)
@@ -195,15 +195,6 @@ namespace Mono.CSharp {
                        return null;
                }
 
-               //
-               // C# 3.0 introduced contextual keywords (var) which behaves like a type if type with
-               // same name exists or as a keyword when no type was found
-               // 
-               public virtual TypeExpr ResolveAsContextualType (IMemberContext rc, bool silent)
-               {
-                       return ResolveAsTypeTerminal (rc, silent);
-               }               
-               
                //
                // This is used to resolve the expression as a type, a null
                // value will be returned if the expression is not a type
@@ -329,11 +320,6 @@ namespace Mono.CSharp {
                                type.GetSignatureForError (), target.GetSignatureForError ());
                }
 
-               public virtual void Error_VariableIsUsedBeforeItIsDeclared (Report Report, string name)
-               {
-                       Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", name);
-               }
-
                public void Error_TypeArgumentsCannotBeUsed (Report report, Location loc, MemberSpec member, int arity)
                {
                        // Better message for possible generic expressions
@@ -440,7 +426,7 @@ namespace Mono.CSharp {
                                        throw;
 
                                ec.Report.Error (584, loc, "Internal compiler error: {0}", ex.Message);
-                               return EmptyExpression.Null;
+                               return EmptyExpression.Null;    // TODO: Add location
                        }
                }
 
@@ -580,11 +566,20 @@ namespace Mono.CSharp {
                        return r.ResolveMember<MethodSpec> (rc, ref args);
                }
 
+               [Flags]
+               public enum MemberLookupRestrictions
+               {
+                       None = 0,
+                       InvocableOnly = 1,
+                       ExactArity = 1 << 2,
+                       ReadAccess = 1 << 3
+               }
+
                //
                // Lookup type `queried_type' for code in class `container_type' with a qualifier of
                // `qualifier_type' or null to lookup members in the current class.
                //
-               public static Expression MemberLookup (ResolveContext rc, TypeSpec currentType, TypeSpec queried_type, string name, int arity, bool invocableOnly, Location loc)
+               public static Expression MemberLookup (ResolveContext rc, TypeSpec currentType, TypeSpec queried_type, string name, int arity, MemberLookupRestrictions restrictions, Location loc)
                {
                        var members = MemberCache.FindMembers (queried_type, name, false);
                        if (members == null)
@@ -601,13 +596,13 @@ namespace Mono.CSharp {
                                        if ((member.Modifiers & Modifiers.OVERRIDE) != 0 && member.Kind != MemberKind.Event)
                                                continue;
 
-                                       if (arity > 0 && member.Arity != arity)
+                                       if ((arity > 0 || (restrictions & MemberLookupRestrictions.ExactArity) != 0) && member.Arity != arity)
                                                continue;
 
                                        if (rc != null && !member.IsAccessible (currentType))
                                                continue;
 
-                                       if (invocableOnly) {
+                                       if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) {
                                                if (member is MethodSpec)
                                                        return new MethodGroupExpr (members, queried_type, loc);
 
@@ -684,7 +679,7 @@ namespace Mono.CSharp {
                        Arguments arguments = new Arguments (1);
                        arguments.Add (new Argument (e));
 
-                       var res = new OverloadResolver (methods, OverloadResolver.Restrictions.NoBaseMembers, loc);
+                       var res = new OverloadResolver (methods, OverloadResolver.Restrictions.BaseMembersIncluded | OverloadResolver.Restrictions.NoBaseMembers, loc);
                        var oper = res.ResolveOperator (ec, ref arguments);
 
                        if (oper == null)
@@ -2111,7 +2106,7 @@ namespace Mono.CSharp {
                        return Name;
                }
 
-               public abstract Expression LookupNameExpression (ResolveContext rc, bool readMode, bool invocableOnly);
+               public abstract Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restriction);
        }
        
        /// <summary>
@@ -2224,10 +2219,10 @@ namespace Mono.CSharp {
                        }
 
                        if (Arity == 0 && Name == "dynamic" && RootContext.Version > LanguageVersion.V_3) {
-                               if (!PredefinedAttributes.Get.Dynamic.IsDefined) {
+                               if (!ec.Compiler.PredefinedAttributes.Dynamic.IsDefined) {
                                        ec.Compiler.Report.Error (1980, Location,
                                                "Dynamic keyword requires `{0}' to be defined. Are you missing System.Core.dll assembly reference?",
-                                               PredefinedAttributes.Get.Dynamic.GetSignatureForError ());
+                                               ec.Compiler.PredefinedAttributes.Dynamic.GetSignatureForError ());
                                }
 
                                return new DynamicTypeExpr (loc);
@@ -2243,50 +2238,38 @@ namespace Mono.CSharp {
                        return null;
                }
 
-               public override Expression LookupNameExpression (ResolveContext rc, bool readMode, bool invocableOnly)
+               public override Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restrictions)
                {
                        int lookup_arity = Arity;
                        bool errorMode = false;
                        Expression e;
                        Block current_block = rc.CurrentBlock;
+                       INamedBlockVariable variable = null;
+                       bool variable_found = false;
 
                        while (true) {
                                //
                                // Stage 1: binding to local variables or parameters
                                //
+                               // LAMESPEC: It should take invocableOnly into account but that would break csc compatibility
+                               //
                                if (current_block != null && lookup_arity == 0) {
-                                       LocalInfo vi = current_block.GetLocalInfo (Name);
-                                       if (vi != null) {
-                                               // TODO: pass vi in to speed things up
-                                               e = new LocalVariableReference (rc.CurrentBlock, Name, loc);
-                                       } else {
-                                               e = current_block.Toplevel.GetParameterReference (Name, loc);
-                                       }
-
-                                       if (e != null) {
-                                               if (Arity > 0)
-                                                       Error_TypeArgumentsCannotBeUsed (rc.Report, "variable", Name, loc);
-
-                                               return e;
-                                       }
-
-                                       if (!errorMode)
-                                               current_block.CheckInvariantMeaningInBlock (Name, this, loc);
+                                       if (current_block.ParametersBlock.TopBlock.GetLocalName (Name, current_block.Original, ref variable)) {
+                                               if (!variable.IsDeclared) {
+                                                       // We found local name in accessible block but it's not
+                                                       // initialized yet, maybe the user wanted to bind to something else
+                                                       errorMode = true;
+                                                       variable_found = true;
+                                               } else {
+                                                       e = variable.CreateReferenceExpression (rc, loc);
+                                                       if (e != null) {
+                                                               if (Arity > 0)
+                                                                       Error_TypeArgumentsCannotBeUsed (rc.Report, "variable", Name, loc);
 
-/*
-                                       //if (errorMode) {
-                                               IKnownVariable ikv = current_block.Explicit.GetKnownVariable (Name);
-                                               if (ikv != null) {
-                                                       LocalInfo li = ikv as LocalInfo;
-                                                       // Supress CS0219 warning
-                                                       if (li != null)
-                                                               li.Used = true;
-
-                                                       Error_VariableIsUsedBeforeItIsDeclared (rc.Report, Name);
-                                                       return null;
+                                                               return e;
+                                                       }
                                                }
-                                       //}
-*/ 
+                                       }
                                }
 
                                //
@@ -2295,18 +2278,31 @@ namespace Mono.CSharp {
                                TypeSpec member_type = rc.CurrentType;
                                TypeSpec current_type = member_type;
                                for (; member_type != null; member_type = member_type.DeclaringType) {
-                                       var me = MemberLookup (errorMode ? null : rc, current_type, member_type, Name, lookup_arity, invocableOnly, loc) as MemberExpr;
+                                       var me = MemberLookup (errorMode ? null : rc, current_type, member_type, Name, lookup_arity, restrictions, loc) as MemberExpr;
                                        if (me == null)
                                                continue;
 
                                        if (errorMode) {
-                                               if (me is MethodGroupExpr) {
+                                               if (variable != null) {
+                                                       if (me is FieldExpr || me is ConstantExpr || me is EventExpr || me is PropertyExpr) {
+                                                               rc.Report.Error (844, loc,
+                                                                       "A local variable `{0}' cannot be used before it is declared. Consider renaming the local variable when it hides the member `{1}'",
+                                                                       Name, me.GetSignatureForError ());
+                                                       } else {
+                                                               break;
+                                                       }
+                                               } else if (me is MethodGroupExpr) {
                                                        // Leave it to overload resolution to report correct error
                                                } else {
                                                        // TODO: rc.Report.SymbolRelatedToPreviousError ()
                                                        ErrorIsInaccesible (rc, me.GetSignatureForError (), loc);
                                                }
                                        } else {
+                                               if (variable != null && (restrictions & MemberLookupRestrictions.InvocableOnly) == 0) {
+                                                       rc.Report.SymbolRelatedToPreviousError (variable.Location, Name);
+                                                       rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", Name);
+                                               }
+
                                                //
                                                // MemberLookup does not check accessors availability, this is actually needed for properties only
                                                //
@@ -2314,7 +2310,7 @@ namespace Mono.CSharp {
                                                if (pe != null) {
 
                                                        // Break as there is no other overload available anyway
-                                                       if (readMode) {
+                                                       if ((restrictions & MemberLookupRestrictions.ReadAccess) != 0) {
                                                                if (!pe.PropertyInfo.HasGet || !pe.PropertyInfo.Get.IsAccessible (current_type))
                                                                        break;
 
@@ -2343,14 +2339,19 @@ namespace Mono.CSharp {
                                //
                                // Stage 3: Lookup nested types, namespaces and type parameters in the context
                                //
-                               if (!invocableOnly) {
+                               if ((restrictions & MemberLookupRestrictions.InvocableOnly) == 0 && !variable_found) {
                                        e = ResolveAsTypeStep (rc, lookup_arity == 0 || !errorMode);
                                        if (e != null)
                                                return e;
                                }
 
                                if (errorMode) {
-                                       rc.Report.Error (103, loc, "The name `{0}' does not exist in the current context", Name);
+                                       if (variable_found) {
+                                               rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", Name);
+                                       } else {
+                                               rc.Report.Error (103, loc, "The name `{0}' does not exist in the current context", Name);
+                                       }
+
                                        return null;
                                }
 
@@ -2361,14 +2362,14 @@ namespace Mono.CSharp {
                                }
 
                                lookup_arity = 0;
-                               invocableOnly = false;
+                               restrictions &= ~MemberLookupRestrictions.InvocableOnly;
                                errorMode = true;
                        }
                }
                
                Expression SimpleNameResolve (ResolveContext ec, Expression right_side, bool intermediate)
                {
-                       Expression e = LookupNameExpression (ec, right_side == null, false);
+                       Expression e = LookupNameExpression (ec, right_side == null ? MemberLookupRestrictions.ReadAccess : MemberLookupRestrictions.None);
 
                        if (e == null)
                                return null;
@@ -3138,7 +3139,8 @@ namespace Mono.CSharp {
                        DelegateInvoke = 1,
                        ProbingOnly     = 1 << 1,
                        CovariantDelegate = 1 << 2,
-                       NoBaseMembers = 1 << 3
+                       NoBaseMembers = 1 << 3,
+                       BaseMembersIncluded = 1 << 4
                }
 
                public interface IBaseMembersProvider
@@ -3641,6 +3643,9 @@ namespace Mono.CSharp {
                        //
                        var ms = candidate as MethodSpec;
                        if (ms != null && ms.IsGeneric) {
+                               // Setup constraint checker for probing only
+                               ConstraintChecker cc = new ConstraintChecker (null);
+
                                if (type_arguments != null) {
                                        var g_args_count = ms.Arity;
                                        if (g_args_count != type_arguments.Count)
@@ -3656,20 +3661,25 @@ namespace Mono.CSharp {
                                                prev_recorder = ec.Report.SetPrinter (lambda_conv_msgs);
                                        }
 
-                                       score = TypeManager.InferTypeArguments (ec, arguments, ref ms);
+                                       var ti = new TypeInference (arguments);
+                                       TypeSpec[] i_args = ti.InferMethodArguments (ec, ms);
                                        lambda_conv_msgs.EndSession ();
 
-                                       if (score != 0)
-                                               return score - 20000;
+                                       if (i_args == null)
+                                               return ti.InferenceScore - 20000;
 
-                                       candidate = ms;
-                                       pd = ms.Parameters;
+                                       if (i_args.Length != 0) {
+                                               candidate = ms = ms.MakeGenericMethod (i_args);
+                                               pd = ms.Parameters;
+                                       }
+
+                                       cc.IgnoreInferredDynamic = true;
                                }
 
                                //
-                               // Type arguments constraints have to match
+                               // Type arguments constraints have to match for the method to be applicable
                                //
-                               if (!ConstraintChecker.CheckAll (null, ms.GetGenericMethodDefinition (), ms.TypeArguments, ms.Constraints, loc))
+                               if (!cc.CheckAll (ms.GetGenericMethodDefinition (), ms.TypeArguments, ms.Constraints, loc))
                                        return int.MaxValue - 25000;
 
                        } else {
@@ -3906,6 +3916,16 @@ namespace Mono.CSharp {
                                                                best_candidate_args = candidate_args;
                                                                best_candidate_params = params_expanded_form;
                                                        } else if (candidate_rate == 0) {
+                                                               //
+                                                               // The member look is done per type for most operations but sometimes
+                                                               // it's not possible like for binary operators overload because they
+                                                               // are unioned between 2 sides
+                                                               //
+                                                               if ((restrictions & Restrictions.BaseMembersIncluded) != 0) {
+                                                                       if (TypeSpec.IsBaseClass (best_candidate.DeclaringType, member.DeclaringType, true))
+                                                                               continue;
+                                                               }
+
                                                                // Is new candidate better
                                                                if (BetterFunction (rc, candidate_args, member, params_expanded_form, best_candidate, best_candidate_params)) {
                                                                        best_candidate = member;
@@ -4127,7 +4147,7 @@ namespace Mono.CSharp {
                                        if (ms != null && ms.IsGeneric) {
                                                bool constr_ok = true;
                                                if (ms.TypeArguments != null)
-                                                       constr_ok = ConstraintChecker.CheckAll (rc.MemberContext, ms.GetGenericMethodDefinition (), ms.TypeArguments, ms.Constraints, loc);
+                                                       constr_ok = new ConstraintChecker (rc.MemberContext).CheckAll (ms.GetGenericMethodDefinition (), ms.TypeArguments, ms.Constraints, loc);
 
                                                if (ta_count == 0) {
                                                        if (custom_errors != null && custom_errors.TypeInferenceFailed (rc, best_candidate))
@@ -4771,13 +4791,6 @@ namespace Mono.CSharp {
                                base.EmitSideEffect (ec);
                }
 
-               public override void Error_VariableIsUsedBeforeItIsDeclared (Report r, string name)
-               {
-                       r.Error (844, loc,
-                               "A local variable `{0}' cannot be used before it is declared. Consider renaming the local variable when it hides the field `{1}'",
-                               name, GetSignatureForError ());
-               }
-
                public void AddressOf (EmitContext ec, AddressOp mode)
                {
                        if ((mode & AddressOp.Store) != 0)
@@ -5082,7 +5095,8 @@ namespace Mono.CSharp {
                {
                        if (right_side == EmptyExpression.OutAccess.Instance) {
                                // TODO: best_candidate can be null at this point
-                               if (best_candidate != null && ec.CurrentBlock.Toplevel.GetParameterReference (best_candidate.Name, loc) is MemberAccess) {
+                               INamedBlockVariable variable = null;
+                               if (best_candidate != null && ec.CurrentBlock.ParametersBlock.TopBlock.GetLocalName (best_candidate.Name, ec.CurrentBlock, ref variable) && variable is Linq.RangeVariable) {
                                        ec.Report.Error (1939, loc, "A range variable `{0}' may not be passes as `ref' or `out' parameter",
                                                best_candidate.Name);
                                } else {
@@ -5157,13 +5171,8 @@ namespace Mono.CSharp {
                bool ResolveSetter (ResolveContext rc)
                {
                        if (!best_candidate.HasSet) {
-                               if (rc.CurrentBlock.Toplevel.GetParameterReference (best_candidate.Name, loc) is MemberAccess) {
-                                       rc.Report.Error (1947, loc, "A range variable `{0}' cannot be assigned to. Consider using `let' clause to store the value",
-                                               best_candidate.Name);
-                               } else {
-                                       rc.Report.Error (200, loc, "Property or indexer `{0}' cannot be assigned to (it is read-only)",
-                                               GetSignatureForError ());
-                               }
+                               rc.Report.Error (200, loc, "Property or indexer `{0}' cannot be assigned to (it is read-only)",
+                                       GetSignatureForError ());
                                return false;
                        }
 
@@ -5361,16 +5370,50 @@ namespace Mono.CSharp {
                }
        }
 
-       public class TemporaryVariable : VariableReference
+       public class TemporaryVariableReference : VariableReference
        {
-               LocalInfo li;
+               public class Declarator : Statement
+               {
+                       TemporaryVariableReference variable;
+
+                       public Declarator (TemporaryVariableReference variable)
+                       {
+                               this.variable = variable;
+                               loc = variable.loc;
+                       }
+
+                       protected override void DoEmit (EmitContext ec)
+                       {
+                               variable.li.CreateBuilder (ec);
+                       }
 
-               public TemporaryVariable (TypeSpec type, Location loc)
+                       protected override void CloneTo (CloneContext clonectx, Statement target)
+                       {
+                               // Nothing
+                       }
+               }
+
+               LocalVariable li;
+
+               public TemporaryVariableReference (LocalVariable li, Location loc)
                {
-                       this.type = type;
+                       this.li = li;
+                       this.type = li.Type;
                        this.loc = loc;
                }
 
+               public LocalVariable LocalInfo {
+                   get {
+                       return li;
+                   }
+               }
+
+               public static TemporaryVariableReference Create (TypeSpec type, Block block, Location loc)
+               {
+                       var li = LocalVariable.CreateCompilerGenerated (type, block, loc);
+                       return new TemporaryVariableReference (li, loc);
+               }
+
                public override Expression CreateExpressionTree (ResolveContext ec)
                {
                        throw new NotSupportedException ("ET");
@@ -5380,11 +5423,6 @@ namespace Mono.CSharp {
                {
                        eclass = ExprClass.Variable;
 
-                       TypeExpr te = new TypeExpression (type, loc);
-                       li = ec.CurrentBlock.AddTemporaryVariable (te, loc);
-                       if (!li.Resolve (ec))
-                               return null;
-
                        //
                        // Don't capture temporary variables except when using
                        // iterator redirection
@@ -5404,11 +5442,15 @@ namespace Mono.CSharp {
                
                public override void Emit (EmitContext ec)
                {
+                       li.CreateBuilder (ec);
+
                        Emit (ec, false);
                }
 
                public void EmitAssign (EmitContext ec, Expression source)
                {
+                       li.CreateBuilder (ec);
+
                        EmitAssign (ec, source, false, false);
                }
 
@@ -5449,19 +5491,9 @@ namespace Mono.CSharp {
        /// 
        class VarExpr : SimpleName
        {
-               // Used for error reporting only
-               int initializers_count;
-
                public VarExpr (Location loc)
                        : base ("var", loc)
                {
-                       initializers_count = 1;
-               }
-
-               public int VariableInitializersCount {
-                       set {
-                               this.initializers_count = value;
-                       }
                }
 
                public bool InferType (ResolveContext ec, Expression right_side)
@@ -5488,32 +5520,5 @@ namespace Mono.CSharp {
                        else
                                ec.Compiler.Report.Error (825, loc, "The contextual keyword `var' may only appear within a local variable declaration");
                }
-
-               public override TypeExpr ResolveAsContextualType (IMemberContext rc, bool silent)
-               {
-                       TypeExpr te = base.ResolveAsContextualType (rc, true);
-                       if (te != null)
-                               return te;
-
-                       if (RootContext.Version < LanguageVersion.V_3)
-                               rc.Compiler.Report.FeatureIsNotAvailable (loc, "implicitly typed local variable");
-
-                       if (initializers_count == 1)
-                               return null;
-
-                       if (initializers_count > 1) {
-                               rc.Compiler.Report.Error (819, loc, "An implicitly typed local variable declaration cannot include multiple declarators");
-                               initializers_count = 1;
-                               return null;
-                       }
-
-                       if (initializers_count == 0) {
-                               initializers_count = 1;
-                               rc.Compiler.Report.Error (818, loc, "An implicitly typed local variable declarator must include an initializer");
-                               return null;
-                       }
-
-                       return null;
-               }
        }
 }      
index 899331d0ffcd544adefc7c76fa649bc420878d39..f6a5b3e363dd3cc70319bf63334b51972abff103 100644 (file)
@@ -129,10 +129,11 @@ namespace Mono.CSharp {
                                
                                CompilerCallableEntryPoint.Reset ();
                                RootContext.ToplevelTypes = new ModuleCompiled (ctx, true);
-                               /*var ctypes = */TypeManager.InitCoreTypes ();
+                               var ctypes = TypeManager.InitCoreTypes ();
 
                                ctx.MetaImporter.Initialize ();
                                driver.LoadReferences ();
+                               TypeManager.InitCoreTypes (ctx, ctypes);
                                TypeManager.InitOptionalCoreTypes (ctx);
 
                                RootContext.EvalMode = true;
@@ -152,27 +153,8 @@ namespace Mono.CSharp {
                        CompilerCallableEntryPoint.PartialReset ();
                        RootContext.PartialReset ();
                        
-                       // Workaround for API limitation where full message printer cannot be passed
-                       ReportPrinter printer;
-                       if (MessageOutput == Console.Out || MessageOutput == Console.Error){
-                               var console_reporter = new ConsoleReportPrinter (MessageOutput);
-                               console_reporter.Fatal = driver.fatal_errors;
-                               printer = console_reporter;
-                       } else
-                               printer = new StreamReportPrinter (MessageOutput);
-
-                       ctx = new CompilerContext (new ReflectionMetaImporter (), new Report (printer));
                        RootContext.ToplevelTypes = new ModuleCompiled (ctx, true);
 
-                       ctx.MetaImporter.Initialize ();
-
-                       //
-                       // PartialReset should not reset the core types, this is very redundant.
-                       //
-//                     if (!TypeManager.InitCoreTypes (ctx, null))
-//                             throw new Exception ("Failed to InitCoreTypes");
-//                     TypeManager.InitOptionalCoreTypes (ctx);
-                       
                        Location.AddFile (null, "{interactive}");
                        Location.Initialize ();
 
@@ -445,7 +427,7 @@ namespace Mono.CSharp {
                                        BlockContext bc = new BlockContext (method, method.Block, method.ReturnType);
 
                                        try {
-                                               method.Block.Resolve (null, bc, method.ParameterInfo, method);
+                                               method.Block.Resolve (null, bc, method);
                                        } catch (CompletionResult cr){
                                                prefix = cr.BaseText;
                                                return cr.Result;
@@ -744,7 +726,7 @@ namespace Mono.CSharp {
                                return null;
                        }
                        
-                       RootContext.CloseTypes ();
+                       RootContext.CloseTypes (ctx);
 
                        if (Environment.GetEnvironmentVariable ("SAVE") != null)
                                CodeGen.Save (current_debug_name, false, Report);
@@ -897,7 +879,7 @@ namespace Mono.CSharp {
                {
                        lock (evaluator_lock){
                                driver.LoadAssembly (file, false);
-                               GlobalRootNamespace.Instance.ComputeNamespaces (ctx);
+                               ctx.GlobalRootNamespace.ComputeNamespaces (ctx);
                        }
                }
 
@@ -909,7 +891,7 @@ namespace Mono.CSharp {
                        lock (evaluator_lock){
 //                             GlobalRootNamespace.Instance.AddAssemblyReference (a);
 //                             GlobalRootNamespace.Instance.ComputeNamespaces (ctx);
-                               ctx.MetaImporter.ImportAssembly (a, GlobalRootNamespace.Instance);
+                               ctx.MetaImporter.ImportAssembly (a, ctx.GlobalRootNamespace);
                        }
                }
 
@@ -1105,56 +1087,20 @@ namespace Mono.CSharp {
 #endif
        }
 
-       //
-       // A local variable reference that will create a Field in a
-       // Class with the resolved type.  This is necessary so we can
-       // support "var" as a field type in a class declaration.
-       //
-       // We allow LocalVariableReferece to do the heavy lifting, and
-       // then we insert the field with the resolved type
-       //
-       public class LocalVariableReferenceWithClassSideEffect : LocalVariableReference {
-               TypeContainer container;
-               string name;
-               
-               public LocalVariableReferenceWithClassSideEffect (TypeContainer container, string name, Block current_block, string local_variable_id, LocalInfo li, Location loc)
-                       : base (current_block, local_variable_id, loc, li, false)
+       class HoistedEvaluatorVariable : HoistedVariable
+       {
+               public HoistedEvaluatorVariable (Field field)
+                       : base (null, field)
                {
-                       this.container = container;
-                       this.name = name;
                }
 
-               public override bool Equals (object obj)
+               public override void EmitSymbolInfo ()
                {
-                       LocalVariableReferenceWithClassSideEffect lvr = obj as LocalVariableReferenceWithClassSideEffect;
-                       if (lvr == null)
-                               return false;
-
-                       if (lvr.name != name || lvr.container != container)
-                               return false;
-
-                       return base.Equals (obj);
                }
 
-               public override int GetHashCode ()
+               protected override FieldExpr GetFieldExpression (EmitContext ec)
                {
-                       return name.GetHashCode ();
-               }
-               
-               override public Expression DoResolveLValue (ResolveContext ec, Expression right_side)
-               {
-                       Expression ret = base.DoResolveLValue (ec, right_side);
-                       if (ret == null)
-                               return null;
-
-                       Field f = new Field (container, new TypeExpression (ret.Type, Location),
-                                            Modifiers.PUBLIC | Modifiers.STATIC,
-                                            new MemberName (name, Location), null);
-                       container.AddField (f);
-                       if (f.Define ())
-                               Evaluator.QueueField (f);
-                       
-                       return ret;
+                       return new FieldExpr (field, field.Location);
                }
        }
 
@@ -1204,32 +1150,12 @@ namespace Mono.CSharp {
                        }
        
                        // This means its really a statement.
-                       if (clone.Type == TypeManager.void_type){
-                               source = source.Resolve (ec);
-                               target = null;
-                               type = TypeManager.void_type;
-                               eclass = ExprClass.Value;
-                               return this;
+                       if (clone.Type == TypeManager.void_type || clone is DynamicInvocation || clone is Assign) {
+                               return clone;
                        }
 
                        return base.DoResolve (ec);
                }
-
-               public override void Emit (EmitContext ec)
-               {
-                       if (target == null)
-                               source.Emit (ec);
-                       else
-                               base.Emit (ec);
-               }
-
-               public override void EmitStatement (EmitContext ec)
-               {
-                       if (target == null)
-                               source.Emit (ec);
-                       else
-                               base.EmitStatement (ec);
-               }
        }
 
        public class Undo {
index 0d8f2027afebdc0b1bcac4481bdc73e9a58d2aa0..3bdd95d8332b3a2df2c34fb43c99782f07239e47 100644 (file)
@@ -622,7 +622,7 @@ namespace Mono.CSharp {
                                VariableInfo vi = vr.VariableInfo;
                                if (vi != null) {
                                        if (vi.LocalInfo != null)
-                                               vi.LocalInfo.Used = true;
+                                               vi.LocalInfo.SetIsUsed ();
 
                                        //
                                        // A variable is considered definitely assigned if you take its address.
@@ -688,7 +688,7 @@ namespace Mono.CSharp {
                        Arguments args = new Arguments (1);
                        args.Add (new Argument (expr));
 
-                       var res = new OverloadResolver (methods, OverloadResolver.Restrictions.NoBaseMembers, loc);
+                       var res = new OverloadResolver (methods, OverloadResolver.Restrictions.BaseMembersIncluded | OverloadResolver.Restrictions.NoBaseMembers, loc);
                        var oper = res.ResolveOperator (ec, ref args);
 
                        if (oper == null)
@@ -1125,7 +1125,7 @@ namespace Mono.CSharp {
                        }
 
                        //
-                       // Step 2: Perform Operator Overload location
+                       // Step 2: Perform Operator overload resolution
                        //
                        var user_op = IsDecrement ? Operator.OpType.Decrement : Operator.OpType.Increment;
                        var methods = MemberCache.GetUserOperator (type, user_op, false);
@@ -1134,7 +1134,7 @@ namespace Mono.CSharp {
                                Arguments args = new Arguments (1);
                                args.Add (new Argument (expr));
 
-                               var res = new OverloadResolver (methods, OverloadResolver.Restrictions.NoBaseMembers, loc);
+                               var res = new OverloadResolver (methods, OverloadResolver.Restrictions.BaseMembersIncluded | OverloadResolver.Restrictions.NoBaseMembers, loc);
                                var op = res.ResolveOperator (ec, ref args);
                                if (op == null)
                                        return null;
@@ -1977,9 +1977,17 @@ namespace Mono.CSharp {
                        RelationalMask  = 1 << 13
                }
 
+               protected enum State
+               {
+                       None = 0,
+                       Compound = 1 << 1,
+                       LeftNullLifted = 1 << 2,
+                       RightNullLifted = 1 << 3
+               }
+
                readonly Operator oper;
                protected Expression left, right;
-               readonly bool is_compound;
+               protected State state;
                Expression enum_conversion;
 
                static PredefinedOperator[] standard_operators;
@@ -1989,7 +1997,8 @@ namespace Mono.CSharp {
                public Binary (Operator oper, Expression left, Expression right, bool isCompound, Location loc)
                        : this (oper, left, right, loc)
                {
-                       this.is_compound = isCompound;
+                       if (isCompound)
+                               state |= State.Compound;
                }
 
                public Binary (Operator oper, Expression left, Expression right, Location loc)
@@ -2000,12 +2009,22 @@ namespace Mono.CSharp {
                        this.loc = loc;
                }
 
+               #region Properties
+
+               public bool IsCompound {
+                       get {
+                               return (state & State.Compound) != 0;
+                       }
+               }
+
                public Operator Oper {
                        get {
                                return oper;
                        }
                }
-               
+
+               #endregion
+
                /// <summary>
                ///   Returns a stringified representation of the Operator
                /// </summary>
@@ -2072,7 +2091,7 @@ namespace Mono.CSharp {
                                break;
                        }
 
-                       if (is_compound)
+                       if (IsCompound)
                                return s + "=";
 
                        return s;
@@ -2105,15 +2124,15 @@ namespace Mono.CSharp {
                {
                        switch (oper) {
                        case Operator.Addition:
-                               return is_compound ? "AddAssign" : "Add";
+                               return IsCompound ? "AddAssign" : "Add";
                        case Operator.BitwiseAnd:
-                               return is_compound ? "AndAssign" : "And";
+                               return IsCompound ? "AndAssign" : "And";
                        case Operator.BitwiseOr:
-                               return is_compound ? "OrAssign" : "Or";
+                               return IsCompound ? "OrAssign" : "Or";
                        case Operator.Division:
-                               return is_compound ? "DivideAssign" : "Divide";
+                               return IsCompound ? "DivideAssign" : "Divide";
                        case Operator.ExclusiveOr:
-                               return is_compound ? "ExclusiveOrAssign" : "ExclusiveOr";
+                               return IsCompound ? "ExclusiveOrAssign" : "ExclusiveOr";
                        case Operator.Equality:
                                return "Equal";
                        case Operator.GreaterThan:
@@ -2123,7 +2142,7 @@ namespace Mono.CSharp {
                        case Operator.Inequality:
                                return "NotEqual";
                        case Operator.LeftShift:
-                               return is_compound ? "LeftShiftAssign" : "LeftShift";
+                               return IsCompound ? "LeftShiftAssign" : "LeftShift";
                        case Operator.LessThan:
                                return "LessThan";
                        case Operator.LessThanOrEqual:
@@ -2133,13 +2152,13 @@ namespace Mono.CSharp {
                        case Operator.LogicalOr:
                                return "Or";
                        case Operator.Modulus:
-                               return is_compound ? "ModuloAssign" : "Modulo";
+                               return IsCompound ? "ModuloAssign" : "Modulo";
                        case Operator.Multiply:
-                               return is_compound ? "MultiplyAssign" : "Multiply";
+                               return IsCompound ? "MultiplyAssign" : "Multiply";
                        case Operator.RightShift:
-                               return is_compound ? "RightShiftAssign" : "RightShift";
+                               return IsCompound ? "RightShiftAssign" : "RightShift";
                        case Operator.Subtraction:
-                               return is_compound ? "SubtractAssign" : "Subtract";
+                               return IsCompound ? "SubtractAssign" : "Subtract";
                        default:
                                throw new NotImplementedException ("Unknown expression type operator " + oper.ToString ());
                        }
@@ -2364,12 +2383,11 @@ namespace Mono.CSharp {
                                        return ResolveOperatorPointer (ec, l, r);
 
                                // Enums
-                               bool lenum = TypeManager.IsEnumType (l);
-                               bool renum = TypeManager.IsEnumType (r);
+                               bool lenum = l.IsEnum;
+                               bool renum = r.IsEnum;
                                if (lenum || renum) {
                                        expr = ResolveOperatorEnum (ec, lenum, renum, l, r);
 
-                                       // TODO: Can this be ambiguous
                                        if (expr != null)
                                                return expr;
                                }
@@ -2860,88 +2878,133 @@ namespace Mono.CSharp {
                        //
                        // U operator - (E e, E f)
                        // E operator - (E e, U x)
+                       // E operator - (U x, E e)      // LAMESPEC: Not covered by the specification
                        //
-                       // E operator + (U x, E e)
                        // E operator + (E e, U x)
+                       // E operator + (U x, E e)
                        //
-                       if (!((oper & (Operator.ComparisonMask | Operator.BitwiseMask)) != 0 ||
-                               (oper == Operator.Subtraction && lenum) ||
-                               (oper == Operator.Addition && (lenum != renum || type != null))))       // type != null for lifted null
-                               return null;
-
                        Expression ltemp = left;
                        Expression rtemp = right;
                        TypeSpec underlying_type;
+                       TypeSpec underlying_type_result;
+                       TypeSpec res_type;
                        Expression expr;
                        
+                       //
+                       // LAMESPEC: There is never ambiguous conversion between enum operators
+                       // the one which contains more enum parameters always wins even if there
+                       // is an implicit conversion involved
+                       //
                        if ((oper & (Operator.ComparisonMask | Operator.BitwiseMask)) != 0) {
                                if (renum) {
+                                       underlying_type = EnumSpec.GetUnderlyingType (rtype);
                                        expr = Convert.ImplicitConversion (ec, left, rtype, loc);
-                                       if (expr != null) {
-                                               left = expr;
-                                               ltype = expr.Type;
-                                       }
+                                       if (expr == null)
+                                               return null;
+
+                                       left = expr;
+                                       ltype = expr.Type;
                                } else if (lenum) {
+                                       underlying_type = EnumSpec.GetUnderlyingType (ltype);
                                        expr = Convert.ImplicitConversion (ec, right, ltype, loc);
-                                       if (expr != null) {
-                                               right = expr;
-                                               rtype = expr.Type;
-                                       }
+                                       if (expr == null)
+                                               return null;
+
+                                       right = expr;
+                                       rtype = expr.Type;
+                               } else {
+                                       return null;
                                }
-                       }                       
 
-                       if (ltype == rtype) {
-                               underlying_type = EnumSpec.GetUnderlyingType (ltype);
+                               if ((oper & Operator.BitwiseMask) != 0) {
+                                       res_type = ltype;
+                                       underlying_type_result = underlying_type;
+                               } else {
+                                       res_type = null;
+                                       underlying_type_result = null;
+                               }
+                       } else if (oper == Operator.Subtraction) {
+                               if (renum) {
+                                       underlying_type = EnumSpec.GetUnderlyingType (rtype);
+                                       if (ltype != rtype) {
+                                               expr = Convert.ImplicitConversion (ec, left, rtype, left.Location);
+                                               if (expr == null) {
+                                                       expr = Convert.ImplicitConversion (ec, left, underlying_type, left.Location);
+                                                       if (expr == null)
+                                                               return null;
+
+                                                       res_type = rtype;
+                                               } else {
+                                                       res_type = underlying_type;
+                                               }
 
-                               if (left is Constant)
-                                       left = ((Constant) left).ConvertExplicitly (false, underlying_type).Resolve (ec);
-                               else
-                                       left = EmptyCast.Create (left, underlying_type);
+                                               left = expr;
+                                       } else {
+                                               res_type = underlying_type;
+                                       }
 
-                               if (right is Constant)
-                                       right = ((Constant) right).ConvertExplicitly (false, underlying_type).Resolve (ec);
-                               else
-                                       right = EmptyCast.Create (right, underlying_type);
-                       } else if (lenum) {
-                               underlying_type = EnumSpec.GetUnderlyingType (ltype);
+                                       underlying_type_result = underlying_type;
+                               } else if (lenum) {
+                                       underlying_type = EnumSpec.GetUnderlyingType (ltype);
+                                       expr = Convert.ImplicitConversion (ec, right, ltype, right.Location);
+                                       if (expr == null) {
+                                               expr = Convert.ImplicitConversion (ec, right, underlying_type, right.Location);
+                                               if (expr == null)
+                                                       return null;
 
-                               if (oper != Operator.Subtraction && oper != Operator.Addition) {
-                                       Constant c = right as Constant;
-                                       if (c == null || !c.IsDefaultValue)
-                                               return null;
+                                               res_type = ltype;
+                                       } else {
+                                               res_type = underlying_type;
+                                       }
+
+                                       right = expr;
+                                       underlying_type_result = underlying_type;
                                } else {
-                                       if (!Convert.ImplicitStandardConversionExists (right, underlying_type))
-                                               return null;
+                                       return null;
+                               }
+                       } else if (oper == Operator.Addition) {
+                               if (lenum) {
+                                       underlying_type = EnumSpec.GetUnderlyingType (ltype);
+                                       res_type = ltype;
+
+                                       if (rtype != underlying_type && (state & (State.RightNullLifted | State.LeftNullLifted)) == 0) {
+                                               expr = Convert.ImplicitConversion (ec, right, underlying_type, right.Location);
+                                               if (expr == null)
+                                                       return null;
 
-                                       right = Convert.ImplicitConversionStandard (ec, right, underlying_type, right.Location);
+                                               right = expr;
+                                       }
+                               } else {
+                                       underlying_type = EnumSpec.GetUnderlyingType (rtype);
+                                       res_type = rtype;
+                                       if (ltype != underlying_type) {
+                                               expr = Convert.ImplicitConversion (ec, left, underlying_type, left.Location);
+                                               if (expr == null)
+                                                       return null;
+
+                                               left = expr;
+                                       }
                                }
 
+                               underlying_type_result = underlying_type;
+                       } else {
+                               return null;
+                       }
+
+                       // Unwrap the constant correctly, so DoBinaryOperatorPromotion can do the magic
+                       // with constants and expressions
+                       if (left.Type != underlying_type) {
                                if (left is Constant)
                                        left = ((Constant) left).ConvertExplicitly (false, underlying_type).Resolve (ec);
                                else
                                        left = EmptyCast.Create (left, underlying_type);
+                       }
 
-                       } else if (renum) {
-                               underlying_type = EnumSpec.GetUnderlyingType (rtype);
-
-                               if (oper != Operator.Addition) {
-                                       Constant c = left as Constant;
-                                       if (c == null || !c.IsDefaultValue)
-                                               return null;
-                               } else {
-                                       if (!Convert.ImplicitStandardConversionExists (left, underlying_type))
-                                               return null;
-
-                                       left = Convert.ImplicitConversionStandard (ec, left, underlying_type, left.Location);
-                               }
-
+                       if (right.Type != underlying_type) {
                                if (right is Constant)
                                        right = ((Constant) right).ConvertExplicitly (false, underlying_type).Resolve (ec);
                                else
                                        right = EmptyCast.Create (right, underlying_type);
-
-                       } else {
-                               return null;
                        }
 
                        //
@@ -2954,22 +3017,15 @@ namespace Mono.CSharp {
                                return null;
                        }
 
-                       TypeSpec res_type = null;
-                       if ((oper & Operator.BitwiseMask) != 0 || oper == Operator.Subtraction || oper == Operator.Addition) {
-                               TypeSpec promoted_type = lenum ? left.Type : right.Type;
-                               enum_conversion = Convert.ExplicitNumericConversion (
-                                       new EmptyExpression (promoted_type), underlying_type);
-
-                               if (oper == Operator.Subtraction && renum && lenum)
-                                       res_type = underlying_type;
-                               else if (oper == Operator.Addition && renum)
-                                       res_type = rtype;
-                               else
-                                       res_type = ltype;
+                       if (underlying_type_result != null && left.Type != underlying_type_result) {
+                               enum_conversion = Convert.ExplicitNumericConversion (new EmptyExpression (left.Type), underlying_type_result);
                        }
-                       
+
                        expr = ResolveOperatorPredefined (ec, standard_operators, true, res_type);
-                       if (!is_compound || expr == null)
+                       if (expr == null)
+                               return null;
+
+                       if (!IsCompound)
                                return expr;
 
                        //
@@ -3273,7 +3329,8 @@ namespace Mono.CSharp {
                                left_operators = right_operators;
                        }
 
-                       var res = new OverloadResolver (left_operators, OverloadResolver.Restrictions.ProbingOnly, loc);
+                       var res = new OverloadResolver (left_operators, OverloadResolver.Restrictions.ProbingOnly | 
+                               OverloadResolver.Restrictions.NoBaseMembers | OverloadResolver.Restrictions.BaseMembersIncluded, loc);
 
                        var oper_method = res.ResolveOperator (ec, ref args);
                        if (oper_method == null)
@@ -4440,34 +4497,19 @@ namespace Mono.CSharp {
                }
        }
 
-       /// <summary>
-       ///   Local variables
-       /// </summary>
-       public class LocalVariableReference : VariableReference {
-               readonly string name;
-               public Block Block;
-               public LocalInfo local_info;
-               bool is_readonly;
+       //
+       // Resolved reference to a local variable
+       //
+       public class LocalVariableReference : VariableReference
+       {
+               public LocalVariable local_info;
 
-               public LocalVariableReference (Block block, string name, Location l)
+               public LocalVariableReference (LocalVariable li, Location l)
                {
-                       Block = block;
-                       this.name = name;
+                       this.local_info = li;
                        loc = l;
                }
 
-               //
-               // Setting `is_readonly' to false will allow you to create a writable
-               // reference to a read-only variable.  This is used by foreach and using.
-               //
-               public LocalVariableReference (Block block, string name, Location l,
-                                              LocalInfo local_info, bool is_readonly)
-                       : this (block, name, l)
-               {
-                       this.local_info = local_info;
-                       this.is_readonly = is_readonly;
-               }
-
                public override VariableInfo VariableInfo {
                        get { return local_info.VariableInfo; }
                }
@@ -4488,12 +4530,8 @@ namespace Mono.CSharp {
                        get { return false; }
                }
 
-               public bool IsReadOnly {
-                       get { return is_readonly; }
-               }
-
                public override string Name {
-                       get { return name; }
+                       get { return local_info.Name; }
                }
 
                public bool VerifyAssigned (ResolveContext ec)
@@ -4502,15 +4540,6 @@ namespace Mono.CSharp {
                        return variable_info == null || variable_info.IsAssigned (ec, loc);
                }
 
-               void ResolveLocalInfo ()
-               {
-                       if (local_info == null) {
-                               local_info = Block.GetLocalInfo (Name);
-                               type = local_info.VariableType;
-                               is_readonly = local_info.ReadOnly;
-                       }
-               }
-
                public override void SetHasAddressTaken ()
                {
                        local_info.AddressTaken = true;
@@ -4529,10 +4558,6 @@ namespace Mono.CSharp {
 
                Expression DoResolveBase (ResolveContext ec)
                {
-                       Expression e = Block.GetConstantExpression (Name);
-                       if (e != null)
-                               return e.Resolve (ec);
-
                        VerifyAssigned (ec);
 
                        //
@@ -4550,43 +4575,24 @@ namespace Mono.CSharp {
                        }
 
                        eclass = ExprClass.Variable;
-                       type = local_info.VariableType;
+                       type = local_info.Type;
                        return this;
                }
 
                protected override Expression DoResolve (ResolveContext ec)
                {
-                       ResolveLocalInfo ();
-                       local_info.Used = true;
+                       local_info.SetIsUsed ();
 
-                       if (type == null && local_info.Type is VarExpr) {
-                           local_info.VariableType = TypeManager.object_type;
-                               Error_VariableIsUsedBeforeItIsDeclared (ec.Report, Name);
-                           return null;
-                       }
-                       
                        return DoResolveBase (ec);
                }
 
                public override Expression DoResolveLValue (ResolveContext ec, Expression right_side)
                {
-                       ResolveLocalInfo ();
-
                        // is out param
                        if (right_side == EmptyExpression.OutAccess.Instance)
-                               local_info.Used = true;
+                               local_info.SetIsUsed ();
 
-                       // Infer implicitly typed local variable
-                       if (type == null) {
-                               VarExpr ve = local_info.Type as VarExpr;
-                               if (ve != null) {
-                                       if (!ve.InferType (ec, right_side))
-                                               return null;
-                                       type = local_info.VariableType = ve.Type;
-                               }
-                       }
-                                               
-                       if (is_readonly) {
+                       if (local_info.IsReadonly && !ec.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.UsingInitializerScope)) {
                                int code;
                                string msg;
                                if (right_side == EmptyExpression.OutAccess.Instance) {
@@ -4610,7 +4616,7 @@ namespace Mono.CSharp {
 
                public override int GetHashCode ()
                {
-                       return Name.GetHashCode ();
+                       return local_info.GetHashCode ();
                }
 
                public override bool Equals (object obj)
@@ -4619,7 +4625,7 @@ namespace Mono.CSharp {
                        if (lvr == null)
                                return false;
 
-                       return Name == lvr.Name && Block == lvr.Block;
+                       return local_info == lvr.local_info;
                }
 
                protected override ILocalVariable Variable {
@@ -4633,11 +4639,7 @@ namespace Mono.CSharp {
 
                protected override void CloneTo (CloneContext clonectx, Expression t)
                {
-                       LocalVariableReference target = (LocalVariableReference) t;
-                       
-                       target.Block = clonectx.LookupBlock (Block);
-                       if (local_info != null)
-                               target.local_info = clonectx.LookupVariable (local_info);
+                       // Nothing
                }
        }
 
@@ -4645,15 +4647,18 @@ namespace Mono.CSharp {
        ///   This represents a reference to a parameter in the intermediate
        ///   representation.
        /// </summary>
-       public class ParameterReference : VariableReference {
-               readonly ToplevelParameterInfo pi;
+       public class ParameterReference : VariableReference
+       {
+               protected ParametersBlock.ParameterInfo pi;
 
-               public ParameterReference (ToplevelParameterInfo pi, Location loc)
+               public ParameterReference (ParametersBlock.ParameterInfo pi, Location loc)
                {
                        this.pi = pi;
                        this.loc = loc;
                }
 
+               #region Properties
+
                public override bool IsRef {
                        get { return (pi.Parameter.ModFlags & Parameter.Modifier.ISBYREF) != 0; }
                }
@@ -4691,6 +4696,8 @@ namespace Mono.CSharp {
                        get { return Parameter; }
                }
 
+               #endregion
+
                public bool IsAssigned (ResolveContext ec, Location loc)
                {
                        // HACK: Variables are not captured in probing mode
@@ -4720,42 +4727,24 @@ namespace Mono.CSharp {
                        type = pi.ParameterType;
                        eclass = ExprClass.Variable;
 
-                       AnonymousExpression am = ec.CurrentAnonymousMethod;
-                       if (am == null)
-                               return true;
-
-                       Block b = ec.CurrentBlock;
-                       while (b != null) {
-                               b = b.Toplevel;
-                               IParameterData[] p = b.Toplevel.Parameters.FixedParameters;
-                               for (int i = 0; i < p.Length; ++i) {
-                                       if (p [i] != Parameter)
-                                               continue;
-
-                                       //
-                                       // Don't capture local parameters
-                                       //
-                                       if (b == ec.CurrentBlock.Toplevel && !am.IsIterator)
-                                               return true;
-
-                                       if (IsRef) {
-                                               ec.Report.Error (1628, loc,
-                                                       "Parameter `{0}' cannot be used inside `{1}' when using `ref' or `out' modifier",
-                                                       Name, am.ContainerType);
-                                       }
-
-                                       if (pi.Parameter.HasAddressTaken)
-                                               AnonymousMethodExpression.Error_AddressOfCapturedVar (ec, this, loc);
-
-                                       if (ec.IsVariableCapturingRequired && !b.Toplevel.IsExpressionTree) {
-                                               AnonymousMethodStorey storey = pi.Block.CreateAnonymousMethodStorey (ec);
-                                               storey.CaptureParameter (ec, this);
-                                       }
+                       //
+                       // If we are referencing a parameter from the external block
+                       // flag it for capturing
+                       //
+                       if (ec.MustCaptureVariable (pi)) {
+                               if (Parameter.HasAddressTaken)
+                                       AnonymousMethodExpression.Error_AddressOfCapturedVar (ec, this, loc);
 
-                                       return true;
+                               if (IsRef) {
+                                       ec.Report.Error (1628, loc,
+                                               "Parameter `{0}' cannot be used inside `{1}' when using `ref' or `out' modifier",
+                                               Name, ec.CurrentAnonymousMethod.ContainerType);
                                }
 
-                               b = b.Parent;
+                               if (ec.IsVariableCapturingRequired && !pi.Block.ParametersBlock.IsExpressionTree) {
+                                       AnonymousMethodStorey storey = pi.Block.Explicit.CreateAnonymousMethodStorey (ec);
+                                       storey.CaptureParameter (ec, this);
+                               }
                        }
 
                        return true;
@@ -4791,6 +4780,7 @@ namespace Mono.CSharp {
                protected override void CloneTo (CloneContext clonectx, Expression target)
                {
                        // Nothing to clone
+                       return;
                }
 
                public override Expression CreateExpressionTree (ResolveContext ec)
@@ -4916,7 +4906,7 @@ namespace Mono.CSharp {
                        Expression member_expr;
                        var atn = expr as ATypeNameExpression;
                        if (atn != null) {
-                               member_expr = atn.LookupNameExpression (ec, true, true);
+                               member_expr = atn.LookupNameExpression (ec, MemberLookupRestrictions.InvocableOnly | MemberLookupRestrictions.ReadAccess);
                                if (member_expr != null)
                                        member_expr = member_expr.Resolve (ec);
                        } else {
@@ -5641,9 +5631,16 @@ namespace Mono.CSharp {
                }
        }
 
+       //
+       // Array initializer expression, the expression is allowed in
+       // variable or field initialization only which makes it tricky as
+       // the type has to be infered based on the context either from field
+       // type or variable type (think of multiple declarators)
+       //
        public class ArrayInitializer : Expression
        {
                List<Expression> elements;
+               BlockVariableDeclaration variable;
 
                public ArrayInitializer (List<Expression> init, Location loc)
                {
@@ -5652,9 +5649,8 @@ namespace Mono.CSharp {
                }
 
                public ArrayInitializer (int count, Location loc)
+                       : this (new List<Expression> (count), loc)
                {
-                       elements = new List<Expression> (count);
-                       this.loc = loc;
                }
 
                public ArrayInitializer (Location loc)
@@ -5662,6 +5658,29 @@ namespace Mono.CSharp {
                {
                }
 
+               #region Properties
+
+               public int Count {
+                       get { return elements.Count; }
+               }
+
+               public Expression this [int index] {
+                       get {
+                               return elements [index];
+                       }
+               }
+
+               public BlockVariableDeclaration VariableDeclaration {
+                       get {
+                               return variable;
+                       }
+                       set {
+                               variable = value;
+                       }
+               }
+
+               #endregion
+
                public void Add (Expression expr)
                {
                        elements.Add (expr);
@@ -5681,24 +5700,30 @@ namespace Mono.CSharp {
                                target.elements.Add (element.Clone (clonectx));
                }
 
-               public int Count {
-                       get { return elements.Count; }
-               }
-
                protected override Expression DoResolve (ResolveContext rc)
                {
                        var current_field = rc.CurrentMemberDefinition as FieldBase;
-                       return new ArrayCreation (new TypeExpression (current_field.MemberType, current_field.Location), this).Resolve (rc);
+                       TypeExpression type;
+                       if (current_field != null) {
+                               type = new TypeExpression (current_field.MemberType, current_field.Location);
+                       } else if (variable != null) {
+                               if (variable.TypeExpression is VarExpr) {
+                                       rc.Report.Error (820, loc, "An implicitly typed local variable declarator cannot use an array initializer");
+                                       return EmptyExpression.Null;
+                               }
+
+                               type = new TypeExpression (variable.Variable.Type, variable.Variable.Location);
+                       } else {
+                               throw new NotImplementedException ("Unexpected array initializer context");
+                       }
+
+                       return new ArrayCreation (type, this).Resolve (rc);
                }
 
                public override void Emit (EmitContext ec)
                {
                        throw new InternalErrorException ("Missing Resolve call");
                }
-
-               public Expression this [int index] {
-                       get { return elements [index]; }
-               }
        }
 
        /// <summary>
@@ -5967,11 +5992,6 @@ namespace Mono.CSharp {
                //
                bool ResolveArrayType (ResolveContext ec)
                {
-                       if (requested_base_type is VarExpr) {
-                               ec.Report.Error (820, loc, "An implicitly typed local variable declarator cannot use an array initializer");
-                               return false;
-                       }
-                       
                        //
                        // Lookup the type
                        //
@@ -6567,8 +6587,8 @@ namespace Mono.CSharp {
 
                        var block = ec.CurrentBlock;
                        if (block != null) {
-                               if (block.Toplevel.ThisVariable != null)
-                                       variable_info = block.Toplevel.ThisVariable.VariableInfo;
+                               if (block.ParametersBlock.TopBlock.ThisVariable != null)
+                                       variable_info = block.ParametersBlock.TopBlock.ThisVariable.VariableInfo;
 
                                AnonymousExpression am = ec.CurrentAnonymousMethod;
                                if (am != null && ec.IsVariableCapturingRequired) {
@@ -6673,7 +6693,7 @@ namespace Mono.CSharp {
                        eclass = ExprClass.Variable;
                        type = TypeManager.runtime_argument_handle_type;
 
-                       if (ec.HasSet (ResolveContext.Options.FieldInitializerScope) || !ec.CurrentBlock.Toplevel.Parameters.HasArglist) {
+                       if (ec.HasSet (ResolveContext.Options.FieldInitializerScope) || !ec.CurrentBlock.ParametersBlock.Parameters.HasArglist) {
                                ec.Report.Error (190, loc,
                                        "The __arglist construct is valid only within a variable argument method");
                        }
@@ -7174,7 +7194,7 @@ namespace Mono.CSharp {
                public override FullNamedExpression ResolveAsTypeStep (IMemberContext ec, bool silent)
                {
                        if (alias == GlobalAlias) {
-                               expr = GlobalRootNamespace.Instance;
+                               expr = ec.Compiler.GlobalRootNamespace;
                                return base.ResolveAsTypeStep (ec, silent);
                        }
 
@@ -7223,7 +7243,7 @@ namespace Mono.CSharp {
                        return alias + "::" + name;
                }
 
-               public override Expression LookupNameExpression (ResolveContext rc, bool readMode, bool invocableOnly)
+               public override Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restrictions)
                {
                        return DoResolve (rc);
                }
@@ -7283,7 +7303,7 @@ namespace Mono.CSharp {
 
                Expression DoResolveName (ResolveContext rc, Expression right_side)
                {
-                       Expression e = LookupNameExpression (rc, right_side == null, false);
+                       Expression e = LookupNameExpression (rc, right_side == null ? MemberLookupRestrictions.ReadAccess : MemberLookupRestrictions.None);
                        if (e == null)
                                return null;
 
@@ -7301,7 +7321,7 @@ namespace Mono.CSharp {
                        return e;
                }
 
-               public override Expression LookupNameExpression (ResolveContext rc, bool readMode, bool invocableOnly)
+               public override Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restrictions)
                {
                        var sn = expr as SimpleName;
                        const ResolveFlags flags = ResolveFlags.VariableOrValue | ResolveFlags.Type;
@@ -7314,7 +7334,7 @@ namespace Mono.CSharp {
                        //
                        using (rc.Set (ResolveContext.Options.OmitStructFlowAnalysis)) {
                                if (sn != null) {
-                                       expr = sn.LookupNameExpression (rc, true, false);
+                                       expr = sn.LookupNameExpression (rc, MemberLookupRestrictions.ReadAccess | MemberLookupRestrictions.ExactArity);
 
                                        // Call resolve on expression which does have type set as we need expression type
                                        // TODO: I should probably ensure that the type is always set and leave resolve for the final
@@ -7377,7 +7397,7 @@ namespace Mono.CSharp {
                        bool errorMode = false;
                        Expression member_lookup;
                        while (true) {
-                               member_lookup = MemberLookup (errorMode ? null : rc, current_type, expr_type, Name, lookup_arity, invocableOnly, loc);
+                               member_lookup = MemberLookup (errorMode ? null : rc, current_type, expr_type, Name, lookup_arity, restrictions, loc);
                                if (member_lookup == null) {
                                        //
                                        // Try to look for extension method when member lookup failed
@@ -7424,7 +7444,7 @@ namespace Mono.CSharp {
 
                                current_type = null;
                                lookup_arity = 0;
-                               invocableOnly = false;
+                               restrictions &= ~MemberLookupRestrictions.InvocableOnly;
                                errorMode = true;
                        }
 
@@ -7550,7 +7570,7 @@ namespace Mono.CSharp {
                                return;
                        }
 
-                       var any_other_member = MemberLookup (null, rc.CurrentType, expr_type, Name, 0, false, loc);
+                       var any_other_member = MemberLookup (null, rc.CurrentType, expr_type, Name, 0, MemberLookupRestrictions.None, loc);
                        if (any_other_member != null) {
                                any_other_member.Error_UnexpectedKind (rc.Compiler.Report, null, "type", loc);
                                return;
@@ -8812,9 +8832,9 @@ namespace Mono.CSharp {
                                target = new DynamicMemberBinder (Name, args, loc);
                        } else {
 
-                               var member = MemberLookup (ec, ec.CurrentType, t, Name, 0, false, loc);
+                               var member = MemberLookup (ec, ec.CurrentType, t, Name, 0, MemberLookupRestrictions.ExactArity, loc);
                                if (member == null) {
-                                       member = Expression.MemberLookup (null, ec.CurrentType, t, Name, 0, false, loc);
+                                       member = Expression.MemberLookup (null, ec.CurrentType, t, Name, 0, MemberLookupRestrictions.ExactArity, loc);
 
                                        if (member != null) {
                                                // TODO: ec.Report.SymbolRelatedToPreviousError (member);
@@ -9011,7 +9031,9 @@ namespace Mono.CSharp {
                                                initializer.Resolve (ec);
                                                throw new InternalErrorException ("This line should never be reached");
                                        } else {
-                                               if (!ec.CurrentInitializerVariable.Type.ImplementsInterface (TypeManager.ienumerable_type)) {
+                                               var t = ec.CurrentInitializerVariable.Type;
+                                               // LAMESPEC: The collection must implement IEnumerable only, no dynamic support
+                                               if (!t.ImplementsInterface (TypeManager.ienumerable_type, false) && t != InternalType.Dynamic) {
                                                        ec.Report.Error (1922, loc, "A field or property `{0}' cannot be initialized with a collection " +
                                                                "object initializer because type `{1}' does not implement `{2}' interface",
                                                                ec.CurrentInitializerVariable.GetSignatureForError (),
index 70c8e750f788bac9c9f12a5daa2bc883ba2bcb6f..d0bef03c9ed2f482a8563690fbc00e17187eccc1 100644 (file)
@@ -208,11 +208,11 @@ namespace Mono.CSharp
                public override void Emit ()
                {
                        if (member_type == InternalType.Dynamic) {
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (FieldBuilder);
+                               Compiler.PredefinedAttributes.Dynamic.EmitAttribute (FieldBuilder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (member_type);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
+                                       var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                        if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type, 1))) {
                                                FieldBuilder.SetCustomAttribute (new CustomAttributeBuilder (pa.Constructor, new object[] { trans_flags }));
                                        }
@@ -220,7 +220,7 @@ namespace Mono.CSharp
                        }
 
                        if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
-                               PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (FieldBuilder);
+                               Compiler.PredefinedAttributes.CompilerGenerated.EmitAttribute (FieldBuilder);
 
                        if (OptAttributes != null) {
                                OptAttributes.Emit ();
@@ -436,7 +436,7 @@ namespace Mono.CSharp
                        buffer_size *= type_size;
                        EmitFieldSize (buffer_size);
 
-                       PredefinedAttributes.Get.UnsafeValueType.EmitAttribute (fixed_buffer_type);
+                       Compiler.PredefinedAttributes.UnsafeValueType.EmitAttribute (fixed_buffer_type);
 
                        base.Emit ();
                }
@@ -446,7 +446,7 @@ namespace Mono.CSharp
                        CustomAttributeBuilder cab;
                        PredefinedAttribute pa;
 
-                       pa = PredefinedAttributes.Get.StructLayout;
+                       pa = Compiler.PredefinedAttributes.StructLayout;
                        if (pa.Constructor == null &&
                                !pa.ResolveConstructor (Location, TypeManager.short_type))
                                        return;
@@ -468,7 +468,7 @@ namespace Mono.CSharp
                        if ((ModFlags & Modifiers.PRIVATE) != 0)
                                return;
 
-                       pa = PredefinedAttributes.Get.FixedBuffer;
+                       pa = Compiler.PredefinedAttributes.FixedBuffer;
                        if (pa.Constructor == null &&
                                !pa.ResolveConstructor (Location, TypeManager.type_type, TypeManager.int32_type))
                                return;
@@ -573,34 +573,29 @@ namespace Mono.CSharp
                        if (!base.Define ())
                                return false;
 
-                       try {
-                               Type[] required_modifier = null;
-                               if ((ModFlags & Modifiers.VOLATILE) != 0) {
-                                       if (TypeManager.isvolatile_type == null)
-                                               TypeManager.isvolatile_type = TypeManager.CoreLookupType (Compiler,
-                                                       "System.Runtime.CompilerServices", "IsVolatile", MemberKind.Class, true);
+                       Type[] required_modifier = null;
+                       if ((ModFlags & Modifiers.VOLATILE) != 0) {
+                               if (TypeManager.isvolatile_type == null)
+                                       TypeManager.isvolatile_type = TypeManager.CoreLookupType (Compiler,
+                                               "System.Runtime.CompilerServices", "IsVolatile", MemberKind.Class, true);
 
-                                       if (TypeManager.isvolatile_type != null)
-                                               required_modifier = new Type[] { TypeManager.isvolatile_type.GetMetaInfo () };
-                               }
+                               if (TypeManager.isvolatile_type != null)
+                                       required_modifier = new Type[] { TypeManager.isvolatile_type.GetMetaInfo () };
+                       }
 
-                               FieldBuilder = Parent.TypeBuilder.DefineField (
-                                       Name, member_type.GetMetaInfo (), required_modifier, null, ModifiersExtensions.FieldAttr (ModFlags));
+                       FieldBuilder = Parent.TypeBuilder.DefineField (
+                               Name, member_type.GetMetaInfo (), required_modifier, null, ModifiersExtensions.FieldAttr (ModFlags));
 
-                               spec = new FieldSpec (Parent.Definition, this, MemberType, FieldBuilder, ModFlags);
+                       spec = new FieldSpec (Parent.Definition, this, MemberType, FieldBuilder, ModFlags);
 
-                               // Don't cache inaccessible fields
-                               if ((ModFlags & Modifiers.BACKING_FIELD) == 0) {
-                                       Parent.MemberCache.AddMember (spec);
-                               }
+                       // Don't cache inaccessible fields
+                       if ((ModFlags & Modifiers.BACKING_FIELD) == 0) {
+                               Parent.MemberCache.AddMember (spec);
+                       }
 
-                               if (initializer != null) {
-                                       ((TypeContainer) Parent).RegisterFieldForInitialization (this,
-                                               new FieldInitializer (spec, initializer, this));
-                               }
-                       } catch (ArgumentException) {
-                               Report.RuntimeMissingSupport (Location, "`void' or `void*' field type");
-                               return false;
+                       if (initializer != null) {
+                               ((TypeContainer) Parent).RegisterFieldForInitialization (this,
+                                       new FieldInitializer (spec, initializer, this));
                        }
 
                        if (declarators != null) {
index bc35e3591e9925c42d1eadcd95332a78336a3b06..93c0c3ebb1b4bcf707e071afd7650c84f86516a0 100644 (file)
@@ -471,6 +471,7 @@ namespace Mono.CSharp
                        CurrentUsageVector.SetFieldAssigned (vi, name);
                }
 
+#if DEBUG
                public override string ToString ()
                {
                        StringBuilder sb = new StringBuilder ();
@@ -493,6 +494,7 @@ namespace Mono.CSharp
                        sb.Append (")");
                        return sb.ToString ();
                }
+#endif
 
                public string Name {
                        get { return String.Format ("{0} ({1}:{2}:{3})", GetType (), id, Type, Location); }
@@ -639,7 +641,7 @@ namespace Mono.CSharp
        {
                Iterator iterator;
                public FlowBranchingIterator (FlowBranching parent, Iterator iterator)
-                       : base (parent, BranchingType.Iterator, SiblingType.Block, null, iterator.Location)
+                       : base (parent, BranchingType.Iterator, SiblingType.Block, iterator.Block, iterator.Location)
                {
                        this.iterator = iterator;
                }
@@ -655,7 +657,7 @@ namespace Mono.CSharp
        {
                UsageVector return_origins;
 
-               public FlowBranchingToplevel (FlowBranching parent, ToplevelBlock stmt)
+               public FlowBranchingToplevel (FlowBranching parent, ParametersBlock stmt)
                        : base (parent, BranchingType.Toplevel, SiblingType.Conditional, stmt, stmt.loc)
                {
                }
@@ -714,10 +716,10 @@ namespace Mono.CSharp
                protected override UsageVector Merge ()
                {
                        for (UsageVector origin = return_origins; origin != null; origin = origin.Next)
-                               Block.Toplevel.CheckOutParameters (origin, origin.Location);
+                               Block.ParametersBlock.CheckOutParameters (origin, origin.Location);
 
                        UsageVector vector = base.Merge ();
-                       Block.Toplevel.CheckOutParameters (vector, Block.loc);
+                       Block.ParametersBlock.CheckOutParameters (vector, Block.loc);
                        // Note: we _do_not_ merge in the return origins
                        return vector;
                }
@@ -1341,7 +1343,7 @@ namespace Mono.CSharp
                // </summary>
                public readonly bool IsParameter;
 
-               public readonly LocalInfo LocalInfo;
+               public readonly LocalVariable LocalInfo;
 
                readonly VariableInfo Parent;
                VariableInfo[] sub_info;
@@ -1389,8 +1391,8 @@ namespace Mono.CSharp
                                sub_info = new VariableInfo [0];
                }
 
-               public VariableInfo (LocalInfo local_info, int offset)
-                       : this (local_info.Name, local_info.VariableType, offset)
+               public VariableInfo (LocalVariable local_info, int offset)
+                       : this (local_info.Name, local_info.Type, offset)
                {
                        this.LocalInfo = local_info;
                        this.IsParameter = false;
@@ -1738,7 +1740,7 @@ namespace Mono.CSharp
                public void SetRange (int offset, int length)
                {
                        if (offset > Count || offset + length > Count)
-                               throw new ArgumentOutOfRangeException ();
+                               throw new ArgumentOutOfRangeException ("flow-analysis");
 
                        if (shared == null && vector == null)
                                return;
index e05c459377da72a5f2ccb5524c1318d955fd7288..3f3d7be5a396a70a07f2e257908421c2c20d4fcb 100644 (file)
@@ -1782,7 +1782,7 @@ namespace Mono.CSharp {
                        if (constraints == null)
                                return true;
 
-                       return ConstraintChecker.CheckAll (ec, open_type, args.Arguments, constraints, loc);
+                       return new ConstraintChecker(ec).CheckAll (open_type, args.Arguments, constraints, loc);
                }
        
                public override bool CheckAccessLevel (IMemberContext mc)
@@ -1858,23 +1858,48 @@ namespace Mono.CSharp {
                }
        }
 
-       static class ConstraintChecker
+       struct ConstraintChecker
        {
+               IMemberContext mc;
+               bool ignore_inferred_dynamic;
+
+               public ConstraintChecker (IMemberContext ctx)
+               {
+                       this.mc = ctx;
+                       ignore_inferred_dynamic = false;
+               }
+
+               #region Properties
+
+               public bool IgnoreInferredDynamic {
+                       get {
+                               return ignore_inferred_dynamic;
+                       }
+                       set {
+                               ignore_inferred_dynamic = value;
+                       }
+               }
+
+               #endregion
+
                //
                // Checks all type arguments againts type parameters constraints
                // NOTE: It can run in probing mode when `mc' is null
                //
-               public static bool CheckAll (IMemberContext mc, MemberSpec context, TypeSpec[] targs, TypeParameterSpec[] tparams, Location loc)
+               public bool CheckAll (MemberSpec context, TypeSpec[] targs, TypeParameterSpec[] tparams, Location loc)
                {
                        for (int i = 0; i < tparams.Length; i++) {
-                               if (!CheckConstraint (mc, context, targs [i], tparams [i], loc))
+                               if (ignore_inferred_dynamic && targs[i] == InternalType.Dynamic)
+                                       continue;
+
+                               if (!CheckConstraint (context, targs [i], tparams [i], loc))
                                        return false;
                        }
 
                        return true;
                }
 
-               static bool CheckConstraint (IMemberContext mc, MemberSpec context, TypeSpec atype, TypeParameterSpec tparam, Location loc)
+               bool CheckConstraint (MemberSpec context, TypeSpec atype, TypeParameterSpec tparam, Location loc)
                {
                        //
                        // First, check the `class' and `struct' constraints.
@@ -1956,22 +1981,47 @@ namespace Mono.CSharp {
                        return ok;
                }
 
-               static bool CheckConversion (IMemberContext mc, MemberSpec context, TypeSpec atype, TypeParameterSpec tparam, TypeSpec ttype, Location loc)
+               static bool HasDynamicTypeArgument (TypeSpec[] targs)
+               {
+                       for (int i = 0; i < targs.Length; ++i) {
+                               var targ = targs [i];
+                               if (targ == InternalType.Dynamic)
+                                       return true;
+
+                               if (HasDynamicTypeArgument (targ.TypeArguments))
+                                       return true;
+                       }
+
+                       return false;
+               }
+
+               bool CheckConversion (IMemberContext mc, MemberSpec context, TypeSpec atype, TypeParameterSpec tparam, TypeSpec ttype, Location loc)
                {
                        var expr = new EmptyExpression (atype);
                        if (Convert.ImplicitStandardConversionExists (expr, ttype))
                                return true;
 
+                       //
+                       // When partial/full type inference finds a dynamic type argument delay
+                       // the constraint check to runtime, it can succeed for real underlying
+                       // dynamic type
+                       //
+                       if (ignore_inferred_dynamic && HasDynamicTypeArgument (ttype.TypeArguments))
+                               return true;
+
                        if (mc != null) {
                                mc.Compiler.Report.SymbolRelatedToPreviousError (tparam);
                                if (TypeManager.IsValueType (atype)) {
-                                       mc.Compiler.Report.Error (315, loc, "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing conversion from `{0}' to `{3}'",
+                                       mc.Compiler.Report.Error (315, loc,
+                                               "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing conversion from `{0}' to `{3}'",
                                                atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
                                } else if (atype.IsGenericParameter) {
-                                       mc.Compiler.Report.Error (314, loc, "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing or type parameter conversion from `{0}' to `{3}'",
+                                       mc.Compiler.Report.Error (314, loc,
+                                               "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing or type parameter conversion from `{0}' to `{3}'",
                                                atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
                                } else {
-                                       mc.Compiler.Report.Error (311, loc, "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no implicit reference conversion from `{0}' to `{3}'",
+                                       mc.Compiler.Report.Error (311, loc,
+                                               "The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no implicit reference conversion from `{0}' to `{3}'",
                                                atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
                                }
                        }
@@ -1979,7 +2029,7 @@ namespace Mono.CSharp {
                        return false;
                }
 
-               static bool HasDefaultConstructor (TypeSpec atype)
+               bool HasDefaultConstructor (TypeSpec atype)
                {
                        var tp = atype as TypeParameterSpec;
                        if (tp != null) {
@@ -2076,25 +2126,26 @@ namespace Mono.CSharp {
                {
                        TypeParameterName[] names = MemberName.TypeArguments.GetDeclarations ();
                        string[] snames = new string [names.Length];
+                       var block = m.Block;
                        for (int i = 0; i < names.Length; i++) {
                                string type_argument_name = names[i].Name;
-                               int idx = parameters.GetParameterIndexByName (type_argument_name);
 
-                               if (idx >= 0) {
-                                       var b = m.Block;
-                                       if (b == null)
-                                               b = new ToplevelBlock (Compiler, Location);
+                               if (block == null) {
+                                       int idx = parameters.GetParameterIndexByName (type_argument_name);
+                                       if (idx >= 0) {
+                                               var b = m.Block;
+                                               if (b == null)
+                                                       b = new ToplevelBlock (Compiler, Location);
 
-                                       b.Error_AlreadyDeclaredTypeParameter (parameters [i].Location,
-                                               type_argument_name, "method parameter");
+                                               b.Error_AlreadyDeclaredTypeParameter (type_argument_name, parameters[i].Location);
+                                       }
+                               } else {
+                                       INamedBlockVariable variable = null;
+                                       block.GetLocalName (type_argument_name, m.Block, ref variable);
+                                       if (variable != null)
+                                               variable.Block.Error_AlreadyDeclaredTypeParameter (type_argument_name, variable.Location);
                                }
 
-                               if (m.Block != null) {
-                                       var ikv = m.Block.GetKnownVariable (type_argument_name);
-                                       if (ikv != null)
-                                               ikv.Block.Error_AlreadyDeclaredTypeParameter (ikv.Location, type_argument_name, "local variable");
-                               }
-                               
                                snames[i] = type_argument_name;
                        }
 
@@ -2166,76 +2217,34 @@ namespace Mono.CSharp {
 
                        return Variance.None;
                }
-
-               /// <summary>
-               ///   Type inference.  Try to infer the type arguments from `method',
-               ///   which is invoked with the arguments `arguments'.  This is used
-               ///   when resolving an Invocation or a DelegateInvocation and the user
-               ///   did not explicitly specify type arguments.
-               /// </summary>
-               public static int InferTypeArguments (ResolveContext ec, Arguments arguments, ref MethodSpec method)
-               {
-                       ATypeInference ti = ATypeInference.CreateInstance (arguments);
-                       TypeSpec[] i_args = ti.InferMethodArguments (ec, method);
-                       if (i_args == null)
-                               return ti.InferenceScore;
-
-                       if (i_args.Length == 0)
-                               return 0;
-
-                       method = method.MakeGenericMethod (i_args);
-                       return 0;
-               }
-       }
-
-       abstract class ATypeInference
-       {
-               protected readonly Arguments arguments;
-               protected readonly int arg_count;
-
-               protected ATypeInference (Arguments arguments)
-               {
-                       this.arguments = arguments;
-                       if (arguments != null)
-                               arg_count = arguments.Count;
-               }
-
-               public static ATypeInference CreateInstance (Arguments arguments)
-               {
-                       return new TypeInference (arguments);
-               }
-
-               public virtual int InferenceScore {
-                       get {
-                               return int.MaxValue;
-                       }
-               }
-
-               public abstract TypeSpec[] InferMethodArguments (ResolveContext ec, MethodSpec method);
        }
 
        //
        // Implements C# type inference
        //
-       class TypeInference : ATypeInference
+       class TypeInference
        {
                //
                // Tracks successful rate of type inference
                //
                int score = int.MaxValue;
+               readonly Arguments arguments;
+               readonly int arg_count;
 
                public TypeInference (Arguments arguments)
-                       : base (arguments)
                {
+                       this.arguments = arguments;
+                       if (arguments != null)
+                               arg_count = arguments.Count;
                }
 
-               public override int InferenceScore {
+               public int InferenceScore {
                        get {
                                return score;
                        }
                }
 
-               public override TypeSpec[] InferMethodArguments (ResolveContext ec, MethodSpec method)
+               public TypeSpec[] InferMethodArguments (ResolveContext ec, MethodSpec method)
                {
                        var method_generic_args = method.GenericDefinition.TypeParameters;
                        TypeInferenceContext context = new TypeInferenceContext (method_generic_args);
index 1a7e3c88b07ec9f9c47623b3c0595479398698fb..8c4cfa0f780b4de995a5ad71aa35865c705c02dd 100644 (file)
@@ -566,13 +566,11 @@ namespace Mono.CSharp
                                } else {
                                        kind = MemberKind.Class;
 
-                                       if (type == typeof (object)) {
 #if NET_4_0
-                                               var pa = PredefinedAttributes.Get.Dynamic.Type;
-                                               if (pa != null && type.IsDefined (typeof (DynamicAttribute), false))
-                                                       return InternalType.Dynamic;
-#endif
+                                       if (type == typeof (object) && type.IsDefined (typeof (DynamicAttribute), false)) {
+                                               return InternalType.Dynamic;
                                        }
+#endif
 
                                        if ((ma & TypeAttributes.Sealed) != 0) {
                                                mod |= Modifiers.SEALED;
index 5511b0a35300d609aa9b6638a3946b4090ffaef9..0cfccd0759e30e75ebce4eef3323a71557d7da67 100644 (file)
@@ -35,10 +35,6 @@ namespace Mono.CSharp {
 
                public static bool CheckContext (ResolveContext ec, Location loc)
                {
-                       //
-                       // We can't use `ec.InUnsafe' here because it's allowed to have an iterator
-                       // inside an unsafe class.  See test-martin-29.cs for an example.
-                       //
                        if (!ec.CurrentAnonymousMethod.IsIterator) {
                                ec.Report.Error (1621, loc,
                                              "The yield statement cannot be used inside " +
@@ -119,66 +115,8 @@ namespace Mono.CSharp {
                }
        }
 
-       //
-       // Wraps method block into iterator wrapper block
-       //
-       class IteratorStatement : Statement
-       {
-               Iterator iterator;
-               Block original_block;
-
-               public IteratorStatement (Iterator iterator, Block original_block)
-               {
-                       this.iterator = iterator;
-                       this.original_block = original_block;
-                       this.loc = iterator.Location;
-               }
-
-               protected override void CloneTo (CloneContext clonectx, Statement target)
-               {
-                       IteratorStatement t = (IteratorStatement) target;
-                       t.original_block = (ExplicitBlock) original_block.Clone (clonectx);
-                       t.iterator = (Iterator) iterator.Clone (clonectx);
-               }
-
-               public override bool Resolve (BlockContext ec)
-               {
-                       ec.StartFlowBranching (iterator);
-                       bool ok = original_block.Resolve (ec);
-                       ec.EndFlowBranching ();
-                       return ok;
-               }
-
-               protected override void DoEmit (EmitContext ec)
-               {
-                       iterator.EmitMoveNext (ec, original_block);
-               }
-       }
-
        public class IteratorStorey : AnonymousMethodStorey
        {
-               class IteratorMethod : Method
-               {
-                       readonly IteratorStorey host;
-
-                       public IteratorMethod (IteratorStorey host, FullNamedExpression returnType, Modifiers mod, MemberName name)
-                               : base (host, null, returnType, mod | Modifiers.DEBUGGER_HIDDEN | Modifiers.COMPILER_GENERATED,
-                                 name, ParametersCompiled.EmptyReadOnlyParameters, null)
-                       {
-                               this.host = host;
-
-                               Block = new ToplevelBlock (Compiler, host.Iterator.Container.Toplevel, ParametersCompiled.EmptyReadOnlyParameters, Location);
-                       }
-
-                       public override EmitContext CreateEmitContext (ILGenerator ig)
-                       {
-                               EmitContext ec = new EmitContext (this, ig, MemberType);
-
-                               ec.CurrentAnonymousMethod = host.Iterator;
-                               return ec;
-                       }
-               }
-
                class GetEnumeratorMethod : IteratorMethod
                {
                        sealed class GetEnumeratorStatement : Statement
@@ -284,7 +222,7 @@ namespace Mono.CSharp {
                        }
 
                        public GetEnumeratorMethod (IteratorStorey host, FullNamedExpression returnType, MemberName name)
-                               : base (host, returnType, 0, name)
+                               : base (host, returnType, Modifiers.DEBUGGER_HIDDEN, name)
                        {
                                Block.AddStatement (new GetEnumeratorStatement (host, this));
                        }
@@ -319,11 +257,11 @@ namespace Mono.CSharp {
                        }
 
                        public DisposeMethod (IteratorStorey host)
-                               : base (host, new TypeExpression (TypeManager.void_type, host.Location), Modifiers.PUBLIC, new MemberName ("Dispose", host.Location))
+                               : base (host, new TypeExpression (TypeManager.void_type, host.Location), Modifiers.PUBLIC | Modifiers.DEBUGGER_HIDDEN,
+                                       new MemberName ("Dispose", host.Location))
                        {
                                host.AddMethod (this);
 
-                               Block = new ToplevelBlock (Compiler, host.Iterator.Container, ParametersCompiled.EmptyReadOnlyParameters, Location);
                                Block.AddStatement (new DisposeMethodStatement (host.Iterator));
                        }
                }
@@ -386,7 +324,7 @@ namespace Mono.CSharp {
                int local_name_idx;
 
                public IteratorStorey (Iterator iterator)
-                       : base (iterator.Container.Toplevel, iterator.Host,
+                       : base (iterator.Container.ParametersBlock, iterator.Host,
                          iterator.OriginalMethod as MemberBase, iterator.GenericMethod == null ? null : iterator.GenericMethod.CurrentTypeParameters, "Iterator")
                {
                        this.Iterator = iterator;
@@ -445,7 +383,7 @@ namespace Mono.CSharp {
                        return base.ResolveBaseTypes (out base_class);
                }
 
-               protected override string GetVariableMangledName (LocalInfo local_info)
+               protected override string GetVariableMangledName (LocalVariable local_info)
                {
                        return "<" + local_info.Name + ">__" + local_name_idx++.ToString ();
                }
@@ -563,12 +501,60 @@ namespace Mono.CSharp {
                }
        }
 
+       class IteratorMethod : Method
+       {
+               readonly IteratorStorey host;
+
+               public IteratorMethod (IteratorStorey host, FullNamedExpression returnType, Modifiers mod, MemberName name)
+                       : base (host, null, returnType, mod | Modifiers.COMPILER_GENERATED,
+                         name, ParametersCompiled.EmptyReadOnlyParameters, null)
+               {
+                       this.host = host;
+
+                       Block = new ToplevelBlock (host.Compiler, ParametersCompiled.EmptyReadOnlyParameters, Location);
+               }
+
+               public override EmitContext CreateEmitContext (ILGenerator ig)
+               {
+                       EmitContext ec = new EmitContext (this, ig, MemberType);
+
+                       ec.CurrentAnonymousMethod = host.Iterator;
+                       return ec;
+               }
+       }
+
        //
        // Iterators are implemented as hidden anonymous block
        //
-       public class Iterator : AnonymousExpression {
+       public class Iterator : AnonymousExpression
+       {
+               sealed class MoveNextMethodStatement : Statement
+               {
+                       Iterator iterator;
+
+                       public MoveNextMethodStatement (Iterator iterator)
+                       {
+                               this.iterator = iterator;
+                               this.loc = iterator.Location;
+                       }
+
+                       protected override void CloneTo (CloneContext clonectx, Statement target)
+                       {
+                               throw new NotSupportedException ();
+                       }
+
+                       public override bool Resolve (BlockContext ec)
+                       {
+                               return true;
+                       }
+
+                       protected override void DoEmit (EmitContext ec)
+                       {
+                               iterator.EmitMoveNext (ec);
+                       }
+               }
+
                public readonly IMethodData OriginalMethod;
-               AnonymousMethodMethod method;
                public readonly TypeContainer Host;
                public readonly bool IsEnumerable;
                List<ResumableStatement> resume_points;
@@ -597,7 +583,7 @@ namespace Mono.CSharp {
 
                public readonly TypeSpec OriginalIteratorType;
 
-               readonly IteratorStorey IteratorHost;
+               IteratorStorey IteratorHost;
 
                public enum State {
                        Running = -3, // Used only in CurrentPC, never stored into $PC
@@ -632,13 +618,13 @@ namespace Mono.CSharp {
                        ec.Emit (OpCodes.Ret);
                }
 
-               internal void EmitMoveNext (EmitContext ec, Block original_block)
+               void EmitMoveNext (EmitContext ec)
                {
                        move_next_ok = ec.DefineLabel ();
                        move_next_error = ec.DefineLabel ();
 
                        if (resume_points == null) {
-                               EmitMoveNext_NoResumePoints (ec, original_block);
+                               EmitMoveNext_NoResumePoints (ec, block);
                                return;
                        }
 
@@ -678,7 +664,7 @@ namespace Mono.CSharp {
                        ec.MarkLabel (labels [0]);
 
                        SymbolWriter.StartIteratorBody (ec);
-                       original_block.Emit (ec);
+                       block.Emit (ec);
                        SymbolWriter.EndIteratorBody (ec);
 
                        SymbolWriter.StartIteratorDispatcher (ec);
@@ -777,34 +763,29 @@ namespace Mono.CSharp {
                        ec.MarkLabel (resume_point);
                }
 
-               public override string ContainerType {
-                       get { return "iterator"; }
-               }
-
-               public override bool IsIterator {
-                       get { return true; }
-               }
-
-               public override AnonymousMethodStorey Storey {
-                       get { return IteratorHost; }
-               }
-
                //
                // Our constructor
                //
-               private Iterator (CompilerContext ctx, IMethodData method, TypeContainer host, TypeSpec iterator_type, bool is_enumerable)
-                       : base (
-                               new ToplevelBlock (ctx, method.Block, ParametersCompiled.EmptyReadOnlyParameters, method.Block.StartLocation),
-                               TypeManager.bool_type,
-                               method.Location)
+               public Iterator (ParametersBlock block, IMethodData method, TypeContainer host, TypeSpec iterator_type, bool is_enumerable)
+                       : base (block, TypeManager.bool_type, block.StartLocation)
                {
                        this.OriginalMethod = method;
                        this.OriginalIteratorType = iterator_type;
                        this.IsEnumerable = is_enumerable;
                        this.Host = host;
                        this.type = method.ReturnType;
+               }
+
+               public override string ContainerType {
+                       get { return "iterator"; }
+               }
 
-                       IteratorHost = Block.ChangeToIterator (this, method.Block);
+               public override bool IsIterator {
+                       get { return true; }
+               }
+
+               public override AnonymousMethodStorey Storey {
+                       get { return IteratorHost; }
                }
 
                public override string GetSignatureForError ()
@@ -814,14 +795,19 @@ namespace Mono.CSharp {
 
                protected override Expression DoResolve (ResolveContext ec)
                {
-                       method = new AnonymousMethodMethod (Storey,
-                               this, Storey, null, new TypeExpression (TypeManager.bool_type, loc),
-                               Modifiers.PUBLIC, OriginalMethod.GetSignatureForError (),
-                               new MemberName ("MoveNext", Location),
-                               ParametersCompiled.EmptyReadOnlyParameters);
+                       IteratorHost = (IteratorStorey) block.TopBlock.AnonymousMethodStorey;
+
+                       BlockContext ctx = new BlockContext (ec, block, ReturnType);
+                       ctx.CurrentAnonymousMethod = this;
 
-                       if (Compatible (ec) == null)
-                               return null;
+                       ctx.StartFlowBranching (this, ec.CurrentBranching);
+                       Block.Resolve (ctx);
+                       ctx.EndFlowBranching ();
+
+                       var move_next = new IteratorMethod (IteratorHost, new TypeExpression (TypeManager.bool_type, loc),
+                               Modifiers.PUBLIC, new MemberName ("MoveNext", Location));
+                       move_next.Block.AddStatement (new MoveNextMethodStatement (this));
+                       IteratorHost.AddMethod (move_next);
 
                        eclass = ExprClass.Value;
                        return this;
@@ -832,7 +818,7 @@ namespace Mono.CSharp {
                        //
                        // Load Iterator storey instance
                        //
-                       method.Storey.Instance.Emit (ec);
+                       IteratorHost.Instance.Emit (ec);
 
                        //
                        // Initialize iterator PC when it's unitialized
@@ -899,11 +885,9 @@ namespace Mono.CSharp {
 
                        if ((modifiers & Modifiers.UNSAFE) != 0) {
                                ctx.Report.Error (1629, method.Location, "Unsafe code may not appear in iterators");
-                               return;
                        }
 
-                       // TODO: Ugly leftover
-                       new Iterator (ctx, method, parent, iterator_type, is_enumerable);
+                       method.Block.WrapIntoIterator (method, parent, iterator_type, is_enumerable);
                }
 
                static bool CheckType (TypeSpec ret, out TypeSpec original_iterator_type, out bool is_enumerable)
index a7c3d1420bdbd33a0dc45f00e3d2b5048003189c..42a096dab1289e619b4676f6619331d48366684e 100644 (file)
@@ -92,7 +92,7 @@ namespace Mono.CSharp {
 
                                ptypes [i] = d_param;
                                ImplicitLambdaParameter ilp = (ImplicitLambdaParameter) Parameters.FixedParameters [i];
-                               ilp.Type = d_param;
+                               ilp.SetParameterType (d_param);
                                ilp.Resolve (null, i);
                        }
 
@@ -100,7 +100,7 @@ namespace Mono.CSharp {
                        return Parameters;
                }
 
-               protected override AnonymousMethodBody CompatibleMethodFactory (TypeSpec returnType, TypeSpec delegateType, ParametersCompiled p, ToplevelBlock b)
+               protected override AnonymousMethodBody CompatibleMethodFactory (TypeSpec returnType, TypeSpec delegateType, ParametersCompiled p, ParametersBlock b)
                {
                        return new LambdaMethod (p, b, returnType, delegateType, loc);
                }
@@ -126,7 +126,7 @@ namespace Mono.CSharp {
        class LambdaMethod : AnonymousMethodBody
        {
                public LambdaMethod (ParametersCompiled parameters,
-                                       ToplevelBlock block, TypeSpec return_type, TypeSpec delegate_type,
+                                       ParametersBlock block, TypeSpec return_type, TypeSpec delegate_type,
                                        Location loc)
                        : base (parameters, block, return_type, delegate_type, loc)
                {
index 8578323eb8fc0d8a2d13d46bf7dd3c5e78464798..07c5c0aa078ce83075f1602644b7f2cc00ecbbc7 100644 (file)
@@ -194,7 +194,8 @@ namespace Mono.CSharp.Linq
 
                protected virtual Parameter CreateChildrenParameters (Parameter parameter)
                {
-                       return parameter;
+                       // Have to clone the parameter for any children use, it carries block sensitive data
+                       return parameter.Clone ();
                }
 
                protected virtual void CreateArguments (ResolveContext ec, Parameter parameter, ref Arguments args)
@@ -203,7 +204,7 @@ namespace Mono.CSharp.Linq
 
                        LambdaExpression selector = new LambdaExpression (loc);
 
-                       block.SetParameter (parameter.Clone ());
+                       block.SetParameter (parameter);
                        selector.Block = block;
                        selector.Block.AddStatement (new ContextualReturn (expr));
 
@@ -238,8 +239,8 @@ namespace Mono.CSharp.Linq
        {
                sealed class RangeAnonymousTypeParameter : AnonymousTypeParameter
                {
-                       public RangeAnonymousTypeParameter (Expression initializer, SimpleMemberName parameter)
-                               : base (initializer, parameter.Value, parameter.Location)
+                       public RangeAnonymousTypeParameter (Expression initializer, RangeVariable parameter)
+                               : base (initializer, parameter.Name, parameter.Location)
                        {
                        }
 
@@ -250,12 +251,29 @@ namespace Mono.CSharp.Linq
                        }
                }
 
-               protected SimpleMemberName range_variable;
+               class RangeParameterReference : ParameterReference
+               {
+                       Parameter parameter;
+
+                       public RangeParameterReference (Parameter p)
+                               : base (null, p.Location)
+                       {
+                               this.parameter = p;
+                       }
+
+                       protected override Expression DoResolve (ResolveContext ec)
+                       {
+                               pi = ec.CurrentBlock.ParametersBlock.GetParameterInfo (parameter);
+                               return base.DoResolve (ec);
+                       }
+               }
+
+               protected RangeVariable identifier;
 
-               protected ARangeVariableQueryClause (QueryBlock block, SimpleMemberName identifier, Expression expr, Location loc)
+               protected ARangeVariableQueryClause (QueryBlock block, RangeVariable identifier, Expression expr, Location loc)
                        : base (block, expr, loc)
                {
-                       range_variable = identifier;
+                       this.identifier = identifier;
                }
 
                public FullNamedExpression IdentifierType { get; set; }
@@ -268,26 +286,115 @@ namespace Mono.CSharp.Linq
 
                protected override Parameter CreateChildrenParameters (Parameter parameter)
                {
-                       return new QueryBlock.TransparentParameter (parameter, GetIntoVariable ());
+                       return new QueryBlock.TransparentParameter (parameter.Clone (), GetIntoVariable ());
                }
 
-               protected static Expression CreateRangeVariableType (ResolveContext rc, Parameter parameter, SimpleMemberName name, Expression init)
+               protected static Expression CreateRangeVariableType (ResolveContext rc, Parameter parameter, RangeVariable name, Expression init)
                {
                        var args = new List<AnonymousTypeParameter> (2);
-                       args.Add (new AnonymousTypeParameter (parameter));
+
+                       //
+                       // The first argument is the reference to the parameter
+                       //
+                       args.Add (new AnonymousTypeParameter (new RangeParameterReference (parameter), parameter.Name, parameter.Location));
+
+                       //
+                       // The second argument is the linq expression
+                       //
                        args.Add (new RangeAnonymousTypeParameter (init, name));
+
+                       //
+                       // Create unique anonymous type
+                       //
                        return new NewAnonymousType (args, rc.MemberContext.CurrentMemberDefinition.Parent, name.Location);
                }
 
-               protected virtual SimpleMemberName GetIntoVariable ()
+               protected virtual RangeVariable GetIntoVariable ()
                {
-                       return range_variable;
+                       return identifier;
+               }
+       }
+
+       public sealed class RangeVariable : INamedBlockVariable
+       {
+               Block block;
+
+               public RangeVariable (string name, Location loc)
+               {
+                       Name = name;
+                       Location = loc;
+               }
+
+               #region Properties
+
+               public Block Block {
+                       get {
+                               return block;
+                       }
+                       set {
+                               block = value;
+                       }
+               }
+
+               public bool IsDeclared {
+                       get {
+                               return true;
+                       }
+               }
+
+               public Location Location { get; private set; }
+
+               public string Name { get; private set; }
+
+               #endregion
+
+               public Expression CreateReferenceExpression (ResolveContext rc, Location loc)
+               {
+                       Expression expr = null;
+
+                       // 
+                       // We know the variable name is somewhere in the scope. This generates
+                       // an access expression from current block
+                       //
+                       var pb = rc.CurrentBlock.ParametersBlock;
+                       while (true) {
+                               if (pb is QueryBlock) {
+                                       for (int i = pb.Parameters.Count - 1; i >= 0; --i) {
+                                               var p = pb.Parameters[i];
+                                               if (p.Name == Name)
+                                                       return pb.GetParameterReference (i, loc);
+
+                                               var tp = p as QueryBlock.TransparentParameter;
+                                               while (tp != null) {
+                                                       if (expr == null)
+                                                               expr = pb.GetParameterReference (i, loc);
+                                                       else
+                                                               expr = new TransparentMemberAccess (expr, tp.Name);
+
+                                                       if (tp.Identifier == Name)
+                                                               return new TransparentMemberAccess (expr, Name);
+
+                                                       if (tp.Parent.Name == Name)
+                                                               return new TransparentMemberAccess (expr, Name);
+
+                                                       tp = tp.Parent as QueryBlock.TransparentParameter;
+                                               }
+                                       }
+
+                                       expr = null;
+                               }
+
+                               if (pb == block)
+                                       return null;
+
+                               pb = pb.Parent.ParametersBlock;
+                       }
                }
        }
 
        class QueryStartClause : ARangeVariableQueryClause
        {
-               public QueryStartClause (QueryBlock block, Expression expr, SimpleMemberName identifier, Location loc)
+               public QueryStartClause (QueryBlock block, Expression expr, RangeVariable identifier, Location loc)
                        : base (block, identifier, expr, loc)
                {
                        block.AddRangeVariable (identifier);
@@ -314,7 +421,7 @@ namespace Mono.CSharp.Linq
                        if (parameter == null)
                                lSide = expr;
 
-                       return next.BuildQueryClause (ec, lSide, new ImplicitLambdaParameter (range_variable.Value, range_variable.Location));
+                       return next.BuildQueryClause (ec, lSide, new ImplicitLambdaParameter (identifier.Name, identifier.Location));
                }
 
                protected override Expression DoResolve (ResolveContext ec)
@@ -379,7 +486,7 @@ namespace Mono.CSharp.Linq
        {
                QueryBlock inner_selector, outer_selector;
 
-               public Join (QueryBlock block, SimpleMemberName lt, Expression inner, QueryBlock outerSelector, QueryBlock innerSelector, Location loc)
+               public Join (QueryBlock block, RangeVariable lt, Expression inner, QueryBlock outerSelector, QueryBlock innerSelector, Location loc)
                        : base (block, lt, inner, loc)
                {
                        this.outer_selector = outerSelector;
@@ -400,7 +507,7 @@ namespace Mono.CSharp.Linq
                        lambda.Block = outer_selector;
                        args.Add (new Argument (lambda));
 
-                       inner_selector.SetParameter (new ImplicitLambdaParameter (range_variable.Value, range_variable.Location));
+                       inner_selector.SetParameter (new ImplicitLambdaParameter (identifier.Name, identifier.Location));
                        lambda = new LambdaExpression (inner_selector.StartLocation);
                        lambda.Block = inner_selector;
                        args.Add (new Argument (lambda));
@@ -423,16 +530,16 @@ namespace Mono.CSharp.Linq
 
        public class GroupJoin : Join
        {
-               readonly SimpleMemberName into;
+               readonly RangeVariable into;
 
-               public GroupJoin (QueryBlock block, SimpleMemberName lt, Expression inner,
-                       QueryBlock outerSelector, QueryBlock innerSelector, SimpleMemberName into, Location loc)
+               public GroupJoin (QueryBlock block, RangeVariable lt, Expression inner,
+                       QueryBlock outerSelector, QueryBlock innerSelector, RangeVariable into, Location loc)
                        : base (block, lt, inner, outerSelector, innerSelector, loc)
                {
                        this.into = into;
                }
 
-               protected override SimpleMemberName GetIntoVariable ()
+               protected override RangeVariable GetIntoVariable ()
                {
                        return into;
                }
@@ -444,14 +551,14 @@ namespace Mono.CSharp.Linq
 
        public class Let : ARangeVariableQueryClause
        {
-               public Let (QueryBlock block, SimpleMemberName identifier, Expression expr, Location loc)
+               public Let (QueryBlock block, RangeVariable identifier, Expression expr, Location loc)
                        : base (block, identifier, expr, loc)
                {
                }
 
                protected override void CreateArguments (ResolveContext ec, Parameter parameter, ref Arguments args)
                {
-                       expr = CreateRangeVariableType (ec, parameter, range_variable, expr);
+                       expr = CreateRangeVariableType (ec, parameter, identifier, expr);
                        base.CreateArguments (ec, parameter, ref args);
                }
 
@@ -487,7 +594,7 @@ namespace Mono.CSharp.Linq
 
        public class SelectMany : ARangeVariableQueryClause
        {
-               public SelectMany (QueryBlock block, SimpleMemberName identifier, Expression expr, Location loc)
+               public SelectMany (QueryBlock block, RangeVariable identifier, Expression expr, Location loc)
                        : base (block, identifier, expr, loc)
                {
                }
@@ -505,7 +612,7 @@ namespace Mono.CSharp.Linq
                        QueryBlock result_block;
 
                        var target = GetIntoVariable ();
-                       var target_param = new ImplicitLambdaParameter (target.Value, target.Location);
+                       var target_param = new ImplicitLambdaParameter (target.Name, target.Location);
 
                        //
                        // When select follows use it as a result selector
@@ -518,7 +625,7 @@ namespace Mono.CSharp.Linq
 
                                next = next.next;
                        } else {
-                               result_selector_expr = CreateRangeVariableType (ec, parameter, target, new SimpleName (target.Value, target.Location));
+                               result_selector_expr = CreateRangeVariableType (ec, parameter, target, new SimpleName (target.Name, target.Location));
 
                                result_block = new QueryBlock (ec.Compiler, block.Parent, block.StartLocation);
                                result_block.SetParameters (parameter, target_param);
@@ -546,11 +653,6 @@ namespace Mono.CSharp.Linq
                protected override string MethodName {
                        get { return "Where"; }
                }
-
-               protected override void CreateArguments (ResolveContext ec, Parameter parameter, ref Arguments args)
-               {
-                       base.CreateArguments (ec, parameter, ref args);
-               }
        }
 
        public class OrderByAscending : AQueryClause
@@ -604,7 +706,7 @@ namespace Mono.CSharp.Linq
        //
        // Implicit query block
        //
-       public class QueryBlock : ToplevelBlock
+       public class QueryBlock : ParametersBlock
        {
                //
                // Transparent parameters are used to package up the intermediate results
@@ -618,11 +720,11 @@ namespace Mono.CSharp.Linq
                        public readonly Parameter Parent;
                        public readonly string Identifier;
 
-                       public TransparentParameter (Parameter parent, SimpleMemberName identifier)
+                       public TransparentParameter (Parameter parent, RangeVariable identifier)
                                : base (ParameterNamePrefix + Counter++, identifier.Location)
                        {
                                Parent = parent;
-                               Identifier = identifier.Value;
+                               Identifier = identifier.Name;
                        }
 
                        public new static void Reset ()
@@ -631,110 +733,53 @@ namespace Mono.CSharp.Linq
                        }
                }
 
-               sealed class RangeVariable : IKnownVariable
-               {
-                       public RangeVariable (QueryBlock block, Location loc)
-                       {
-                               Block = block;
-                               Location = loc;
-                       }
-
-                       public Block Block { get; private set; }
-
-                       public Location Location { get; private set; }
-               }
-
-               List<SimpleMemberName> range_variables;
-
                public QueryBlock (CompilerContext ctx, Block parent, Location start)
-                       : base (ctx, parent, ParametersCompiled.EmptyReadOnlyParameters, start)
+                       : base (parent, ParametersCompiled.EmptyReadOnlyParameters, start)
                {
+                       flags |= Flags.CompilerGenerated;
                }
 
-               public void AddRangeVariable (SimpleMemberName name)
+               public void AddRangeVariable (RangeVariable variable)
                {
-                       if (!CheckParentConflictName (this, name.Value, name.Location))
-                               return;
-
-                       if (range_variables == null)
-                               range_variables = new List<SimpleMemberName> ();
-
-                       range_variables.Add (name);
-                       AddKnownVariable (name.Value, new RangeVariable (this, name.Location));
+                       variable.Block = this;
+                       AddLocalName (variable.Name, variable);
                }
 
-               // 
-               // Query parameter reference can include transparent parameters
-               //
-               protected override Expression GetParameterReferenceExpression (string name, Location loc)
+               public override void Error_AlreadyDeclared (string name, INamedBlockVariable variable, string reason)
                {
-                       Expression expr = base.GetParameterReferenceExpression (name, loc);
-                       if (expr != null)
-                               return expr;
-
-                       TransparentParameter tp = parameters [0] as TransparentParameter;
-                       while (tp != null) {
-                               if (tp.Identifier == name)
-                                       break;
-
-                               TransparentParameter tp_next = tp.Parent as TransparentParameter;
-                               if (tp_next == null && tp.Parent.Name == name)
-                                       break;
-
-                               tp = tp_next;
-                       }
-
-                       if (tp != null) {
-                               expr = new SimpleName (parameters[0].Name, loc);
-                               TransparentParameter tp_cursor = (TransparentParameter) parameters[0];
-                               while (tp_cursor != tp) {
-                                       tp_cursor = (TransparentParameter) tp_cursor.Parent;
-                                       expr = new TransparentMemberAccess (expr, tp_cursor.Name);
-                               }
-
-                               return new TransparentMemberAccess (expr, name);
-                       }
-
-                       return null;
+                       TopBlock.Report.Error (1931, variable.Location,
+                               "A range variable `{0}' conflicts with a previous declaration of `{0}'",
+                               name);
                }
 
-               protected override bool HasParameterWithName (string name)
+               public override void Error_AlreadyDeclared (string name, INamedBlockVariable variable)
                {
-                       return range_variables != null && range_variables.Exists (l => l.Value == name);
+                       TopBlock.Report.Error (1930, variable.Location,
+                               "A range variable `{0}' has already been declared in this scope",
+                               name);          
                }
 
-               protected override void Error_AlreadyDeclared (Location loc, string var, string reason)
+               public override void Error_AlreadyDeclaredTypeParameter (string name, Location loc)
                {
-                       Report.Error (1931, loc, "A range variable `{0}' conflicts with a previous declaration of `{0}'",
-                               var);
-               }
-               
-               protected override void Error_AlreadyDeclared (Location loc, string var)
-               {
-                       Report.Error (1930, loc, "A range variable `{0}' has already been declared in this scope",
-                               var);           
-               }
-               
-               public override void Error_AlreadyDeclaredTypeParameter (Location loc, string name, string conflict)
-               {
-                       Report.Error (1948, loc, "A range variable `{0}' conflicts with a method type parameter",
+                       TopBlock.Report.Error (1948, loc,
+                               "A range variable `{0}' conflicts with a method type parameter",
                                name);
                }
 
                public void SetParameter (Parameter parameter)
                {
-                       base.parameters = new ParametersCompiled (null, parameter);
-                       base.parameter_info = new ToplevelParameterInfo [] {
-                               new ToplevelParameterInfo (this, 0)
+                       base.parameters = new ParametersCompiled (parameter);
+                       base.parameter_info = new ParameterInfo[] {
+                               new ParameterInfo (this, 0)
                        };
                }
 
                public void SetParameters (Parameter first, Parameter second)
                {
-                       base.parameters = new ParametersCompiled (null, first, second);
-                       base.parameter_info = new ToplevelParameterInfo[] {
-                               new ToplevelParameterInfo (this, 0),
-                               new ToplevelParameterInfo (this, 1)
+                       base.parameters = new ParametersCompiled (first, second);
+                       base.parameter_info = new ParameterInfo[] {
+                               new ParameterInfo (this, 0),
+                               new ParameterInfo (this, 1)
                        };
                }
        }
@@ -745,5 +790,14 @@ namespace Mono.CSharp.Linq
                        : base (expr, name)
                {
                }
+
+               public override Expression DoResolveLValue (ResolveContext rc, Expression right_side)
+               {
+                       rc.Report.Error (1947, loc,
+                               "A range variable `{0}' cannot be assigned to. Consider using `let' clause to store the value",
+                               Name);
+
+                       return null;
+               }
        }
 }
index e7ae71be916e14be7e65d175254e89a7a63a78ec..7a5b09e0361435b8ffc5d85a52ab0b03d3bc6da1 100644 (file)
@@ -325,7 +325,7 @@ namespace Mono.CSharp {
                                                continue;
                                }
 
-                               if (member.DeclaringType.ImplementsInterface (entry.DeclaringType)) {
+                               if (member.DeclaringType.ImplementsInterface (entry.DeclaringType, false)) {
                                        if (existing is MemberSpec[]) {
                                                existing = new MemberSpec[] { member };
                                                return true;
@@ -336,7 +336,7 @@ namespace Mono.CSharp {
                                }
 
                                if ((entry.DeclaringType == member.DeclaringType && entry.IsAccessor == member.IsAccessor) ||
-                                       entry.DeclaringType.ImplementsInterface (member.DeclaringType))
+                                       entry.DeclaringType.ImplementsInterface (member.DeclaringType, false))
                                        return false;
                        }
 
index 3ce8429f43ef801df8ab5a21572cce9dace782e3..6ae3e787a48033582446968bcec7b4d627eee02c 100644 (file)
@@ -580,17 +580,17 @@ namespace Mono.CSharp {
                public override void Emit ()
                {
                        if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
-                               PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (MethodBuilder);
+                               Compiler.PredefinedAttributes.CompilerGenerated.EmitAttribute (MethodBuilder);
                        if ((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)
-                               PredefinedAttributes.Get.DebuggerHidden.EmitAttribute (MethodBuilder);
+                               Compiler.PredefinedAttributes.DebuggerHidden.EmitAttribute (MethodBuilder);
 
                        if (ReturnType == InternalType.Dynamic) {
                                return_attributes = new ReturnParameter (this, MethodBuilder, Location);
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (return_attributes.Builder);
+                               Compiler.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (ReturnType);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
+                                       var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                        if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                                return_attributes = new ReturnParameter (this, MethodBuilder, Location);
                                                return_attributes.Builder.SetCustomAttribute (
@@ -674,7 +674,7 @@ namespace Mono.CSharp {
                                if (OptAttributes == null)
                                        return null;
 
-                               Attribute[] attrs = OptAttributes.SearchMulti (PredefinedAttributes.Get.Conditional);
+                               Attribute[] attrs = OptAttributes.SearchMulti (Compiler.PredefinedAttributes.Conditional);
                                if (attrs == null)
                                        return null;
 
@@ -1012,7 +1012,7 @@ namespace Mono.CSharp {
                                DefineTypeParameters ();
                        }
 
-                       if (block != null && block.IsIterator && !(Parent is IteratorStorey)) {
+                       if (block != null && block.IsIterator) {
                                //
                                // Current method is turned into automatically generated
                                // wrapper which creates an instance of iterator
@@ -1030,7 +1030,7 @@ namespace Mono.CSharp {
                                                Report.Error (1109, Location, "`{0}': Extension methods cannot be defined in a nested class",
                                                        GetSignatureForError ());
 
-                                       PredefinedAttribute pa = PredefinedAttributes.Get.Extension;
+                                       PredefinedAttribute pa = Compiler.PredefinedAttributes.Extension;
                                        if (!pa.IsDefined) {
                                                Report.Error (1110, Location,
                                                        "`{0}': Extension methods cannot be declared without a reference to System.Core.dll assembly. Add the assembly reference or remove `this' modifer from the first parameter",
@@ -1120,7 +1120,7 @@ namespace Mono.CSharp {
                                base.Emit ();
                                
                                if ((ModFlags & Modifiers.METHOD_EXTENSION) != 0)
-                                       PredefinedAttributes.Get.Extension.EmitAttribute (MethodBuilder);
+                                       Compiler.PredefinedAttributes.Extension.EmitAttribute (MethodBuilder);
                        } catch {
                                Console.WriteLine ("Internal compiler error at {0}: exception caught while emitting {1}",
                                                   Location, MethodBuilder);
@@ -1451,7 +1451,7 @@ namespace Mono.CSharp {
                        }
 
                        if ((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)
-                               PredefinedAttributes.Get.DebuggerHidden.EmitAttribute (ConstructorBuilder);
+                               Compiler.PredefinedAttributes.DebuggerHidden.EmitAttribute (ConstructorBuilder);
 
                        if (OptAttributes != null)
                                OptAttributes.Emit ();
@@ -1476,7 +1476,7 @@ namespace Mono.CSharp {
                                // initializer, it must initialize all of the struct's fields.
                                if ((Parent.PartialContainer.Kind == MemberKind.Struct) &&
                                        ((ModFlags & Modifiers.STATIC) == 0) && (Initializer == null))
-                                       block.AddThisVariable (Parent, Location);
+                                       block.AddThisVariable (bc, Parent, Location);
 
                                if (block != null && (ModFlags & Modifiers.STATIC) == 0){
                                        if (Parent.PartialContainer.Kind == MemberKind.Class && Initializer == null)
@@ -1488,12 +1488,12 @@ namespace Mono.CSharp {
                                }
                        }
 
-                       parameters.ApplyAttributes (ConstructorBuilder);
+                       parameters.ApplyAttributes (this, ConstructorBuilder);
 
                        SourceMethod source = SourceMethod.Create (Parent, ConstructorBuilder, block);
 
                        if (block != null) {
-                               if (block.Resolve (null, bc, parameters, this)) {
+                               if (block.Resolve (null, bc, this)) {
                                        EmitContext ec = new EmitContext (this, ConstructorBuilder.GetILGenerator (), bc.ReturnType);
                                        ec.With (EmitContext.Options.ConstructorScope, true);
 
@@ -1861,14 +1861,16 @@ namespace Mono.CSharp {
                        if (GenericMethod != null)
                                GenericMethod.EmitAttributes ();
 
-                       method.ParameterInfo.ApplyAttributes (MethodBuilder);
+                       var mc = (IMemberContext) method;
+
+                       method.ParameterInfo.ApplyAttributes (mc, MethodBuilder);
 
                        SourceMethod source = SourceMethod.Create (parent, MethodBuilder, method.Block);
 
                        ToplevelBlock block = method.Block;
                        if (block != null) {
-                               BlockContext bc = new BlockContext ((IMemberContext) method, block, method.ReturnType);
-                               if (block.Resolve (null, bc, method.ParameterInfo, method)) {
+                               BlockContext bc = new BlockContext (mc, block, method.ReturnType);
+                               if (block.Resolve (null, bc, method)) {
                                        EmitContext ec = method.CreateEmitContext (MethodBuilder.GetILGenerator ());
                                        if (!ec.HasReturnLabel && bc.HasReturnLabel) {
                                                ec.ReturnLabel = bc.ReturnLabel;
@@ -1933,11 +1935,8 @@ namespace Mono.CSharp {
                                MethodGroupExpr method_expr = MethodGroupExpr.CreatePredefined (base_dtor, base_type, Location);
                                method_expr.InstanceExpression = new BaseThis (base_type, Location);
 
-                               ToplevelBlock new_block = new ToplevelBlock (Compiler, Block.StartLocation);
-                               new_block.EndLocation = Block.EndLocation;
-
-                               Block finaly_block = new ExplicitBlock (new_block, Location, Location);
-                               Block try_block = new Block (new_block, block);
+                               var try_block = new ExplicitBlock (block, block.StartLocation, block.EndLocation);
+                               var finaly_block = new ExplicitBlock (block, Location, Location);
 
                                //
                                // 0-size arguments to avoid CS0250 error
@@ -1945,9 +1944,9 @@ namespace Mono.CSharp {
                                // debugger scope
                                //
                                finaly_block.AddStatement (new StatementExpression (new Invocation (method_expr, new Arguments (0))));
-                               new_block.AddStatement (new TryFinally (try_block, finaly_block, Location));
 
-                               block = new_block;
+                               var tf = new TryFinally (try_block, finaly_block, Location);
+                               block.WrapIntoDestructor (tf, try_block);
                        }
 
                        base.Emit ();
@@ -2097,17 +2096,17 @@ namespace Mono.CSharp {
                        method_data.Emit (parent);
 
                        if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
-                               PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (method_data.MethodBuilder);
+                               Compiler.PredefinedAttributes.CompilerGenerated.EmitAttribute (method_data.MethodBuilder);
                        if (((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0))
-                               PredefinedAttributes.Get.DebuggerHidden.EmitAttribute (method_data.MethodBuilder);
+                               Compiler.PredefinedAttributes.DebuggerHidden.EmitAttribute (method_data.MethodBuilder);
 
                        if (ReturnType == InternalType.Dynamic) {
                                return_attributes = new ReturnParameter (this, method_data.MethodBuilder, Location);
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (return_attributes.Builder);
+                               Compiler.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (ReturnType);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
+                                       var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                        if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                                return_attributes = new ReturnParameter (this, method_data.MethodBuilder, Location);
                                                return_attributes.Builder.SetCustomAttribute (
@@ -2275,7 +2274,7 @@ namespace Mono.CSharp {
                        if (!base.Define ())
                                return false;
 
-                       if (block != null && block.IsIterator && !(Parent is IteratorStorey)) {
+                       if (block != null && block.IsIterator) {
                                //
                                // Current method is turned into automatically generated
                                // wrapper which creates an instance of iterator
index 8fd3dff0f54d82a57a40a6758a194670ba95faa9..131a815c130abd1553422e95bdef650de203f5e3 100644 (file)
@@ -83,24 +83,18 @@ namespace Mono.CSharp {
                }
        }
 
+       // TODO: It should go to AssemblyClass or AssemblySpec
        public class GlobalRootNamespace : RootNamespace {
                Module [] modules;
                Dictionary<string, RootNamespace> root_namespaces;
 
-               public static GlobalRootNamespace Instance = new GlobalRootNamespace ();
-
-               GlobalRootNamespace ()
+               public GlobalRootNamespace ()
                        : base ("global")
                {
                        root_namespaces = new Dictionary<string, RootNamespace> ();
                        root_namespaces.Add (alias_name, this);
                }
 
-               public static void Reset ()
-               {
-                       Instance = new GlobalRootNamespace ();
-               }
-
                public Assembly [] Assemblies {
                    get { return referenced_assemblies; }
                }
@@ -694,9 +688,9 @@ namespace Mono.CSharp {
                                this.Location = loc;
                        }
 
-                       public virtual FullNamedExpression Resolve (IMemberContext rc)
+                       public virtual FullNamedExpression Resolve (IMemberContext rc, bool local)
                        {
-                               FullNamedExpression fne = GlobalRootNamespace.Instance.GetRootNamespace (Alias);
+                               FullNamedExpression fne = rc.Compiler.GlobalRootNamespace.GetRootNamespace (Alias);
                                if (fne == null) {
                                        rc.Compiler.Report.Error (430, Location,
                                                "The extern alias `{0}' was not specified in -reference option",
@@ -723,12 +717,12 @@ namespace Mono.CSharp {
                                this.value = name;
                        }
 
-                       public override FullNamedExpression Resolve (IMemberContext rc)
+                       public override FullNamedExpression Resolve (IMemberContext rc, bool local)
                        {
                                if (resolved != null || value == null)
                                        return resolved;
 
-                               if (rc == null)
+                               if (local)
                                        return null;
 
                                resolved = value.GetTypeExpression ().ResolveAsTypeStep (rc, false);
@@ -764,6 +758,7 @@ namespace Mono.CSharp {
                public readonly DeclSpace SlaveDeclSpace;
                static readonly Namespace [] empty_namespaces = new Namespace [0];
                Namespace [] namespace_using_table;
+               CompilerContext ctx;
 
                static List<NamespaceEntry> entries = new List<NamespaceEntry> ();
 
@@ -772,8 +767,10 @@ namespace Mono.CSharp {
                        entries = new List<NamespaceEntry> ();
                }
 
-               public NamespaceEntry (NamespaceEntry parent, CompilationUnit file, string name)
+               // TODO: ctx should be a module
+               public NamespaceEntry (CompilerContext ctx, NamespaceEntry parent, CompilationUnit file, string name)
                {
+                       this.ctx = ctx;
                        this.parent = parent;
                        this.file = file;
                        entries.Add (this);
@@ -781,14 +778,15 @@ namespace Mono.CSharp {
                        if (parent != null)
                                ns = parent.NS.GetNamespace (name, true);
                        else if (name != null)
-                               ns = GlobalRootNamespace.Instance.GetNamespace (name, true);
+                               ns = Compiler.GlobalRootNamespace.GetNamespace (name, true);
                        else
-                               ns = GlobalRootNamespace.Instance;
+                               ns = Compiler.GlobalRootNamespace;
                        SlaveDeclSpace = new RootDeclSpace (this);
                }
 
-               private NamespaceEntry (NamespaceEntry parent, CompilationUnit file, Namespace ns, bool slave)
+               private NamespaceEntry (CompilerContext ctx, NamespaceEntry parent, CompilationUnit file, Namespace ns, bool slave)
                {
+                       this.ctx = ctx;
                        this.parent = parent;
                        this.file = file;
                        this.IsImplicit = true;
@@ -871,7 +869,7 @@ namespace Mono.CSharp {
                NamespaceEntry Doppelganger {
                        get {
                                if (!IsImplicit && doppelganger == null) {
-                                       doppelganger = new NamespaceEntry (ImplicitParent, file, ns, true);
+                                       doppelganger = new NamespaceEntry (ctx, ImplicitParent, file, ns, true);
                                        doppelganger.using_aliases = using_aliases;
                                }
                                return doppelganger;
@@ -893,7 +891,7 @@ namespace Mono.CSharp {
                                if (implicit_parent == null) {
                                        implicit_parent = (parent.NS == ns.Parent)
                                                ? parent
-                                               : new NamespaceEntry (parent, file, ns.Parent, false);
+                                               : new NamespaceEntry (ctx, parent, file, ns.Parent, false);
                                }
                                return implicit_parent;
                        }
@@ -1064,7 +1062,7 @@ namespace Mono.CSharp {
 
                                foreach (UsingAliasEntry ue in n.using_aliases) {
                                        if (ue.Alias == name)
-                                               return ue.Resolve (Doppelganger);
+                                               return ue.Resolve (Doppelganger ?? this, Doppelganger == null);
                                }
                        }
 
@@ -1097,7 +1095,7 @@ namespace Mono.CSharp {
                                                        }
                                                }
 
-                                               return ue.Resolve (Doppelganger);
+                                               return ue.Resolve (Doppelganger ?? this, Doppelganger == null);
                                        }
                                }
                        }
@@ -1251,7 +1249,7 @@ namespace Mono.CSharp {
                {
                        if (using_aliases != null) {
                                foreach (UsingAliasEntry ue in using_aliases)
-                                       ue.Resolve (Doppelganger);
+                                       ue.Resolve (Doppelganger, Doppelganger == null);
                        }
 
                        if (using_clauses != null) {
@@ -1283,7 +1281,7 @@ namespace Mono.CSharp {
                #region IMemberContext Members
 
                public CompilerContext Compiler {
-                       get { return RootContext.ToplevelTypes.Compiler; }
+                       get { return ctx; }
                }
 
                public TypeSpec CurrentType {
index 301536caa59443c105a6a9af6d71eda73aa61ebd..1f4df2e824f75df3260016457e2426862c07bf44 100644 (file)
@@ -198,7 +198,7 @@ namespace Mono.CSharp.Nullable
                public void AddressOf (EmitContext ec, AddressOp mode)
                {
                        IMemoryLocation ml = expr as VariableReference;
-                       if (ml != null) 
+                       if (ml != null)
                                ml.AddressOf (ec, mode);
                        else
                                LocalVariable.AddressOf (ec, mode);
@@ -261,6 +261,32 @@ namespace Mono.CSharp.Nullable
                }
        }
 
+       //
+       // Calls get_Value method on nullable expression
+       //
+       public class UnwrapCall : CompositeExpression
+       {
+               public UnwrapCall (Expression expr)
+                       : base (expr)
+               {
+               }
+
+               protected override Expression DoResolve (ResolveContext rc)
+               {
+                       base.DoResolve (rc);
+
+                       if (type != null)
+                               type = NullableInfo.GetUnderlyingType (type);
+
+                       return this;
+               }
+
+               public override void Emit (EmitContext ec)
+               {
+                       Invocation.EmitCall (ec, Child, NullableInfo.GetValue (Child.Type), null, loc);
+               }
+       }
+
        public class Wrap : TypeCast
        {
                private Wrap (Expression expr, TypeSpec type)
@@ -536,7 +562,6 @@ namespace Mono.CSharp.Nullable
        public class LiftedBinaryOperator : Binary
        {
                Unwrap left_unwrap, right_unwrap;
-               bool left_null_lifted, right_null_lifted;
                Expression left_orig, right_orig;
                Expression user_operator;
                MethodSpec wrap_ctor;
@@ -546,6 +571,25 @@ namespace Mono.CSharp.Nullable
                {
                }
 
+               bool IsBitwiseBoolean {
+                       get {
+                               return (Oper & Operator.BitwiseMask) != 0 && left_unwrap != null && right_unwrap != null &&
+                               left_unwrap.Type == TypeManager.bool_type && right_unwrap.Type == TypeManager.bool_type;
+                       }
+               }
+
+               bool IsLeftNullLifted {
+                       get {
+                               return (state & State.LeftNullLifted) != 0;
+                       }
+               }
+
+               bool IsRightNullLifted {
+                       get {
+                               return (state & State.RightNullLifted) != 0;
+                       }
+               }
+
                public override Expression CreateExpressionTree (ResolveContext ec)
                {
                        if (user_operator != null)
@@ -604,13 +648,13 @@ namespace Mono.CSharp.Nullable
                        //      
                        if (left_orig.IsNull) {
                                left = right;
-                               left_null_lifted = true;
+                               state |= State.LeftNullLifted;
                                type = TypeManager.bool_type;
                        }
 
                        if (right_orig.IsNull) {
                                right = left;
-                               right_null_lifted = true;
+                               state |= State.RightNullLifted;
                                type = TypeManager.bool_type;
                        }
 
@@ -659,7 +703,7 @@ namespace Mono.CSharp.Nullable
                        //
                        // Either left or right is null
                        //
-                       if (left_unwrap != null && (right_null_lifted || right.IsNull)) {
+                       if (left_unwrap != null && (IsRightNullLifted || right.IsNull)) {
                                left_unwrap.EmitCheck (ec);
                                if (Oper == Binary.Operator.Equality) {
                                        ec.Emit (OpCodes.Ldc_I4_0);
@@ -668,7 +712,7 @@ namespace Mono.CSharp.Nullable
                                return;
                        }
 
-                       if (right_unwrap != null && (left_null_lifted || left.IsNull)) {
+                       if (right_unwrap != null && (IsLeftNullLifted || left.IsNull)) {
                                right_unwrap.EmitCheck (ec);
                                if (Oper == Binary.Operator.Equality) {
                                        ec.Emit (OpCodes.Ldc_I4_0);
@@ -789,13 +833,6 @@ namespace Mono.CSharp.Nullable
                        base.EmitOperator (ec, l);
                }
 
-               bool IsBitwiseBoolean {
-                       get {
-                               return (Oper & Operator.BitwiseMask) != 0 && left_unwrap != null && right_unwrap != null &&
-                               left_unwrap.Type == TypeManager.bool_type && right_unwrap.Type == TypeManager.bool_type;
-                       }
-               }
-
                Expression LiftResult (ResolveContext ec, Expression res_expr)
                {
                        TypeExpr lifted_type;
@@ -803,7 +840,7 @@ namespace Mono.CSharp.Nullable
                        //
                        // Avoid double conversion
                        //
-                       if (left_unwrap == null || left_null_lifted || left_unwrap.Type != left.Type || (left_unwrap != null && right_null_lifted)) {
+                       if (left_unwrap == null || IsLeftNullLifted || left_unwrap.Type != left.Type || (left_unwrap != null && IsRightNullLifted)) {
                                lifted_type = new NullableType (left.Type, loc);
                                lifted_type = lifted_type.ResolveAsTypeTerminal (ec, false);
                                if (lifted_type == null)
@@ -815,7 +852,7 @@ namespace Mono.CSharp.Nullable
                                        left = EmptyCast.Create (left, lifted_type.Type);
                        }
 
-                       if (left != right && (right_unwrap == null || right_null_lifted || right_unwrap.Type != right.Type || (right_unwrap != null && left_null_lifted))) {
+                       if (left != right && (right_unwrap == null || IsRightNullLifted || right_unwrap.Type != right.Type || (right_unwrap != null && IsLeftNullLifted))) {
                                lifted_type = new NullableType (right.Type, loc);
                                lifted_type = lifted_type.ResolveAsTypeTerminal (ec, false);
                                if (lifted_type == null)
@@ -837,7 +874,7 @@ namespace Mono.CSharp.Nullable
                                type = res_expr.Type = lifted_type.Type;
                        }
 
-                       if (left_null_lifted) {
+                       if (IsLeftNullLifted) {
                                left = LiftedNull.Create (right.Type, left.Location);
 
                                if ((Oper & (Operator.ArithmeticMask | Operator.ShiftMask | Operator.BitwiseMask)) != 0)
@@ -850,7 +887,7 @@ namespace Mono.CSharp.Nullable
                                        return CreateNullConstant (ec, right_orig).Resolve (ec);
                        }
 
-                       if (right_null_lifted) {
+                       if (IsRightNullLifted) {
                                right = LiftedNull.Create (left.Type, right.Location);
 
                                if ((Oper & (Operator.ArithmeticMask | Operator.ShiftMask | Operator.BitwiseMask)) != 0)
@@ -881,7 +918,7 @@ namespace Mono.CSharp.Nullable
                        // (in unlifted or lifted form) exists for the operation.
                        //
                        if (e == null && (Oper & Operator.EqualityMask) != 0) {
-                               if ((left_null_lifted && right_unwrap != null) || (right_null_lifted && left_unwrap != null))
+                               if ((IsLeftNullLifted && right_unwrap != null) || (IsRightNullLifted && left_unwrap != null))
                                        return LiftResult (ec, this);
                        }
 
index 803b913114cc3561aa253b35c03bc988578f69a6..a65384cf7ebe6d9a45127c51e6ddcf6a30442347 100644 (file)
@@ -155,8 +155,9 @@ namespace Mono.CSharp {
                        return parameter_type;
                }
 
-               public TypeSpec Type {
-                       set { parameter_type = value; }
+               public void SetParameterType (TypeSpec type)
+               {
+                       parameter_type = type;
                }
        }
 
@@ -180,10 +181,10 @@ namespace Mono.CSharp {
                        return parameter_type;
                }
 
-               public override void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index)
+               public override void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index, PredefinedAttributes pa)
                {
-                       base.ApplyAttributes (mb, cb, index);
-                       PredefinedAttributes.Get.ParamArray.EmitAttribute (builder);
+                       base.ApplyAttributes (mb, cb, index, pa);
+                       pa.ParamArray.EmitAttribute (builder);
                }
        }
 
@@ -195,7 +196,7 @@ namespace Mono.CSharp {
                        parameter_type = InternalType.Arglist;
                }
 
-               public override void  ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index)
+               public override void  ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index, PredefinedAttributes pa)
                {
                        // Nothing to do
                }
@@ -223,7 +224,8 @@ namespace Mono.CSharp {
        //
        // Parameter information created by parser
        //
-       public class Parameter : ParameterBase, IParameterData, ILocalVariable {
+       public class Parameter : ParameterBase, IParameterData, ILocalVariable // TODO: INamedBlockVariable
+       {
                [Flags]
                public enum Modifier : byte {
                        NONE    = 0,
@@ -244,11 +246,11 @@ namespace Mono.CSharp {
                string name;
                Expression default_expr;
                protected TypeSpec parameter_type;
-               public readonly Location Location;
+               readonly Location loc;
                protected int idx;
                public bool HasAddressTaken;
 
-               Expression expr_tree_variable;
+               TemporaryVariableReference expr_tree_variable;
                static TypeExpr parameter_expr_tree_type;
 
                HoistedVariable hoisted_variant;
@@ -257,14 +259,15 @@ namespace Mono.CSharp {
                {
                        this.name = name;
                        modFlags = mod;
-                       Location = loc;
+                       this.loc = loc;
                        texpr = type;
 
                        // Only assign, attributes will be attached during resolve
                        base.attributes = attrs;
                }
 
-#region Properties
+               #region Properties
+
                public Expression DefaultValue {
                        get {
                                return default_expr;
@@ -274,12 +277,31 @@ namespace Mono.CSharp {
                        }
                }
 
+               public Location Location {
+                       get {
+                               return loc;
+                       }
+               }
+
+               public TypeSpec Type {
+                       get {
+                               return parameter_type;
+                       }
+               }
+
                public FullNamedExpression TypeExpression  {
                        get {
                                return texpr;
                        }
                }
-#endregion
+
+               public override string[] ValidAttributeTargets {
+                       get {
+                               return attribute_targets;
+                       }
+               }
+
+               #endregion
 
                public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa)
                {
@@ -293,7 +315,7 @@ namespace Mono.CSharp {
                                return;
                        }
 
-                       if (a.Type == PredefinedAttributes.Get.Out && (ModFlags & Modifier.REF) == Modifier.REF &&
+                       if (a.Type == pa.Out && (ModFlags & Modifier.REF) == Modifier.REF &&
                            !OptAttributes.Contains (pa.In)) {
                                a.Report.Error (662, a.Location,
                                        "Cannot specify only `Out' attribute on a ref parameter. Use both `In' and `Out' attributes or neither");
@@ -408,7 +430,7 @@ namespace Mono.CSharp {
                        if (attributes == null)
                                return;
                        
-                       var pa = attributes.Search (PredefinedAttributes.Get.OptionalParameter);
+                       var pa = attributes.Search (rc.Compiler.PredefinedAttributes.OptionalParameter);
                        if (pa == null)
                                return;
 
@@ -418,7 +440,7 @@ namespace Mono.CSharp {
                        attributes.Attrs.Remove (pa);
 
                        TypeSpec expr_type = null;
-                       pa = attributes.Search (PredefinedAttributes.Get.DefaultParameterValue);
+                       pa = attributes.Search (rc.Compiler.PredefinedAttributes.DefaultParameterValue);
                        if (pa != null) {
                                attributes.Attrs.Remove (pa);
                                default_expr = pa.GetParameterDefaultValue (out expr_type);
@@ -564,7 +586,7 @@ namespace Mono.CSharp {
                                "Argument type `{0}' is not CLS-compliant", GetSignatureForError ());
                }
 
-               public virtual void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index)
+               public virtual void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index, PredefinedAttributes pa)
                {
                        if (mb == null)
                                builder = cb.DefineParameter (index, Attributes, Name);
@@ -582,7 +604,7 @@ namespace Mono.CSharp {
                                Constant c = default_expr as Constant;
                                if (c != null) {
                                        if (default_expr.Type == TypeManager.decimal_type) {
-                                               builder.SetCustomAttribute (Const.CreateDecimalConstantAttribute (c));
+                                               builder.SetCustomAttribute (Const.CreateDecimalConstantAttribute (c, pa));
                                        } else {
                                                builder.SetConstant (c.GetTypedValue ());
                                        }
@@ -590,25 +612,19 @@ namespace Mono.CSharp {
                        }
 
                        if (parameter_type == InternalType.Dynamic) {
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (builder);
+                               pa.Dynamic.EmitAttribute (builder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (parameter_type);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
-                                       if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
+                                       var dt = pa.DynamicTransform;
+                                       if (dt.Constructor != null || dt.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                                builder.SetCustomAttribute (
-                                                       new CustomAttributeBuilder (pa.Constructor, new object [] { trans_flags }));
+                                                       new CustomAttributeBuilder (dt.Constructor, new object [] { trans_flags }));
                                        }
                                }
                        }
                }
 
-               public override string[] ValidAttributeTargets {
-                       get {
-                               return attribute_targets;
-                       }
-               }
-
                public Parameter Clone ()
                {
                        Parameter p = (Parameter) MemberwiseClone ();
@@ -623,8 +639,8 @@ namespace Mono.CSharp {
                        if ((modFlags & Modifier.ISBYREF) != 0)
                                ec.Report.Error (1951, Location, "An expression tree parameter cannot use `ref' or `out' modifier");
 
-                       expr_tree_variable = new TemporaryVariable (ResolveParameterExpressionType (ec, Location).Type, Location);
-                       expr_tree_variable = expr_tree_variable.Resolve (ec);
+                       expr_tree_variable = TemporaryVariableReference.Create (ResolveParameterExpressionType (ec, Location).Type, ec.CurrentBlock.ParametersBlock, Location);
+                       expr_tree_variable = (TemporaryVariableReference) expr_tree_variable.Resolve (ec);
 
                        Arguments arguments = new Arguments (2);
                        arguments.Add (new Argument (new TypeOf (
@@ -673,7 +689,7 @@ namespace Mono.CSharp {
                        }
                }
 
-               public Expression ExpressionTreeVariableReference ()
+               public TemporaryVariableReference ExpressionTreeVariableReference ()
                {
                        return expr_tree_variable;
                }
@@ -977,40 +993,21 @@ namespace Mono.CSharp {
                    this.types = types;
                }
                
-               public ParametersCompiled (CompilerContext ctx, params Parameter[] parameters)
+               public ParametersCompiled (params Parameter[] parameters)
                {
-                       if (parameters == null)
+                       if (parameters == null || parameters.Length == 0)
                                throw new ArgumentException ("Use EmptyReadOnlyParameters");
 
                        this.parameters = parameters;
                        int count = parameters.Length;
 
-                       if (count == 0)
-                               return;
-
-                       if (count == 1) {
-                               has_params = (parameters [0].ModFlags & Parameter.Modifier.PARAMS) != 0;
-                               return;
-                       }
-
                        for (int i = 0; i < count; i++){
                                has_params |= (parameters [i].ModFlags & Parameter.Modifier.PARAMS) != 0;
-                               if (ctx != null) {
-                                       string base_name = parameters[i].Name;
-
-                                       for (int j = i + 1; j < count; j++) {
-                                               if (base_name != parameters[j].Name)
-                                                       continue;
-
-                                               ErrorDuplicateName (parameters[i], ctx.Report);
-                                               i = j;
-                                       }
-                               }
                        }
                }
 
-               public ParametersCompiled (CompilerContext ctx, Parameter [] parameters, bool has_arglist) :
-                       this (ctx, parameters)
+               public ParametersCompiled (Parameter [] parameters, bool has_arglist) :
+                       this (parameters)
                {
                        this.has_arglist = has_arglist;
                }
@@ -1133,11 +1130,6 @@ namespace Mono.CSharp {
                        return parameters;
                }
 
-               protected virtual void ErrorDuplicateName (Parameter p, Report Report)
-               {
-                       Report.Error (100, p.Location, "The parameter name `{0}' is a duplicate", p.Name);
-               }
-
                public bool Resolve (IMemberContext ec)
                {
                        if (types != null)
@@ -1179,16 +1171,17 @@ namespace Mono.CSharp {
 
                // Define each type attribute (in/out/ref) and
                // the argument names.
-               public void ApplyAttributes (MethodBase builder)
+               public void ApplyAttributes (IMemberContext mc, MethodBase builder)
                {
                        if (Count == 0)
                                return;
 
                        MethodBuilder mb = builder as MethodBuilder;
                        ConstructorBuilder cb = builder as ConstructorBuilder;
+                       var pa = mc.Compiler.PredefinedAttributes;
 
                        for (int i = 0; i < Count; i++) {
-                               this [i].ApplyAttributes (mb, cb, i + 1);
+                               this [i].ApplyAttributes (mb, cb, i + 1, pa);
                        }
                }
 
@@ -1211,8 +1204,10 @@ namespace Mono.CSharp {
                                // to save some memory when referenced later.
                                //
                                StatementExpression se = new StatementExpression (p.CreateExpressionTreeVariable (ec));
-                               if (se.Resolve (ec))
+                               if (se.Resolve (ec)) {
+                                       ec.CurrentBlock.AddScopeStatement (new TemporaryVariableReference.Declarator (p.ExpressionTreeVariableReference ()));
                                        ec.CurrentBlock.AddScopeStatement (se);
+                               }
                                
                                initializers.Add (p.ExpressionTreeVariableReference ());
                        }
index c82b60ccc3e4f79a1d6859a07e4d948b469d064f..23d80dfcc479c2ba3c39a1b70d1678394e18e22e 100644 (file)
@@ -360,7 +360,14 @@ namespace Mono.CSharp {
                bool BaseImplements (TypeSpec iface_type, MethodSpec mi, out MethodSpec base_method)
                {
                        var base_type = container.BaseType;
-                       base_method = (MethodSpec) MemberCache.FindMember (base_type, new MemberFilter (mi), BindingRestriction.None);
+
+                       //
+                       // Setup filter with no return type to give better error message
+                       // about mismatch at return type when the check bellow rejects them
+                       //
+                       var filter = new MemberFilter (mi.Name, mi.Arity, MemberKind.Method, mi.Parameters, null);
+
+                       base_method = (MethodSpec) MemberCache.FindMember (base_type, filter, BindingRestriction.None);
 
                        if (base_method == null || (base_method.Modifiers & Modifiers.PUBLIC) == 0)
                                return false;
@@ -368,10 +375,8 @@ namespace Mono.CSharp {
                        if (base_method.DeclaringType.IsInterface)
                                return false;
 
-                       // Why was it here ????
-                       //if (TypeManager.ImplementsInterface (base_type, iface_type)) {
-                       //      return true;
-                       //}
+                       if (!TypeSpecComparer.Override.IsEqual (mi.ReturnType, base_method.ReturnType))
+                               return false;
 
                        if (!base_method.IsAbstract && !base_method.IsVirtual)
                                // FIXME: We can avoid creating a proxy if base_method can be marked 'final virtual' instead.
@@ -396,7 +401,7 @@ namespace Mono.CSharp {
 
                                bool base_implements_type = type.IsInterface &&
                                        container.BaseType != null &&
-                                       container.BaseType.ImplementsInterface (type);
+                                       container.BaseType.ImplementsInterface (type, false);
 
                                for (int j = 0; j < pending_implementations [i].methods.Count; ++j) {
                                        var mi = pending_implementations[i].methods[j];
index 9ce7aab4a91404159d22f9723a078c43dc066e07..ac7da6d9f4874d14b3d2c9333a211383cc53b7ae 100644 (file)
@@ -655,11 +655,11 @@ namespace Mono.CSharp
                                OptAttributes.Emit ();
 
                        if (member_type == InternalType.Dynamic) {
-                               PredefinedAttributes.Get.Dynamic.EmitAttribute (PropertyBuilder);
+                               Compiler.PredefinedAttributes.Dynamic.EmitAttribute (PropertyBuilder);
                        } else {
                                var trans_flags = TypeManager.HasDynamicTypeUsed (member_type);
                                if (trans_flags != null) {
-                                       var pa = PredefinedAttributes.Get.DynamicTransform;
+                                       var pa = Compiler.PredefinedAttributes.DynamicTransform;
                                        if (pa.Constructor != null || pa.ResolveConstructor (Location, ArrayContainer.MakeType (TypeManager.bool_type))) {
                                                PropertyBuilder.SetCustomAttribute (
                                                        new CustomAttributeBuilder (pa.Constructor, new object[] { trans_flags }));
@@ -896,7 +896,7 @@ namespace Mono.CSharp
                                        block.AddStatement (new StatementExpression (
                                                new CompoundAssign (Operation,
                                                        f_expr,
-                                                       block.GetParameterReference (ParameterInfo[0].Name, Location),
+                                                       block.GetParameterReference (0, Location),
                                                        Location)));
                                }
 
@@ -1112,7 +1112,7 @@ namespace Mono.CSharp
                                        return null;
 
                                MethodBuilder mb = method_data.MethodBuilder;
-                               ParameterInfo.ApplyAttributes (mb);
+                               ParameterInfo.ApplyAttributes (this, mb);
                                Spec = new MethodSpec (MemberKind.Method, parent.PartialContainer.Definition, this, ReturnType, mb, ParameterInfo, method.ModFlags);
                                Spec.IsAccessor = true;
 
@@ -1442,7 +1442,7 @@ namespace Mono.CSharp
                                return false;
 
                        if (OptAttributes != null) {
-                               Attribute indexer_attr = OptAttributes.Search (PredefinedAttributes.Get.IndexerName);
+                               Attribute indexer_attr = OptAttributes.Search (Compiler.PredefinedAttributes.IndexerName);
                                if (indexer_attr != null) {
                                        var compiling = indexer_attr.Type.MemberDefinition as TypeContainer;
                                        if (compiling != null)
index 1df9c4d07546962fb908596c7d54708503f82c5b..8ee0ce47a95f61bdac7dd8f8a4b3e85c78e0bb82 100644 (file)
@@ -272,7 +272,7 @@ namespace Mono.CSharp {
                //   methods, fields, etc) we need to "Define" them before we
                //   can save the Assembly
                // </remarks>
-               static public void CloseTypes ()
+               static public void CloseTypes (CompilerContext ctx)
                {
                        HackCorlibEnums ();
 
@@ -288,8 +288,9 @@ namespace Mono.CSharp {
                        // If we have a <PrivateImplementationDetails> class, close it
                        //
                        if (helper_classes != null){
+                               var cg = ctx.PredefinedAttributes.CompilerGenerated;
                                foreach (TypeBuilder type_builder in helper_classes) {
-                                       PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (type_builder);
+                                       cg.EmitAttribute (type_builder);
                                        type_builder.CreateType ();
                                }
                        }
index 0144f0130300ae893ee1a083325b921b5d1d5350..eb31fb76f4e875f930979487bc52cf37096c3440 100644 (file)
@@ -217,7 +217,7 @@ namespace Mono.CSharp
                        if (!OptAttributes.CheckTargets ())
                                return;
 
-                       Attribute a = ResolveAttribute (PredefinedAttributes.Get.DefaultCharset);
+                       Attribute a = ResolveAttribute (Compiler.PredefinedAttributes.DefaultCharset);
                        if (a != null) {
                                has_default_charset = true;
                                DefaultCharSet = a.GetCharSetValue ();
index 96e6eddf86f74f19c8367d156e6451c41763789d..df22682e559eff0ddd5eb83d9bd552159169e107 100644 (file)
@@ -860,12 +860,14 @@ namespace Mono.CSharp {
                bool defined;
                bool referenced;
                Label label;
+               Block block;
 
                FlowBranching.UsageVector vectors;
                
-               public LabeledStatement (string name, Location l)
+               public LabeledStatement (string name, Block block, Location l)
                {
                        this.name = name;
+                       this.block = block;
                        this.loc = l;
                }
 
@@ -879,6 +881,12 @@ namespace Mono.CSharp {
                        return label;
                }
 
+               public Block Block {
+                       get {
+                               return block;
+                       }
+               }
+
                public string Name {
                        get { return name; }
                }
@@ -916,6 +924,9 @@ namespace Mono.CSharp {
 
                protected override void DoEmit (EmitContext ec)
                {
+                       if (!HasBeenReferenced)
+                               ec.Report.Warning (164, 2, loc, "This label has not been referenced");
+
                        LabelTarget (ec);
                        ec.MarkLabel (label);
                }
@@ -1146,721 +1157,746 @@ namespace Mono.CSharp {
                void EmitAddressOf (EmitContext ec);
        }
 
-       public interface IKnownVariable {
+       public interface INamedBlockVariable
+       {
                Block Block { get; }
+               Expression CreateReferenceExpression (ResolveContext rc, Location loc);
+               bool IsDeclared { get; }
                Location Location { get; }
        }
 
-       //
-       // The information about a user-perceived local variable
-       //
-       public class LocalInfo : IKnownVariable, ILocalVariable
+       public class BlockVariableDeclaration : Statement
        {
-               public readonly FullNamedExpression Type;
+               public class Declarator
+               {
+                       LocalVariable li;
+                       Expression initializer;
 
-               public TypeSpec VariableType;
-               public readonly string Name;
-               public readonly Location Location;
-               public readonly Block Block;
+                       public Declarator (LocalVariable li, Expression initializer)
+                       {
+                               if (li.Type != null)
+                                       throw new ArgumentException ("Expected null variable type");
 
-               public VariableInfo VariableInfo;
-               HoistedVariable hoisted_variant;
+                               this.li = li;
+                               this.initializer = initializer;
+                       }
 
-               [Flags]
-               enum Flags : byte {
-                       Used = 1,
-                       ReadOnly = 2,
-                       Pinned = 4,
-                       IsThis = 8,
-                       AddressTaken = 32,
-                       CompilerGenerated = 64,
-                       IsConstant = 128
-               }
+                       public Declarator (Declarator clone, Expression initializer)
+                       {
+                               this.li = clone.li;
+                               this.initializer = initializer;
+                       }
+
+                       #region Properties
+
+                       public LocalVariable Variable {
+                               get {
+                                       return li;
+                               }
+                       }
 
-               public enum ReadOnlyContext: byte {
-                       Using,
-                       Foreach,
-                       Fixed
+                       public Expression Initializer {
+                               get {
+                                       return initializer;
+                               }
+                               set {
+                                       initializer = value;
+                               }
+                       }
+
+                       #endregion
                }
 
-               Flags flags;
-               ReadOnlyContext ro_context;
-               LocalBuilder builder;
+               Expression initializer;
+               protected FullNamedExpression type_expr;
+               protected LocalVariable li;
+               protected List<Declarator> declarators;
 
-               public LocalInfo (FullNamedExpression type, string name, Block block, Location l)
+               public BlockVariableDeclaration (FullNamedExpression type, LocalVariable li)
                {
-                       Type = type;
-                       Name = name;
-                       Block = block;
-                       Location = l;
+                       this.type_expr = type;
+                       this.li = li;
+                       this.loc = type_expr.Location;
                }
 
-               public LocalInfo (TypeContainer ds, Block block, Location l)
+               protected BlockVariableDeclaration (LocalVariable li)
                {
-                       VariableType = ds.IsGeneric ? ds.CurrentType : ds.Definition;
-                       Block = block;
-                       Location = l;
+                       this.li = li;
                }
 
-               public void ResolveVariable (EmitContext ec)
-               {
-                       if (HoistedVariant != null)
-                               return;
+               #region Properties
 
-                       if (builder == null) {
-                               builder = ec.DeclareLocal (VariableType, Pinned);
+               public List<Declarator> Declarators {
+                       get {
+                               return declarators;
                        }
                }
 
-               public void Emit (EmitContext ec)
-               {
-                       ec.Emit (OpCodes.Ldloc, builder);
+               public Expression Initializer {
+                       get {
+                               return initializer;
+                       }
+                       set {
+                               initializer = value;
+                       }
                }
 
-               public void EmitAssign (EmitContext ec)
-               {
-                       ec.Emit (OpCodes.Stloc, builder);
+               public FullNamedExpression TypeExpression {
+                       get {
+                               return type_expr;
+                       }
                }
 
-               public void EmitAddressOf (EmitContext ec)
-               {
-                       ec.Emit (OpCodes.Ldloca, builder);
+               public LocalVariable Variable {
+                       get {
+                               return li;
+                       }
                }
 
-               public void EmitSymbolInfo (EmitContext ec)
+               #endregion
+
+               public void AddDeclarator (Declarator decl)
                {
-                       if (builder != null)
-                               ec.DefineLocalVariable (Name, builder);
-               }
+                       if (declarators == null)
+                               declarators = new List<Declarator> ();
 
-               //
-               // Hoisted local variable variant
-               //
-               public HoistedVariable HoistedVariant {
-                       get {
-                               return hoisted_variant;
-                       }
-                       set {
-                               hoisted_variant = value;
-                       }
+                       declarators.Add (decl);
                }
 
-               public bool IsThisAssigned (BlockContext ec, Block block)
+               void CreateEvaluatorVariable (BlockContext bc, LocalVariable li)
                {
-                       if (VariableInfo == null)
-                               throw new Exception ();
+                       var container = bc.CurrentMemberDefinition.Parent;
 
-                       if (!ec.DoFlowAnalysis || ec.CurrentBranching.IsAssigned (VariableInfo))
-                               return true;
+                       Field f = new Field (container, new TypeExpression (li.Type, li.Location), Modifiers.PUBLIC | Modifiers.STATIC,
+                               new MemberName (li.Name, li.Location), null);
 
-                       return VariableInfo.TypeInfo.IsFullyInitialized (ec, VariableInfo, block.StartLocation);
+                       container.AddField (f);
+                       f.Define ();
+                       Evaluator.QueueField (f);
+
+                       li.HoistedVariant = new HoistedEvaluatorVariable (f);
+                       li.SetIsUsed ();
                }
 
-               public bool IsAssigned (BlockContext ec)
+               public override bool Resolve (BlockContext bc)
                {
-                       if (VariableInfo == null)
-                               throw new Exception ();
+                       if (li.Type == null) {
+                               TypeSpec type = null;
+                               if (type_expr is VarExpr) {
+                                       //
+                                       // C# 3.0 introduced contextual keywords (var) which behaves like a type if type with
+                                       // same name exists or as a keyword when no type was found
+                                       // 
+                                       var texpr = type_expr.ResolveAsTypeTerminal (bc, true);
+                                       if (texpr == null) {
+                                               if (RootContext.Version < LanguageVersion.V_3)
+                                                       bc.Report.FeatureIsNotAvailable (loc, "implicitly typed local variable");
+
+                                               if (li.IsFixed) {
+                                                       bc.Report.Error (821, loc, "A fixed statement cannot use an implicitly typed local variable");
+                                                       return false;
+                                               }
 
-                       return !ec.DoFlowAnalysis || ec.CurrentBranching.IsAssigned (VariableInfo);
-               }
+                                               if (li.IsConstant) {
+                                                       bc.Report.Error (822, loc, "An implicitly typed local variable cannot be a constant");
+                                                       return false;
+                                               }
 
-               public bool Resolve (ResolveContext ec)
-               {
-                       if (VariableType != null)
-                               return true;
+                                               if (Initializer == null) {
+                                                       bc.Report.Error (818, loc, "An implicitly typed local variable declarator must include an initializer");
+                                                       return false;
+                                               }
 
-                       TypeExpr texpr = Type.ResolveAsContextualType (ec, false);
-                       if (texpr == null)
-                               return false;
-                               
-                       VariableType = texpr.Type;
+                                               if (declarators != null) {
+                                                       bc.Report.Error (819, loc, "An implicitly typed local variable declaration cannot include multiple declarators");
+                                                       declarators = null;
+                                               }
 
-                       if (VariableType.IsStatic) {
-                               FieldBase.Error_VariableOfStaticClass (Location, Name, VariableType, ec.Report);
-                               return false;
-                       }
+                                               Initializer = Initializer.Resolve (bc);
+                                               if (Initializer != null) {
+                                                       ((VarExpr) type_expr).InferType (bc, Initializer);
+                                                       type = type_expr.Type;
+                                               }
+                                       }
+                               }
 
-                       if (VariableType.IsPointer && !ec.IsUnsafe)
-                               Expression.UnsafeError (ec, Location);
+                               if (type == null) {
+                                       var texpr = type_expr.ResolveAsTypeTerminal (bc, false);
+                                       if (texpr == null)
+                                               return false;
 
-                       return true;
-               }
+                                       type = texpr.Type;
 
-               public bool IsConstant {
-                       get { return (flags & Flags.IsConstant) != 0; }
-                       set { flags |= Flags.IsConstant; }
-               }
+                                       if (li.IsConstant && !type.IsConstantCompatible) {
+                                               Const.Error_InvalidConstantType (type, loc, bc.Report);
+                                       }
+                               }
 
-               public bool AddressTaken {
-                       get { return (flags & Flags.AddressTaken) != 0; }
-                       set { flags |= Flags.AddressTaken; }
-               }
+                               if (type.IsStatic)
+                                       FieldBase.Error_VariableOfStaticClass (loc, li.Name, type, bc.Report);
 
-               public bool CompilerGenerated {
-                       get { return (flags & Flags.CompilerGenerated) != 0; }
-                       set { flags |= Flags.CompilerGenerated; }
-               }
+                               if (type.IsPointer && !bc.IsUnsafe)
+                                       Expression.UnsafeError (bc, loc);
 
-               public override string ToString ()
-               {
-                       return String.Format ("LocalInfo ({0},{1},{2},{3})",
-                                             Name, Type, VariableInfo, Location);
-               }
+                               li.Type = type;
+                       }
 
-               public bool Used {
-                       get { return (flags & Flags.Used) != 0; }
-                       set { flags = value ? (flags | Flags.Used) : (unchecked (flags & ~Flags.Used)); }
-               }
+                       bool eval_global = RootContext.StatementMode && bc.CurrentBlock is ToplevelBlock;
+                       if (eval_global) {
+                               CreateEvaluatorVariable (bc, li);
+                       } else {
+                               li.PrepareForFlowAnalysis (bc);
+                       }
+
+                       if (initializer != null) {
+                               initializer = ResolveInitializer (bc, li, initializer);
+                               // li.Variable.DefinitelyAssigned 
+                       }
+
+                       if (declarators != null) {
+                               foreach (var d in declarators) {
+                                       d.Variable.Type = li.Type;
+                                       if (eval_global) {
+                                               CreateEvaluatorVariable (bc, d.Variable);
+                                       } else {
+                                               d.Variable.PrepareForFlowAnalysis (bc);
+                                       }
+
+                                       if (d.Initializer != null) {
+                                               d.Initializer = ResolveInitializer (bc, d.Variable, d.Initializer);
+                                               // d.Variable.DefinitelyAssigned 
+                                       }
+                               }
+                       }
 
-               public bool ReadOnly {
-                       get { return (flags & Flags.ReadOnly) != 0; }
+                       return true;
                }
 
-               public void SetReadOnlyContext (ReadOnlyContext context)
+               protected virtual Expression ResolveInitializer (BlockContext bc, LocalVariable li, Expression initializer)
                {
-                       flags |= Flags.ReadOnly;
-                       ro_context = context;
+                       var a = new SimpleAssign (li.CreateReferenceExpression (bc, li.Location), initializer, li.Location);
+                       return a.ResolveStatement (bc);
                }
 
-               public string GetReadOnlyContext ()
+               protected override void DoEmit (EmitContext ec)
                {
-                       if (!ReadOnly)
-                               throw new InternalErrorException ("Variable is not readonly");
+                       if (li.IsConstant)
+                               return;
 
-                       switch (ro_context) {
-                       case ReadOnlyContext.Fixed:
-                               return "fixed variable";
-                       case ReadOnlyContext.Foreach:
-                               return "foreach iteration variable";
-                       case ReadOnlyContext.Using:
-                               return "using variable";
+                       li.CreateBuilder (ec);
+
+                       if (Initializer != null)
+                               ((ExpressionStatement) Initializer).EmitStatement (ec);
+
+                       if (declarators != null) {
+                               foreach (var d in declarators) {
+                                       d.Variable.CreateBuilder (ec);
+                                       if (d.Initializer != null)
+                                               ((ExpressionStatement) d.Initializer).EmitStatement (ec);
+                               }
                        }
-                       throw new NotImplementedException ();
                }
 
-               //
-               // Whether the variable is pinned, if Pinned the variable has been 
-               // allocated in a pinned slot with DeclareLocal.
-               //
-               public bool Pinned {
-                       get { return (flags & Flags.Pinned) != 0; }
-                       set { flags = value ? (flags | Flags.Pinned) : (flags & ~Flags.Pinned); }
-               }
+               protected override void CloneTo (CloneContext clonectx, Statement target)
+               {
+                       BlockVariableDeclaration t = (BlockVariableDeclaration) target;
 
-               public bool IsThis {
-                       get { return (flags & Flags.IsThis) != 0; }
-                       set { flags = value ? (flags | Flags.IsThis) : (flags & ~Flags.IsThis); }
-               }
+                       if (type_expr != null)
+                               t.type_expr = (FullNamedExpression) type_expr.Clone (clonectx);
 
-               Block IKnownVariable.Block {
-                       get { return Block; }
+                       if (initializer != null)
+                               t.initializer = initializer.Clone (clonectx);
+
+                       if (declarators != null) {
+                               t.declarators = null;
+                               foreach (var d in declarators)
+                                       t.AddDeclarator (new Declarator (d, d.Initializer == null ? null : d.Initializer.Clone (clonectx)));
+                       }
                }
+       }
 
-               Location IKnownVariable.Location {
-                       get { return Location; }
+       class BlockConstantDeclaration : BlockVariableDeclaration
+       {
+               public BlockConstantDeclaration (FullNamedExpression type, LocalVariable li)
+                       : base (type, li)
+               {
                }
 
-               public LocalInfo Clone (CloneContext clonectx)
+               protected override Expression ResolveInitializer (BlockContext bc, LocalVariable li, Expression initializer)
                {
-                       //
-                       // Variables in anonymous block are not resolved yet
-                       //
-                       if (VariableType == null)
-                               return new LocalInfo ((FullNamedExpression) Type.Clone (clonectx), Name, clonectx.LookupBlock (Block), Location);
+                       initializer = initializer.Resolve (bc);
+                       if (initializer == null)
+                               return null;
 
-                       //
-                       // Variables in method block are resolved
-                       //
-                       LocalInfo li = new LocalInfo (null, Name, clonectx.LookupBlock (Block), Location);
-                       li.VariableType = VariableType;
-                       return li;                      
-               }
-       }
+                       var c = initializer as Constant;
+                       if (c == null) {
+                               initializer.Error_ExpressionMustBeConstant (bc, initializer.Location, li.Name);
+                               return null;
+                       }
 
-       /// <summary>
-       ///   Block represents a C# block.
-       /// </summary>
-       ///
-       /// <remarks>
-       ///   This class is used in a number of places: either to represent
-       ///   explicit blocks that the programmer places or implicit blocks.
-       ///
-       ///   Implicit blocks are used as labels or to introduce variable
-       ///   declarations.
-       ///
-       ///   Top-level blocks derive from Block, and they are called ToplevelBlock
-       ///   they contain extra information that is not necessary on normal blocks.
-       /// </remarks>
-       public class Block : Statement {
-               public Block    Parent;
-               public Location StartLocation;
-               public Location EndLocation = Location.Null;
+                       c = c.ConvertImplicitly (bc, li.Type);
+                       if (c == null) {
+                               if (TypeManager.IsReferenceType (li.Type))
+                                       initializer.Error_ConstantCanBeInitializedWithNullOnly (bc, li.Type, initializer.Location, li.Name);
+                               else
+                                       initializer.Error_ValueCannotBeConverted (bc, initializer.Location, li.Type, false);
 
-               public ExplicitBlock Explicit;
-               public ToplevelBlock Toplevel; // TODO: Use Explicit
+                               return null;
+                       }
 
+                       li.ConstantValue = c;
+                       return initializer;
+               }
+       }
+
+       //
+       // The information about a user-perceived local variable
+       //
+       public class LocalVariable : INamedBlockVariable, ILocalVariable
+       {
                [Flags]
                public enum Flags
                {
-                       Unchecked = 1,
-                       BlockUsed = 2,
-                       VariablesInitialized = 4,
-                       HasRet = 8,
-                       Unsafe = 16,
-                       IsIterator = 32,
-                       HasCapturedVariable = 64,
-                       HasCapturedThis = 1 << 7,
-                       IsExpressionTree = 1 << 8
+                       Used = 1,
+                       IsThis = 1 << 1,
+                       AddressTaken = 1 << 2,
+                       CompilerGenerated = 1 << 3,
+                       Constant = 1 << 4,
+                       ForeachVariable = 1 << 5,
+                       FixedVariable = 1 << 6,
+                       UsingVariable = 1 << 7,
+//                     DefinitelyAssigned = 1 << 8,
+
+                       ReadonlyMask = ForeachVariable | FixedVariable | UsingVariable
                }
 
-               protected Flags flags;
+               TypeSpec type;
+               readonly string name;
+               readonly Location loc;
+               readonly Block block;
+               Flags flags;
+               Constant const_value;
 
-               public bool Unchecked {
-                       get { return (flags & Flags.Unchecked) != 0; }
-                       set { flags = value ? flags | Flags.Unchecked : flags & ~Flags.Unchecked; }
-               }
+               public VariableInfo VariableInfo;
+               HoistedVariable hoisted_variant;
 
-               public bool Unsafe {
-                       get { return (flags & Flags.Unsafe) != 0; }
-                       set { flags |= Flags.Unsafe; }
+               LocalBuilder builder;
+
+               public LocalVariable (Block block, string name, Location loc)
+               {
+                       this.block = block;
+                       this.name = name;
+                       this.loc = loc;
                }
 
-               //
-               // The statements in this block
-               //
-               protected List<Statement> statements;
+               public LocalVariable (Block block, string name, Flags flags, Location loc)
+                       : this (block, name, loc)
+               {
+                       this.flags = flags;
+               }
 
                //
-               // An array of Blocks.  We keep track of children just
-               // to generate the local variable declarations.
-               //
-               // Statements and child statements are handled through the
-               // statements.
+               // Used by variable declarators
                //
-               List<Block> children;
+               public LocalVariable (LocalVariable li, string name, Location loc)
+                       : this (li.block, name, li.flags, loc)
+               {
+               }
 
-               //
-               // Labels.  (label, block) pairs.
-               //
-               protected Dictionary<string, LabeledStatement> labels;
+               #region Properties
 
-               //
-               // Keeps track of (name, type) pairs
-               //
-               Dictionary<string, LocalInfo> variables;
+               public Block Block {
+                       get {
+                               return block;
+                       }
+               }
 
-               //
-               // Keeps track of constants
-               Dictionary<string, Expression> constants;
+               public Constant ConstantValue {
+                       get {
+                               return const_value;
+                       }
+                       set {
+                               const_value = value;
+                       }
+               }
 
                //
-               // Temporary variables.
-               //
-               List<LocalInfo> temporary_variables;
-               
-               //
-               // If this is a switch section, the enclosing switch block.
+               // Hoisted local variable variant
                //
-               protected ExplicitBlock switch_block;
+               public HoistedVariable HoistedVariant {
+                       get {
+                               return hoisted_variant;
+                       }
+                       set {
+                               hoisted_variant = value;
+                       }
+               }
 
-               protected List<Statement> scope_initializers;
+               public bool IsDeclared {
+                       get {
+                               return type != null;
+                       }
+               }
 
-               List<ToplevelBlock> anonymous_children;
+               public bool IsConstant {
+                       get {
+                               return (flags & Flags.Constant) != 0;
+                       }
+               }
 
-               int? resolving_init_idx;
-
-               protected static int id;
-
-               int this_id;
-
-               int assignable_slots;
-               bool unreachable_shown;
-               bool unreachable;
-               
-               public Block (Block parent)
-                       : this (parent, (Flags) 0, Location.Null, Location.Null)
-               { }
-
-               public Block (Block parent, Flags flags)
-                       : this (parent, flags, Location.Null, Location.Null)
-               { }
-
-               public Block (Block parent, Location start, Location end)
-                       : this (parent, (Flags) 0, start, end)
-               { }
-
-               //
-               // Useful when TopLevel block is downgraded to normal block
-               //
-               public Block (ToplevelBlock parent, ToplevelBlock source)
-                       : this (parent, source.flags, source.StartLocation, source.EndLocation)
-               {
-                       statements = source.statements;
-                       children = source.children;
-                       labels = source.labels;
-                       variables = source.variables;
-                       constants = source.constants;
-                       switch_block = source.switch_block;
+               public bool IsThis {
+                       get {
+                               return (flags & Flags.IsThis) != 0;
+                       }
                }
 
-               public Block (Block parent, Flags flags, Location start, Location end)
-               {
-                       if (parent != null) {
-                               parent.AddChild (this);
-
-                               // the appropriate constructors will fixup these fields
-                               Toplevel = parent.Toplevel;
-                               Explicit = parent.Explicit;
+               public bool IsFixed {
+                       get {
+                               return (flags & Flags.FixedVariable) != 0;
                        }
-                       
-                       this.Parent = parent;
-                       this.flags = flags;
-                       this.StartLocation = start;
-                       this.EndLocation = end;
-                       this.loc = start;
-                       this_id = id++;
-                       statements = new List<Statement> (4);
                }
 
-               #region Properties
-
-               public int ID {
-                       get { return this_id; }
+               public bool IsReadonly {
+                       get {
+                               return (flags & Flags.ReadonlyMask) != 0;
+                       }
                }
 
-               public IDictionary<string, LocalInfo> Variables {
+               public Location Location {
                        get {
-                               if (variables == null)
-                                       variables = new Dictionary<string, LocalInfo> ();
-                               return variables;
+                               return loc;
                        }
                }
 
-               #endregion
-
-               public ExplicitBlock CreateSwitchBlock (Location start)
-               {
-                       // FIXME: Only explicit block should be created
-                       var new_block = new ExplicitBlock (this, start, start);
-                       new_block.switch_block = Explicit;
-                       return new_block;
+               public string Name {
+                       get {
+                               return name;
+                       }
                }
 
-               void AddChild (Block b)
-               {
-                       if (children == null)
-                               children = new List<Block> (1);
-                       
-                       children.Add (b);
+               public TypeSpec Type {
+                   get {
+                               return type;
+                       }
+                   set {
+                               type = value;
+                       }
                }
 
-               public void SetEndLocation (Location loc)
-               {
-                       EndLocation = loc;
-               }
+               #endregion
 
-               protected void Error_158 (string name, Location loc)
+               public void CreateBuilder (EmitContext ec)
                {
-                       Toplevel.Report.Error (158, loc, "The label `{0}' shadows another label " +
-                                     "by the same name in a contained scope", name);
-               }
-
-               /// <summary>
-               ///   Adds a label to the current block. 
-               /// </summary>
-               ///
-               /// <returns>
-               ///   false if the name already exists in this block. true
-               ///   otherwise.
-               /// </returns>
-               ///
-               public bool AddLabel (LabeledStatement target)
-               {
-                       if (switch_block != null)
-                               return switch_block.AddLabel (target);
-
-                       string name = target.Name;
-
-                       Block cur = this;
-                       while (cur != null) {
-                               LabeledStatement s = cur.DoLookupLabel (name);
-                               if (s != null) {
-                                       Toplevel.Report.SymbolRelatedToPreviousError (s.loc, s.Name);
-                                       Toplevel.Report.Error (140, target.loc, "The label `{0}' is a duplicate", name);
-                                       return false;
+                       if ((flags & Flags.Used) == 0) {
+                               if (VariableInfo == null) {
+                                       // Missing flow analysis or wrong variable flags
+                                       throw new InternalErrorException ("VariableInfo is null and the variable `{0}' is not used", name);
                                }
 
-                               if (this == Explicit)
-                                       break;
-
-                               cur = cur.Parent;
+                               if (VariableInfo.IsEverAssigned)
+                                       ec.Report.Warning (219, 3, Location, "The variable `{0}' is assigned but its value is never used", Name);
+                               else
+                                       ec.Report.Warning (168, 3, Location, "The variable `{0}' is declared but never used", Name);
                        }
 
-                       while (cur != null) {
-                               if (cur.DoLookupLabel (name) != null) {
-                                       Error_158 (name, target.loc);
-                                       return false;
-                               }
-
-                               if (children != null) {
-                                       foreach (Block b in children) {
-                                               LabeledStatement s = b.DoLookupLabel (name);
-                                               if (s == null)
-                                                       continue;
+                       if (HoistedVariant != null)
+                               return;
 
-                                               Toplevel.Report.SymbolRelatedToPreviousError (s.loc, s.Name);
-                                               Error_158 (name, target.loc);
-                                               return false;
-                                       }
-                               }
+                       if (builder != null) {
+                               if ((flags & Flags.CompilerGenerated) != 0)
+                                       return;
 
-                               cur = cur.Parent;
+                               // To avoid Used warning duplicates
+                               throw new InternalErrorException ("Already created variable `{0}'", name);
                        }
 
-                       Toplevel.CheckError158 (name, target.loc);
-
-                       if (labels == null)
-                               labels = new Dictionary<string, LabeledStatement> ();
-
-                       labels.Add (name, target);
-                       return true;
+                       //
+                       // All fixed variabled are pinned, a slot has to be alocated
+                       //
+                       builder = ec.DeclareLocal (Type, IsFixed);
+                       if (SymbolWriter.HasSymbolWriter)
+                               ec.DefineLocalVariable (name, builder);
                }
 
-               public LabeledStatement LookupLabel (string name)
+               public static LocalVariable CreateCompilerGenerated (TypeSpec type, Block block, Location loc)
                {
-                       LabeledStatement s = DoLookupLabel (name);
-                       if (s != null)
-                               return s;
+                       LocalVariable li = new LocalVariable (block, "<$$>", Flags.CompilerGenerated | Flags.Used, loc);
+                       li.Type = type;
+                       return li;
+               }
 
-                       if (children == null)
-                               return null;
+               public Expression CreateReferenceExpression (ResolveContext rc, Location loc)
+               {
+                       if (IsConstant && const_value != null)
+                               return Constant.CreateConstantFromValue (Type, const_value.GetValue (), loc).Resolve (rc);
 
-                       foreach (Block child in children) {
-                               if (Explicit != child.Explicit)
-                                       continue;
+                       return new LocalVariableReference (this, loc);
+               }
 
-                               s = child.LookupLabel (name);
-                               if (s != null)
-                                       return s;
-                       }
+               public void Emit (EmitContext ec)
+               {
+                       // TODO: Need something better for temporary variables
+                       if ((flags & Flags.CompilerGenerated) != 0)
+                               CreateBuilder (ec);
 
-                       return null;
+                       ec.Emit (OpCodes.Ldloc, builder);
                }
 
-               LabeledStatement DoLookupLabel (string name)
+               public void EmitAssign (EmitContext ec)
                {
-                       if (switch_block != null)
-                               return switch_block.LookupLabel (name);
+                       // TODO: Need something better for temporary variables
+                       if ((flags & Flags.CompilerGenerated) != 0)
+                               CreateBuilder (ec);
 
-                       if (labels != null)
-                               if (labels.ContainsKey (name))
-                                       return labels [name];
+                       ec.Emit (OpCodes.Stloc, builder);
+               }
 
-                       return null;
+               public void EmitAddressOf (EmitContext ec)
+               {
+                       ec.Emit (OpCodes.Ldloca, builder);
                }
 
-               public bool CheckInvariantMeaningInBlock (string name, Expression e, Location loc)
+               public bool IsThisAssigned (BlockContext ec, Block block)
                {
-                       Block b = this;
-                       IKnownVariable kvi = b.Explicit.GetKnownVariable (name);
-                       while (kvi == null) {
-                               b = b.Explicit.Parent;
-                               if (b == null)
-                                       return true;
-                               kvi = b.Explicit.GetKnownVariable (name);
-                       }
+                       if (VariableInfo == null)
+                               throw new Exception ();
 
-                       if (kvi.Block == b)
+                       if (!ec.DoFlowAnalysis || ec.CurrentBranching.IsAssigned (VariableInfo))
                                return true;
 
-                       // Is kvi.Block nested inside 'b'
-                       if (b.Explicit != kvi.Block.Explicit) {
-                               //
-                               // If a variable by the same name it defined in a nested block of this
-                               // block, we violate the invariant meaning in a block.
-                               //
-                               if (b == this) {
-                                       Toplevel.Report.SymbolRelatedToPreviousError (kvi.Location, name);
-                                       Toplevel.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", name);
-                                       return false;
-                               }
-
-                               //
-                               // It's ok if the definition is in a nested subblock of b, but not
-                               // nested inside this block -- a definition in a sibling block
-                               // should not affect us.
-                               //
-                               return true;
-                       }
+                       return VariableInfo.TypeInfo.IsFullyInitialized (ec, VariableInfo, block.StartLocation);
+               }
 
-                       //
-                       // Block 'b' and kvi.Block are the same textual block.
-                       // However, different variables are extant.
-                       //
-                       // Check if the variable is in scope in both blocks.  We use
-                       // an indirect check that depends on AddVariable doing its
-                       // part in maintaining the invariant-meaning-in-block property.
-                       //
-                       if (e is VariableReference || (e is Constant && b.GetLocalInfo (name) != null))
-                               return true;
+               public bool IsAssigned (BlockContext ec)
+               {
+                       if (VariableInfo == null)
+                               throw new Exception ();
 
-                       if (this is ToplevelBlock) {
-                               Toplevel.Report.SymbolRelatedToPreviousError (kvi.Location, name);
-                               e.Error_VariableIsUsedBeforeItIsDeclared (Toplevel.Report, name);
-                               return false;
-                       }
+                       return !ec.DoFlowAnalysis || ec.CurrentBranching.IsAssigned (VariableInfo);
+               }
 
+               public void PrepareForFlowAnalysis (BlockContext bc)
+               {
                        //
-                       // Even though we detected the error when the name is used, we
-                       // treat it as if the variable declaration was in error.
+                       // No need for definitely assigned check for these guys
                        //
-                       Toplevel.Report.SymbolRelatedToPreviousError (loc, name);
-                       Error_AlreadyDeclared (kvi.Location, name, "parent or current");
-                       return false;
+                       if ((flags & (Flags.Constant | Flags.ReadonlyMask | Flags.CompilerGenerated)) != 0)
+                               return;
+
+                       VariableInfo = new VariableInfo (this, bc.FlowOffset);
+                       bc.FlowOffset += VariableInfo.Length;
                }
 
-               protected bool CheckParentConflictName (ToplevelBlock block, string name, Location l)
+               //
+               // Mark the variables as referenced in the user code
+               //
+               public void SetIsUsed ()
                {
-                       LocalInfo vi = GetLocalInfo (name);
-                       if (vi != null) {
-                               block.Report.SymbolRelatedToPreviousError (vi.Location, name);
-                               if (Explicit == vi.Block.Explicit) {
-                                       Error_AlreadyDeclared (l, name, null);
-                               } else {
-                                       Error_AlreadyDeclared (l, name, this is ToplevelBlock ?
-                                               "parent or current" : "parent");
-                               }
-                               return false;
-                       }
+                       flags |= Flags.Used;
+               }
 
-                       if (block != null) {
-                               var tblock = block.CheckParameterNameConflict (name);
-                               if (tblock != null) {
-                                       if (block == tblock && block is Linq.QueryBlock)
-                                               Error_AlreadyDeclared (loc, name);
-                                       else
-                                               Error_AlreadyDeclared (loc, name, "parent or current");
+               public bool AddressTaken {
+                       get { return (flags & Flags.AddressTaken) != 0; }
+                       set { flags |= Flags.AddressTaken; }
+               }
 
-                                       return false;
-                               }
+               public override string ToString ()
+               {
+                       return string.Format ("LocalInfo ({0},{1},{2},{3})", name, type, VariableInfo, Location);
+               }
+
+               public string GetReadOnlyContext ()
+               {
+                       switch (flags & Flags.ReadonlyMask) {
+                       case Flags.FixedVariable:
+                               return "fixed variable";
+                       case Flags.ForeachVariable:
+                               return "foreach iteration variable";
+                       case Flags.UsingVariable:
+                               return "using variable";
                        }
 
-                       return true;
+                       throw new InternalErrorException ("Variable is not readonly");
                }
+       }
 
-               public LocalInfo AddVariable (Expression type, string name, Location l)
+       /// <summary>
+       ///   Block represents a C# block.
+       /// </summary>
+       ///
+       /// <remarks>
+       ///   This class is used in a number of places: either to represent
+       ///   explicit blocks that the programmer places or implicit blocks.
+       ///
+       ///   Implicit blocks are used as labels or to introduce variable
+       ///   declarations.
+       ///
+       ///   Top-level blocks derive from Block, and they are called ToplevelBlock
+       ///   they contain extra information that is not necessary on normal blocks.
+       /// </remarks>
+       public class Block : Statement {
+               [Flags]
+               public enum Flags
                {
-                       if (!CheckParentConflictName (Toplevel, name, l))
-                               return null;
+                       Unchecked = 1,
+                       HasRet = 8,
+                       Unsafe = 16,
+                       IsIterator = 32,
+                       HasCapturedVariable = 64,
+                       HasCapturedThis = 1 << 7,
+                       IsExpressionTree = 1 << 8,
+                       CompilerGenerated = 1 << 9
+               }
 
-                       IKnownVariable kvi = Explicit.GetKnownVariable (name);
-                       if (kvi != null) {
-                               Toplevel.Report.SymbolRelatedToPreviousError (kvi.Location, name);
-                               Error_AlreadyDeclared (l, name, "child");
-                               return null;
-                       }
+               public Block Parent;
+               public Location StartLocation;
+               public Location EndLocation;
 
-                       LocalInfo vi = new LocalInfo ((FullNamedExpression) type, name, this, l);
-                       AddVariable (vi);
+               public ExplicitBlock Explicit;
+               public ParametersBlock ParametersBlock;
 
-                       if ((flags & Flags.VariablesInitialized) != 0)
-                               throw new InternalErrorException ("block has already been resolved");
+               protected Flags flags;
 
-                       return vi;
-               }
+               //
+               // The statements in this block
+               //
+               protected List<Statement> statements;
+
+               protected List<Statement> scope_initializers;
+
+               int? resolving_init_idx;
+
+               Block original;
+
+#if DEBUG
+               static int id;
+               public int ID = id++;
+
+               static int clone_id_counter;
+               int clone_id;
+#endif
+
+//             int assignable_slots;
+               bool unreachable_shown;
+               bool unreachable;
                
-               protected virtual void AddVariable (LocalInfo li)
+               public Block (Block parent, Location start, Location end)
+                       : this (parent, 0, start, end)
                {
-                       Variables.Add (li.Name, li);
-                       Explicit.AddKnownVariable (li.Name, li);
                }
 
-               protected virtual void Error_AlreadyDeclared (Location loc, string var, string reason)
+               public Block (Block parent, Flags flags, Location start, Location end)
                {
-                       if (reason == null) {
-                               Error_AlreadyDeclared (loc, var);
-                               return;
+                       if (parent != null) {
+                               // the appropriate constructors will fixup these fields
+                               ParametersBlock = parent.ParametersBlock;
+                               Explicit = parent.Explicit;
                        }
                        
-                       Toplevel.Report.Error (136, loc, "A local variable named `{0}' cannot be declared " +
-                                     "in this scope because it would give a different meaning " +
-                                     "to `{0}', which is already used in a `{1}' scope " +
-                                     "to denote something else", var, reason);
+                       this.Parent = parent;
+                       this.flags = flags;
+                       this.StartLocation = start;
+                       this.EndLocation = end;
+                       this.loc = start;
+                       statements = new List<Statement> (4);
+
+                       this.original = this;
                }
 
-               protected virtual void Error_AlreadyDeclared (Location loc, string name)
-               {
-                       Toplevel.Report.Error (128, loc,
-                               "A local variable named `{0}' is already defined in this scope", name);
+               #region Properties
+
+               public bool HasRet {
+                       get { return (flags & Flags.HasRet) != 0; }
                }
-                                       
-               public virtual void Error_AlreadyDeclaredTypeParameter (Location loc, string name, string conflict)
-               {
-                       Toplevel.Report.Error (412, loc, "The type parameter name `{0}' is the same as `{1}'",
-                               name, conflict);
+
+               public Block Original {
+                       get {
+                               return original;
+                       }
                }
 
-               public bool AddConstant (Expression type, string name, Expression value, Location l)
-               {
-                       if (AddVariable (type, name, l) == null)
-                               return false;
-                       
-                       if (constants == null)
-                               constants = new Dictionary<string, Expression> ();
+               public bool IsCompilerGenerated {
+                       get { return (flags & Flags.CompilerGenerated) != 0; }
+                       set { flags = value ? flags | Flags.CompilerGenerated : flags & ~Flags.CompilerGenerated; }
+               }
 
-                       constants.Add (name, value);
+               public bool Unchecked {
+                       get { return (flags & Flags.Unchecked) != 0; }
+                       set { flags = value ? flags | Flags.Unchecked : flags & ~Flags.Unchecked; }
+               }
 
-                       // A block is considered used if we perform an initialization in a local declaration, even if it is constant.
-                       Use ();
-                       return true;
+               public bool Unsafe {
+                       get { return (flags & Flags.Unsafe) != 0; }
+                       set { flags |= Flags.Unsafe; }
                }
 
-               static int next_temp_id = 0;
+               #endregion
 
-               public LocalInfo AddTemporaryVariable (TypeExpr te, Location loc)
+               public Block CreateSwitchBlock (Location start)
                {
-                       Report.Debug (64, "ADD TEMPORARY", this, Toplevel, loc);
-
-                       if (temporary_variables == null)
-                               temporary_variables = new List<LocalInfo> ();
+                       // FIXME: Only explicit block should be created
+                       var new_block = new Block (this, start, start);
+                       new_block.IsCompilerGenerated = true;
+                       return new_block;
+               }
 
-                       int id = ++next_temp_id;
-                       string name = "$s_" + id.ToString ();
+               public void SetEndLocation (Location loc)
+               {
+                       EndLocation = loc;
+               }
 
-                       LocalInfo li = new LocalInfo (te, name, this, loc);
-                       li.CompilerGenerated = true;
-                       temporary_variables.Add (li);
-                       return li;
+               public void AddLabel (LabeledStatement target)
+               {
+                       ParametersBlock.TopBlock.AddLabel (target.Name, target);
                }
 
-               public LocalInfo GetLocalInfo (string name)
+               public void AddLocalName (LocalVariable li)
                {
-                       LocalInfo ret;
-                       for (Block b = this; b != null; b = b.Parent) {
-                               if (b.variables != null && b.variables.TryGetValue (name, out ret)) {
-                                       return ret;
-                               }
-                       }
+                       AddLocalName (li.Name, li);
+               }
 
-                       return null;
+               public virtual void AddLocalName (string name, INamedBlockVariable li)
+               {
+                       ParametersBlock.TopBlock.AddLocalName (name, li);
                }
 
-               public Expression GetVariableType (string name)
+               public virtual void Error_AlreadyDeclared (string name, INamedBlockVariable variable, string reason)
                {
-                       LocalInfo vi = GetLocalInfo (name);
-                       return vi == null ? null : vi.Type;
+                       if (reason == null) {
+                               Error_AlreadyDeclared (name, variable);
+                               return;
+                       }
+
+                       ParametersBlock.TopBlock.Report.Error (136, variable.Location,
+                               "A local variable named `{0}' cannot be declared in this scope because it would give a different meaning " +
+                               "to `{0}', which is already used in a `{1}' scope to denote something else",
+                               name, reason);
                }
 
-               public Expression GetConstantExpression (string name)
+               public virtual void Error_AlreadyDeclared (string name, INamedBlockVariable variable)
                {
-                       Expression ret;
-                       for (Block b = this; b != null; b = b.Parent) {
-                               if (b.constants != null) {
-                                       if (b.constants.TryGetValue (name, out ret))
-                                               return ret;
+                       var pi = variable as ParametersBlock.ParameterInfo;
+                       if (pi != null) {
+                               var p = pi.Parameter;
+                               if (p is AnonymousTypeClass.GeneratedParameter) {
+                                       ParametersBlock.TopBlock.Report.Error (833, p.Location, "`{0}': An anonymous type cannot have multiple properties with the same name",
+                                               p.Name);
+                               } else {
+                                       ParametersBlock.TopBlock.Report.Error (100, p.Location, "The parameter name `{0}' is a duplicate", p.Name);
                                }
+
+                               return;
                        }
-                       return null;
+
+                       ParametersBlock.TopBlock.Report.Error (128, variable.Location,
+                               "A local variable named `{0}' is already defined in this scope", name);
+               }
+                                       
+               public virtual void Error_AlreadyDeclaredTypeParameter (string name, Location loc)
+               {
+                       ParametersBlock.TopBlock.Report.Error (412, loc,
+                               "The type parameter name `{0}' is the same as local variable or parameter name",
+                               name);
                }
 
                //
@@ -1889,206 +1925,19 @@ namespace Mono.CSharp {
                public void AddStatement (Statement s)
                {
                        statements.Add (s);
-                       flags |= Flags.BlockUsed;
-               }
-
-               public bool Used {
-                       get { return (flags & Flags.BlockUsed) != 0; }
-               }
-
-               public void Use ()
-               {
-                       flags |= Flags.BlockUsed;
-               }
-
-               public bool HasRet {
-                       get { return (flags & Flags.HasRet) != 0; }
                }
 
                public int AssignableSlots {
                        get {
-// TODO: Re-enable                     
-//                             if ((flags & Flags.VariablesInitialized) == 0)
-//                                     throw new Exception ("Variables have not been initialized yet");
-                               return assignable_slots;
-                       }
-               }
-
-               public IList<ToplevelBlock> AnonymousChildren {
-                       get { return anonymous_children; }
-               }
-
-               public void AddAnonymousChild (ToplevelBlock b)
-               {
-                       if (anonymous_children == null)
-                               anonymous_children = new List<ToplevelBlock> ();
-
-                       anonymous_children.Add (b);
-               }
-
-               void DoResolveConstants (BlockContext ec)
-               {
-                       if (constants == null)
-                               return;
-
-                       if (variables == null)
-                               throw new InternalErrorException ("cannot happen");
-
-                       foreach (var de in variables) {
-                               string name = de.Key;
-                               LocalInfo vi = de.Value;
-                               TypeSpec variable_type = vi.VariableType;
-
-                               if (variable_type == null) {
-                                       if (vi.Type is VarExpr)
-                                               ec.Report.Error (822, vi.Type.Location, "An implicitly typed local variable cannot be a constant");
-
-                                       continue;
-                               }
-
-                               Expression cv;
-                               if (!constants.TryGetValue (name, out cv))
-                                       continue;
-
-                               // Don't let 'const int Foo = Foo;' succeed.
-                               // Removing the name from 'constants' ensures that we get a LocalVariableReference below,
-                               // which in turn causes the 'must be constant' error to be triggered.
-                               constants.Remove (name);
-
-                               if (!variable_type.IsConstantCompatible) {
-                                       Const.Error_InvalidConstantType (variable_type, vi.Location, ec.Report);
-                                       continue;
-                               }
-
-                               ec.CurrentBlock = this;
-                               Expression e;
-                               using (ec.With (ResolveContext.Options.ConstantCheckState, (flags & Flags.Unchecked) == 0)) {
-                                       using (ec.With (ResolveContext.Options.DoFlowAnalysis, false)) {
-                                               e = cv.Resolve (ec);
-                                       }
-                               }
-                               if (e == null)
-                                       continue;
-
-                               Constant ce = e as Constant;
-                               if (ce == null) {
-                                       e.Error_ExpressionMustBeConstant (ec, vi.Location, name);
-                                       continue;
-                               }
-
-                               e = ce.ConvertImplicitly (ec, variable_type);
-                               if (e == null) {
-                                       if (TypeManager.IsReferenceType (variable_type))
-                                               ce.Error_ConstantCanBeInitializedWithNullOnly (ec, variable_type, vi.Location, vi.Name);
-                                       else
-                                               ce.Error_ValueCannotBeConverted (ec, vi.Location, variable_type, false);
-                                       continue;
-                               }
-
-                               constants.Add (name, e);
-                               vi.IsConstant = true;
+                               // FIXME: HACK, we don't know the block available variables count now, so set this high enough
+                               return 4096;
+//                             return assignable_slots;
                        }
                }
 
-               protected void ResolveMeta (BlockContext ec, int offset)
-               {
-                       Report.Debug (64, "BLOCK RESOLVE META", this, Parent);
-
-                       // If some parent block was unsafe, we remain unsafe even if this block
-                       // isn't explicitly marked as such.
-                       using (ec.With (ResolveContext.Options.UnsafeScope, ec.IsUnsafe | Unsafe)) {
-                               flags |= Flags.VariablesInitialized;
-
-                               if (variables != null) {
-                                       foreach (LocalInfo li in variables.Values) {
-                                               if (!li.Resolve (ec))
-                                                       continue;
-                                               li.VariableInfo = new VariableInfo (li, offset);
-                                               offset += li.VariableInfo.Length;
-                                       }
-                               }
-                               assignable_slots = offset;
-
-                               DoResolveConstants (ec);
-
-                               if (children == null)
-                                       return;
-                               foreach (Block b in children)
-                                       b.ResolveMeta (ec, offset);
-                       }
-               }
-
-               //
-               // Emits the local variable declarations for a block
-               //
-               public virtual void EmitMeta (EmitContext ec)
+               public LabeledStatement LookupLabel (string name)
                {
-                       if (variables != null){
-                               foreach (LocalInfo vi in variables.Values)
-                                       vi.ResolveVariable (ec);
-                       }
-
-                       if (temporary_variables != null) {
-                               for (int i = 0; i < temporary_variables.Count; i++)
-                                       ((LocalInfo)temporary_variables[i]).ResolveVariable(ec);
-                       }
-
-                       if (children != null) {
-                               for (int i = 0; i < children.Count; i++)
-                                       ((Block)children[i]).EmitMeta(ec);
-                       }
-               }
-
-               void UsageWarning (BlockContext ec)
-               {
-                       if (variables == null || ec.Report.WarningLevel < 3)
-                               return;
-
-                       foreach (var de in variables) {
-                               LocalInfo vi = de.Value;
-
-                               if (!vi.Used) {
-                                       string name = de.Key;
-
-                                       // vi.VariableInfo can be null for 'catch' variables
-                                       if (vi.VariableInfo != null && vi.VariableInfo.IsEverAssigned)
-                                               ec.Report.Warning (219, 3, vi.Location, "The variable `{0}' is assigned but its value is never used", name);
-                                       else
-                                               ec.Report.Warning (168, 3, vi.Location, "The variable `{0}' is declared but never used", name);
-                               }
-                       }
-               }
-
-               static void CheckPossibleMistakenEmptyStatement (BlockContext ec, Statement s)
-               {
-                       Statement body;
-
-                       // Some statements are wrapped by a Block. Since
-                       // others' internal could be changed, here I treat
-                       // them as possibly wrapped by Block equally.
-                       Block b = s as Block;
-                       if (b != null && b.statements.Count == 1)
-                               s = (Statement) b.statements [0];
-
-                       if (s is Lock)
-                               body = ((Lock) s).Statement;
-                       else if (s is For)
-                               body = ((For) s).Statement;
-                       else if (s is Foreach)
-                               body = ((Foreach) s).Statement;
-                       else if (s is While)
-                               body = ((While) s).Statement;
-                       else if (s is Fixed)
-                               body = ((Fixed) s).Statement;
-                       else if (s is Using)
-                               body = ((Using) s).EmbeddedStatement;
-                       else if (s is UsingTemporary)
-                               body = ((UsingTemporary) s).Statement;
-                       else
-                               return;
-
-                       if (body == null || body is EmptyStatement)
-                               ec.Report.Warning (642, 3, s.loc, "Possible mistaken empty statement");
+                       return ParametersBlock.TopBlock.GetLabel (name, this);
                }
 
                public override bool Resolve (BlockContext ec)
@@ -2096,8 +1945,6 @@ namespace Mono.CSharp {
                        Block prev_block = ec.CurrentBlock;
                        bool ok = true;
 
-                       int errors = ec.Report.Errors;
-
                        ec.CurrentBlock = this;
                        ec.StartFlowBranching (this);
 
@@ -2123,10 +1970,6 @@ namespace Mono.CSharp {
                        int statement_count = statements.Count;
                        for (int ix = 0; ix < statement_count; ix++){
                                Statement s = statements [ix];
-                               // Check possible empty statement (CS0642)
-                               if (ix + 1 < statement_count && ec.Report.WarningLevel >= 3 &&
-                                       statements [ix + 1] is ExplicitBlock)
-                                       CheckPossibleMistakenEmptyStatement (ec, s);
 
                                //
                                // Warn if we detect unreachable code.
@@ -2185,18 +2028,9 @@ namespace Mono.CSharp {
 
                        // If we're a non-static `struct' constructor which doesn't have an
                        // initializer, then we must initialize all of the struct's fields.
-                       if (this == Toplevel && !Toplevel.IsThisAssigned (ec) && !flow_unreachable)
+                       if (this == ParametersBlock.TopBlock && !ParametersBlock.TopBlock.IsThisAssigned (ec) && !flow_unreachable)
                                ok = false;
 
-                       if ((labels != null) && (ec.Report.WarningLevel >= 2)) {
-                               foreach (LabeledStatement label in labels.Values)
-                                       if (!label.HasBeenReferenced)
-                                               ec.Report.Warning (164, 2, label.loc, "This label has not been referenced");
-                       }
-
-                       if (ok && errors == ec.Report.Errors)
-                               UsageWarning (ec);
-
                        return ok;
                }
 
@@ -2248,60 +2082,38 @@ namespace Mono.CSharp {
 
                protected virtual void EmitSymbolInfo (EmitContext ec)
                {
-                       if (variables != null) {
-                               foreach (LocalInfo vi in variables.Values) {
-                                       vi.EmitSymbolInfo (ec);
-                               }
-                       }
                }
 
+#if DEBUG
                public override string ToString ()
                {
-                       return String.Format ("{0} ({1}:{2})", GetType (), this_id, StartLocation);
+                       return String.Format ("{0} ({1}:{2})", GetType (), ID, StartLocation);
                }
+#endif
 
                protected override void CloneTo (CloneContext clonectx, Statement t)
                {
                        Block target = (Block) t;
+#if DEBUG
+                       target.clone_id = clone_id_counter++;
+#endif
 
                        clonectx.AddBlockMap (this, target);
 
-                       target.Toplevel = (ToplevelBlock) (Toplevel == this ? target : clonectx.LookupBlock (Toplevel));
+                       target.ParametersBlock = (ParametersBlock) (ParametersBlock == this ? target : clonectx.RemapBlockCopy (ParametersBlock));
                        target.Explicit = (ExplicitBlock) (Explicit == this ? target : clonectx.LookupBlock (Explicit));
 
-                       if (Parent != null)
-                               target.Parent = clonectx.RemapBlockCopy (Parent);
-
-                       if (variables != null){
-                               target.variables = new Dictionary<string, LocalInfo> ();
-
-                               foreach (var de in variables){
-                                       LocalInfo newlocal = de.Value.Clone (clonectx);
-                                       target.variables [de.Key] = newlocal;
-                                       clonectx.AddVariableMap (de.Value, newlocal);
-                               }
-                       }
-
+                       if (Parent != null)
+                               target.Parent = clonectx.RemapBlockCopy (Parent);
+
                        target.statements = new List<Statement> (statements.Count);
                        foreach (Statement s in statements)
                                target.statements.Add (s.Clone (clonectx));
-
-                       if (target.children != null){
-                               target.children = new List<Block> (children.Count);
-                               foreach (Block b in children){
-                                       target.children.Add (clonectx.LookupBlock (b));
-                               }
-                       }
-
-                       //
-                       // TODO: labels, switch_block, constants (?), anonymous_children
-                       //
                }
        }
 
        public class ExplicitBlock : Block
        {
-               Dictionary<string, IKnownVariable> known_variables;
                protected AnonymousMethodStorey am_storey;
 
                public ExplicitBlock (Block parent, Location start, Location end)
@@ -2315,38 +2127,35 @@ namespace Mono.CSharp {
                        this.Explicit = this;
                }
 
-               // <summary>
-               //   Marks a variable with name @name as being used in this or a child block.
-               //   If a variable name has been used in a child block, it's illegal to
-               //   declare a variable with the same name in the current block.
-               // </summary>
-               internal void AddKnownVariable (string name, IKnownVariable info)
-               {
-                       if (known_variables == null)
-                               known_variables = new Dictionary<string, IKnownVariable> ();
+               #region Properties
 
-                       known_variables [name] = info;
+               public AnonymousMethodStorey AnonymousMethodStorey {
+                       get {
+                               return am_storey;
+                       }
+               }
 
-                       if (Parent != null)
-                               Parent.Explicit.AddKnownVariable (name, info);
+               public bool HasCapturedThis {
+                       set { flags = value ? flags | Flags.HasCapturedThis : flags & ~Flags.HasCapturedThis; }
+                       get {
+                               return (flags & Flags.HasCapturedThis) != 0;
+                       }
                }
 
-               public AnonymousMethodStorey AnonymousMethodStorey {
-                       get { return am_storey; }
+               public bool HasCapturedVariable {
+                       set { flags = value ? flags | Flags.HasCapturedVariable : flags & ~Flags.HasCapturedVariable; }
+                       get {
+                               return (flags & Flags.HasCapturedVariable) != 0;
+                       }
                }
 
+               #endregion
+
                //
                // Creates anonymous method storey in current block
                //
                public AnonymousMethodStorey CreateAnonymousMethodStorey (ResolveContext ec)
                {
-                       //
-                       // When referencing a variable in iterator storey from children anonymous method
-                       //
-                       if (Toplevel.am_storey is IteratorStorey) {
-                               return Toplevel.am_storey;
-                       }
-
                        //
                        // An iterator has only 1 storey block
                        //
@@ -2354,13 +2163,11 @@ namespace Mono.CSharp {
                            return ec.CurrentIterator.Storey;
 
                        //
-                       // Switch block does not follow sequential flow and we cannot emit
-                       // storey initialization inside the block because it can be jumped over
-                       // for all non-first cases. Instead we push it to the parent block to be
-                       // always initialized
+                       // When referencing a variable in iterator storey from children anonymous method
                        //
-                       if (switch_block != null)
-                               return switch_block.CreateAnonymousMethodStorey (ec);
+                       if (ParametersBlock.am_storey is IteratorStorey) {
+                               return ParametersBlock.am_storey;
+                       }
 
                        if (am_storey == null) {
                                MemberBase mc = ec.MemberContext as MemberBase;
@@ -2376,8 +2183,10 @@ namespace Mono.CSharp {
 
                public override void Emit (EmitContext ec)
                {
-                       if (am_storey != null)
-                               am_storey.EmitStoreyInstantiation (ec);
+                       if (am_storey != null) {
+                               DefineAnonymousStorey (ec);
+                               am_storey.EmitStoreyInstantiation (ec, this);
+                       }
 
                        bool emit_debug_info = SymbolWriter.HasSymbolWriter && Parent != null && !(am_storey is IteratorStorey);
                        if (emit_debug_info)
@@ -2389,141 +2198,138 @@ namespace Mono.CSharp {
                                ec.EndScope ();
                }
 
-               public override void EmitMeta (EmitContext ec)
+               void DefineAnonymousStorey (EmitContext ec)
                {
                        //
                        // Creates anonymous method storey
                        //
-                       if (am_storey != null) {
-                               if (ec.CurrentAnonymousMethod != null && ec.CurrentAnonymousMethod.Storey != null) {
+                       if (ec.CurrentAnonymousMethod != null && ec.CurrentAnonymousMethod.Storey != null) {
+                               //
+                               // Creates parent storey reference when hoisted this is accessible
+                               //
+                               if (am_storey.OriginalSourceBlock.Explicit.HasCapturedThis) {
+                                       ExplicitBlock parent = am_storey.OriginalSourceBlock.Explicit.Parent.Explicit;
+
                                        //
-                                       // Creates parent storey reference when hoisted this is accessible
+                                       // Hoisted this exists in top-level parent storey only
                                        //
-                                       if (am_storey.OriginalSourceBlock.Explicit.HasCapturedThis) {
-                                               ExplicitBlock parent = Toplevel.Parent.Explicit;
+                                       while (parent.am_storey == null || parent.am_storey.Parent is AnonymousMethodStorey)
+                                               parent = parent.Parent.Explicit;
 
-                                               //
-                                               // Hoisted this exists in top-level parent storey only
-                                               //
-                                               while (parent.am_storey == null || parent.am_storey.Parent is AnonymousMethodStorey)
-                                                       parent = parent.Parent.Explicit;
+                                       am_storey.AddParentStoreyReference (ec, parent.am_storey);
+                               }
 
-                                               am_storey.AddParentStoreyReference (ec, parent.am_storey);
-                                       }
+                               am_storey.SetNestedStoryParent (ec.CurrentAnonymousMethod.Storey);
 
-                                       am_storey.SetNestedStoryParent (ec.CurrentAnonymousMethod.Storey);
+                               // TODO MemberCache: Review
+                               am_storey.Mutator = ec.CurrentAnonymousMethod.Storey.Mutator;
+                       }
 
-                                       // TODO MemberCache: Review
-                                       am_storey.Mutator = ec.CurrentAnonymousMethod.Storey.Mutator;
-                               }
+                       am_storey.CreateType ();
+                       if (am_storey.Mutator == null && ec.CurrentTypeParameters != null)
+                               am_storey.Mutator = new TypeParameterMutator (ec.CurrentTypeParameters, am_storey.CurrentTypeParameters);
+
+                       am_storey.DefineType ();
+                       am_storey.ResolveTypeParameters ();
+
+                       var ref_blocks = am_storey.ReferencesFromChildrenBlock;
+                       if (ref_blocks != null) {
+                               foreach (ExplicitBlock ref_block in ref_blocks) {
+                                       for (ExplicitBlock b = ref_block.Explicit; b.am_storey != am_storey; b = b.Parent.Explicit) {
+                                               if (b.am_storey != null) {
+                                                       b.am_storey.AddParentStoreyReference (ec, am_storey);
 
-                               am_storey.CreateType ();
-                               if (am_storey.Mutator == null && ec.CurrentTypeParameters != null)
-                                       am_storey.Mutator = new TypeParameterMutator (ec.CurrentTypeParameters, am_storey.CurrentTypeParameters);
-
-                               am_storey.DefineType ();
-                               am_storey.ResolveTypeParameters ();
-                               am_storey.Define ();
-                               am_storey.Parent.PartialContainer.AddCompilerGeneratedClass (am_storey);
-
-                               var ref_blocks = am_storey.ReferencesFromChildrenBlock;
-                               if (ref_blocks != null) {
-                                       foreach (ExplicitBlock ref_block in ref_blocks) {
-                                               for (ExplicitBlock b = ref_block.Explicit; b != this; b = b.Parent.Explicit) {
-                                                       if (b.am_storey != null) {
-                                                               b.am_storey.AddParentStoreyReference (ec, am_storey);
-
-                                                               // Stop propagation inside same top block
-                                                               if (b.Toplevel == Toplevel)
-                                                                       break;
-
-                                                               b = b.Toplevel;
-                                                   }
-                                                       b.HasCapturedVariable = true;
+                                                       // Stop propagation inside same top block
+                                                       if (b.ParametersBlock.am_storey == ParametersBlock.am_storey)
+                                                               break;
+
+                                                       b = b.ParametersBlock;
                                                }
+
+                                               b.HasCapturedVariable = true;
                                        }
                                }
                        }
 
-                       base.EmitMeta (ec);
+                       am_storey.Define ();
+                       am_storey.Parent.PartialContainer.AddCompilerGeneratedClass (am_storey);
                }
 
-               public IKnownVariable GetKnownVariable (string name)
+               public void WrapIntoDestructor (TryFinally tf, ExplicitBlock tryBlock)
                {
-                       if (known_variables == null)
-                               return null;
-
-                       IKnownVariable kw;
-                       known_variables.TryGetValue (name, out kw);
-                       return kw;
+                       tryBlock.statements = statements;
+                       statements = new List<Statement> (1);
+                       statements.Add (tf);
                }
+       }
 
-               public bool HasCapturedThis
+       //
+       // ParametersBlock was introduced to support anonymous methods
+       // and lambda expressions
+       // 
+       public class ParametersBlock : ExplicitBlock
+       {
+               public class ParameterInfo : INamedBlockVariable
                {
-                       set { flags = value ? flags | Flags.HasCapturedThis : flags & ~Flags.HasCapturedThis; }
-                       get { return (flags & Flags.HasCapturedThis) != 0; }
-               }
+                       readonly ParametersBlock block;
+                       readonly int index;
+                       public VariableInfo VariableInfo;
 
-               public bool HasCapturedVariable
-               {
-                       set { flags = value ? flags | Flags.HasCapturedVariable : flags & ~Flags.HasCapturedVariable; }
-                       get { return (flags & Flags.HasCapturedVariable) != 0; }
-               }
+                       public ParameterInfo (ParametersBlock block, int index)
+                       {
+                               this.block = block;
+                               this.index = index;
+                       }
 
-               protected override void CloneTo (CloneContext clonectx, Statement t)
-               {
-                       ExplicitBlock target = (ExplicitBlock) t;
-                       target.known_variables = null;
-                       base.CloneTo (clonectx, t);
-               }
-       }
+                       #region Properties
 
-       public class ToplevelParameterInfo : IKnownVariable {
-               public readonly ToplevelBlock Block;
-               public readonly int Index;
-               public VariableInfo VariableInfo;
+                       public Block Block {
+                               get {
+                                       return block;
+                               }
+                       }
 
-               Block IKnownVariable.Block {
-                       get { return Block; }
-               }
-               public Parameter Parameter {
-                       get { return Block.Parameters [Index]; }
-               }
+                       public bool IsDeclared {
+                               get {
+                                       return true;
+                               }
+                       }
 
-               public TypeSpec ParameterType {
-                       get { return Block.Parameters.Types [Index]; }
-               }
+                       public Location Location {
+                               get {
+                                       return Parameter.Location;
+                               }
+                       }
 
-               public Location Location {
-                       get { return Parameter.Location; }
-               }
+                       public Parameter Parameter {
+                               get {
+                                       return block.Parameters [index];
+                               }
+                       }
 
-               public ToplevelParameterInfo (ToplevelBlock block, int idx)
-               {
-                       this.Block = block;
-                       this.Index = idx;
+                       public TypeSpec ParameterType {
+                               get {
+                                       return Parameter.Type;
+                               }
+                       }
+
+                       #endregion
+
+                       public Expression CreateReferenceExpression (ResolveContext rc, Location loc)
+                       {
+                               return new ParameterReference (this, loc);
+                       }
                }
-       }
 
-       //
-       // A toplevel block contains extra information, the split is done
-       // only to separate information that would otherwise bloat the more
-       // lightweight Block.
-       //
-       // In particular, this was introduced when the support for Anonymous
-       // Methods was implemented. 
-       // 
-       public class ToplevelBlock : ExplicitBlock
-       {
                // 
                // Block is converted to an expression
                //
                sealed class BlockScopeExpression : Expression
                {
                        Expression child;
-                       readonly ToplevelBlock block;
+                       readonly ParametersBlock block;
 
-                       public BlockScopeExpression (Expression child, ToplevelBlock block)
+                       public BlockScopeExpression (Expression child, ParametersBlock block)
                        {
                                this.child = child;
                                this.block = block;
@@ -2538,7 +2344,7 @@ namespace Mono.CSharp {
                        {
                                if (child == null)
                                        return null;
-                               
+
                                child = child.Resolve (ec);
                                if (child == null)
                                        return null;
@@ -2550,24 +2356,62 @@ namespace Mono.CSharp {
 
                        public override void Emit (EmitContext ec)
                        {
-                               block.EmitMeta (ec);
                                block.EmitScopeInitializers (ec);
                                child.Emit (ec);
                        }
                }
 
                protected ParametersCompiled parameters;
-               protected ToplevelParameterInfo[] parameter_info;
-               LocalInfo this_variable;
+               protected ParameterInfo[] parameter_info;
                bool resolved;
-               bool unreachable;
-               CompilerContext compiler;
+               protected bool unreachable;
+               protected ToplevelBlock top_block;
 
-               public HoistedVariable HoistedThisVariable;
+               public ParametersBlock (Block parent, ParametersCompiled parameters, Location start)
+                       : base (parent, 0, start, start)
+               {
+                       if (parameters == null)
+                               throw new ArgumentNullException ("parameters");
 
-               public bool Resolved {
+                       this.parameters = parameters;
+                       ParametersBlock = this;
+
+                       this.top_block = parent.ParametersBlock.top_block;
+                       ProcessParameters ();
+               }
+
+               protected ParametersBlock (ParametersCompiled parameters, Location start)
+                       : base (null, 0, start, start)
+               {
+                       if (parameters == null)
+                               throw new ArgumentNullException ("parameters");
+
+                       this.parameters = parameters;
+                       ParametersBlock = this;
+               }
+
+               protected ParametersBlock (ParametersBlock source, ParametersCompiled parameters)
+                       : base (null, 0, source.StartLocation, source.EndLocation)
+               {
+                       this.parameters = parameters;
+                       this.statements = source.statements;
+                       this.scope_initializers = source.scope_initializers;
+
+                       this.resolved = true;
+                       this.unreachable = source.unreachable;
+                       this.am_storey = source.am_storey;
+
+                       ParametersBlock = this;
+               }
+
+               #region Properties
+
+               //
+               // Block has been converted to expression tree
+               //
+               public bool IsExpressionTree {
                        get {
-                               return resolved;
+                               return (flags & Flags.IsExpressionTree) != 0;
                        }
                }
 
@@ -2575,148 +2419,338 @@ namespace Mono.CSharp {
                // The parameters for the block.
                //
                public ParametersCompiled Parameters {
-                       get { return parameters; }
+                       get {
+                               return parameters;
+                       }
                }
 
-               public Report Report {
-                       get { return compiler.Report; }
+               public ToplevelBlock TopBlock {
+                       get {
+                               return top_block;
+                       }
                }
 
-               public ToplevelBlock Container {
-                       get { return Parent == null ? null : Parent.Toplevel; }
+               public bool Resolved {
+                       get {
+                               return resolved;
+                       }
                }
 
-               public ToplevelBlock (CompilerContext ctx, Block parent, ParametersCompiled parameters, Location start) :
-                       this (ctx, parent, (Flags) 0, parameters, start)
-               {
-               }
+               #endregion
 
-               public ToplevelBlock (CompilerContext ctx, ParametersCompiled parameters, Location start) :
-                       this (ctx, null, (Flags) 0, parameters, start)
+               // <summary>
+               //   Check whether all `out' parameters have been assigned.
+               // </summary>
+               public void CheckOutParameters (FlowBranching.UsageVector vector, Location loc)
                {
+                       if (vector.IsUnreachable)
+                               return;
+
+                       int n = parameter_info == null ? 0 : parameter_info.Length;
+
+                       for (int i = 0; i < n; i++) {
+                               VariableInfo var = parameter_info[i].VariableInfo;
+
+                               if (var == null)
+                                       continue;
+
+                               if (vector.IsAssigned (var, false))
+                                       continue;
+
+                               TopBlock.Report.Error (177, loc, "The out parameter `{0}' must be assigned to before control leaves the current method",
+                                       var.Name);
+                       }
                }
 
-               ToplevelBlock (CompilerContext ctx, Flags flags, ParametersCompiled parameters, Location start) :
-                       this (ctx, null, flags, parameters, start)
+               public override Expression CreateExpressionTree (ResolveContext ec)
                {
+                       if (statements.Count == 1) {
+                               Expression expr = ((Statement) statements[0]).CreateExpressionTree (ec);
+                               if (scope_initializers != null)
+                                       expr = new BlockScopeExpression (expr, this);
+
+                               return expr;
+                       }
+
+                       return base.CreateExpressionTree (ec);
                }
 
-               // We use 'Parent' to hook up to the containing block, but don't want to register the current block as a child.
-               // So, we use a two-stage setup -- first pass a null parent to the base constructor, and then override 'Parent'.
-               public ToplevelBlock (CompilerContext ctx, Block parent, Flags flags, ParametersCompiled parameters, Location start) :
-                       base (null, flags, start, Location.Null)
+               public ParameterInfo GetParameterInfo (Parameter p)
                {
-                       this.compiler = ctx;
-                       this.Toplevel = this;
-
-                       this.parameters = parameters;
-                       this.Parent = parent;
-                       if (parent != null)
-                               parent.AddAnonymousChild (this);
+                       for (int i = 0; i < parameters.Count; ++i) {
+                               if (parameters[i] == p)
+                                       return parameter_info[i];
+                       }
 
-                       if (!this.parameters.IsEmpty)
-                               ProcessParameters ();
+                       throw new ArgumentException ("Invalid parameter");
                }
 
-               public ToplevelBlock (CompilerContext ctx, Location loc)
-                       : this (ctx, null, (Flags) 0, ParametersCompiled.EmptyReadOnlyParameters, loc)
+               public Expression GetParameterReference (int index, Location loc)
                {
+                       return new ParameterReference (parameter_info[index], loc);
                }
 
-               protected override void CloneTo (CloneContext clonectx, Statement t)
+               protected void ProcessParameters ()
                {
-                       base.CloneTo (clonectx, t);
+                       if (parameters.Count == 0)
+                               return;
 
-                       if (parameters.Count != 0) {
-                               ToplevelBlock target = (ToplevelBlock) t;
+                       parameter_info = new ParameterInfo[parameters.Count];
+                       for (int i = 0; i < parameter_info.Length; ++i) {
+                               var p = parameters.FixedParameters[i];
+                               if (p == null)
+                                       continue;
 
-                               target.parameter_info = new ToplevelParameterInfo[parameters.Count];
-                               for (int i = 0; i < parameters.Count; ++i)
-                                       target.parameter_info[i] = new ToplevelParameterInfo (target, i);
+                               // TODO: Should use Parameter only and more block there
+                               parameter_info[i] = new ParameterInfo (this, i);
+                               AddLocalName (p.Name, parameter_info[i]);
                        }
                }
 
-               public bool CheckError158 (string name, Location loc)
+               public bool Resolve (FlowBranching parent, BlockContext rc, IMethodData md)
                {
-                       if (AnonymousChildren != null) {
-                               foreach (ToplevelBlock child in AnonymousChildren) {
-                                       if (!child.CheckError158 (name, loc))
+                       if (resolved)
+                               return true;
+
+                       resolved = true;
+
+                       if (rc.HasSet (ResolveContext.Options.ExpressionTreeConversion))
+                               flags |= Flags.IsExpressionTree;
+
+                       try {
+                               ResolveMeta (rc);
+
+                               using (rc.With (ResolveContext.Options.DoFlowAnalysis, true)) {
+                                       FlowBranchingToplevel top_level = rc.StartFlowBranching (this, parent);
+
+                                       if (!Resolve (rc))
                                                return false;
+
+                                       unreachable = top_level.End ();
+                               }
+                       } catch (Exception e) {
+                               if (e is CompletionResult || rc.Report.IsDisabled)
+                                       throw;
+
+                               if (rc.CurrentBlock != null) {
+                                       rc.Report.Error (584, rc.CurrentBlock.StartLocation, "Internal compiler error: {0}", e.Message);
+                               } else {
+                                       rc.Report.Error (587, "Internal compiler error: {0}", e.Message);
+                               }
+
+                               if (Report.DebugFlags > 0)
+                                       throw;
+                       }
+
+                       if (rc.ReturnType != TypeManager.void_type && !unreachable) {
+                               if (rc.CurrentAnonymousMethod == null) {
+                                       // FIXME: Missing FlowAnalysis for generated iterator MoveNext method
+                                       if (md is IteratorMethod) {
+                                               unreachable = true;
+                                       } else {
+                                               rc.Report.Error (161, md.Location, "`{0}': not all code paths return a value", md.GetSignatureForError ());
+                                               return false;
+                                       }
+                               } else {
+                                       rc.Report.Error (1643, rc.CurrentAnonymousMethod.Location, "Not all code paths return a value in anonymous method of type `{0}'",
+                                                         rc.CurrentAnonymousMethod.GetSignatureForError ());
+                                       return false;
                                }
                        }
 
-                       for (ToplevelBlock c = Container; c != null; c = c.Container) {
-                               if (!c.DoCheckError158 (name, loc))
-                                       return false;
-                       }
+                       return true;
+               }
+
+               void ResolveMeta (BlockContext ec)
+               {
+                       int orig_count = parameters.Count;
+
+                       for (int i = 0; i < orig_count; ++i) {
+                               Parameter.Modifier mod = parameters.FixedParameters[i].ModFlags;
+
+                               if ((mod & Parameter.Modifier.OUT) != Parameter.Modifier.OUT)
+                                       continue;
+
+                               VariableInfo vi = new VariableInfo (parameters, i, ec.FlowOffset);
+                               parameter_info[i].VariableInfo = vi;
+                               ec.FlowOffset += vi.Length;
+                       }
+               }
+
+               public void WrapIntoIterator (IMethodData method, TypeContainer host, TypeSpec iterator_type, bool is_enumerable)
+               {
+                       ParametersBlock pb = new ParametersBlock (this, ParametersCompiled.EmptyReadOnlyParameters, StartLocation);
+                       pb.EndLocation = EndLocation;
+                       pb.statements = statements;
+
+                       var iterator = new Iterator (pb, method, host, iterator_type, is_enumerable);
+                       am_storey = new IteratorStorey (iterator);
+
+                       statements = new List<Statement> (1);
+                       AddStatement (new Return (iterator, iterator.Location));
+               }
+       }
+
+       //
+       //
+       //
+       public class ToplevelBlock : ParametersBlock
+       {
+               LocalVariable this_variable;
+               CompilerContext compiler;
+               Dictionary<string, object> names;
+               Dictionary<string, object> labels;
+
+               public HoistedVariable HoistedThisVariable;
+
+               public Report Report {
+                       get { return compiler.Report; }
+               }
+
+               public ToplevelBlock (CompilerContext ctx, Location loc)
+                       : this (ctx, ParametersCompiled.EmptyReadOnlyParameters, loc)
+               {
+               }
+
+               public ToplevelBlock (CompilerContext ctx, ParametersCompiled parameters, Location start)
+                       : base (parameters, start)
+               {
+                       this.compiler = ctx;
+                       top_block = this;
+
+                       ProcessParameters ();
+               }
 
-                       return true;
+               //
+               // Recreates a top level block from parameters block. Used for
+               // compiler generated methods where the original block comes from
+               // explicit child block. This works for already resolved blocks
+               // only to ensure we resolve them in the correct flow order
+               //
+               public ToplevelBlock (ParametersBlock source, ParametersCompiled parameters)
+                       : base (source, parameters)
+               {
+                       this.compiler = source.TopBlock.compiler;
+                       top_block = this;
                }
 
-               void ProcessParameters ()
+               public override void AddLocalName (string name, INamedBlockVariable li)
                {
-                       int n = parameters.Count;
-                       parameter_info = new ToplevelParameterInfo [n];
-                       ToplevelBlock top_parent = Parent == null ? null : Parent.Toplevel;
-                       for (int i = 0; i < n; ++i) {
-                               parameter_info [i] = new ToplevelParameterInfo (this, i);
+                       if (names == null)
+                               names = new Dictionary<string, object> ();
 
-                               var p = parameters.FixedParameters [i];
-                               if (p == null)
-                                       continue;
+                       object value;
+                       if (!names.TryGetValue (name, out value)) {
+                               names.Add (name, li);
+                               return;
+                       }
 
-                               string name = p.Name;
-                               if (CheckParentConflictName (top_parent, name, loc))
-                                       AddKnownVariable (name, parameter_info [i]);
+                       INamedBlockVariable existing = value as INamedBlockVariable;
+                       List<INamedBlockVariable> existing_list;
+                       if (existing != null) {
+                               existing_list = new List<INamedBlockVariable> ();
+                               existing_list.Add (existing);
+                               names[name] = existing_list;
+                       } else {
+                               existing_list = (List<INamedBlockVariable>) value;
                        }
 
-                       // mark this block as "used" so that we create local declarations in a sub-block
-                       // FIXME: This appears to uncover a lot of bugs
-                       //this.Use ();
-               }
+                       //
+                       // A collision checking between local names
+                       //
+                       for (int i = 0; i < existing_list.Count; ++i) {
+                               existing = existing_list[i];
+                               Block b = existing.Block;
 
-               bool DoCheckError158 (string name, Location loc)
-               {
-                       LabeledStatement s = LookupLabel (name);
-                       if (s != null) {
-                               Report.SymbolRelatedToPreviousError (s.loc, s.Name);
-                               Error_158 (name, loc);
-                               return false;
+                               // Collision at same level
+                               if (li.Block == b) {
+                                       li.Block.Error_AlreadyDeclared (name, li);
+                                       break;
+                               }
+
+                               // Collision with parent
+                               b = li.Block;
+                               while ((b = b.Parent) != null) {
+                                       if (existing.Block == b) {
+                                               li.Block.Error_AlreadyDeclared (name, li, "parent or current");
+                                               i = existing_list.Count;
+                                               break;
+                                       }
+                               }
+
+                               // Collision with with children
+                               b = existing.Block;
+                               while ((b = b.Parent) != null) {
+                                       if (li.Block == b) {
+                                               li.Block.Error_AlreadyDeclared (name, li, "child");
+                                               i = existing_list.Count;
+                                               break;
+                                       }
+                               }
                        }
 
-                       return true;
+                       existing_list.Add (li);
                }
 
-               public override Expression CreateExpressionTree (ResolveContext ec)
+               public void AddLabel (string name, LabeledStatement label)
                {
-                       if (statements.Count == 1) {
-                               Expression expr = ((Statement) statements[0]).CreateExpressionTree (ec);
-                               if (scope_initializers != null)
-                                       expr = new BlockScopeExpression (expr, this);
+                       if (labels == null)
+                               labels = new Dictionary<string, object> ();
 
-                               return expr;
+                       object value;
+                       if (!labels.TryGetValue (name, out value)) {
+                               labels.Add (name, label);
+                               return;
                        }
 
-                       return base.CreateExpressionTree (ec);
-               }
+                       LabeledStatement existing = value as LabeledStatement;
+                       List<LabeledStatement> existing_list;
+                       if (existing != null) {
+                               existing_list = new List<LabeledStatement> ();
+                               existing_list.Add (existing);
+                               labels[name] = existing_list;
+                       } else {
+                               existing_list = (List<LabeledStatement>) value;
+                       }
 
-               //
-               // Reformats this block to be top-level iterator block
-               //
-               public IteratorStorey ChangeToIterator (Iterator iterator, ToplevelBlock source)
-               {
-                       IsIterator = true;
+                       //
+                       // A collision checking between labels
+                       //
+                       for (int i = 0; i < existing_list.Count; ++i) {
+                               existing = existing_list[i];
+                               Block b = existing.Block;
+
+                               // Collision at same level
+                               if (label.Block == b) {
+                                       Report.SymbolRelatedToPreviousError (existing.loc, name);
+                                       Report.Error (140, label.loc, "The label `{0}' is a duplicate", name);
+                                       break;
+                               }
 
-                       // Creates block with original statements
-                       AddStatement (new IteratorStatement (iterator, new Block (this, source)));
+                               // Collision with parent
+                               b = label.Block;
+                               while ((b = b.Parent) != null) {
+                                       if (existing.Block == b) {
+                                               Report.Error (158, label.loc,
+                                                       "The label `{0}' shadows another label by the same name in a contained scope", name);
+                                               i = existing_list.Count;
+                                               break;
+                                       }
+                               }
 
-                       source.statements = new List<Statement> (1);
-                       source.AddStatement (new Return (iterator, iterator.Location));
-                       source.IsIterator = false;
+                               // Collision with with children
+                               b = existing.Block;
+                               while ((b = b.Parent) != null) {
+                                       if (label.Block == b) {
+                                               Report.Error (158, label.loc,
+                                                       "The label `{0}' shadows another label by the same name in a contained scope", name);
+                                               i = existing_list.Count;
+                                               break;
+                                       }
+                               }
+                       }
 
-                       IteratorStorey iterator_storey = new IteratorStorey (iterator);
-                       source.am_storey = iterator_storey;
-                       return iterator_storey;
+                       existing_list.Add (label);
                }
 
                //
@@ -2727,7 +2761,7 @@ namespace Mono.CSharp {
                        int count = parameters.Count;
                        Arguments args = new Arguments (count);
                        for (int i = 0; i < count; ++i) {
-                               var arg_expr = new ParameterReference (parameter_info[i], parameter_info[i].Location);
+                               var arg_expr = GetParameterReference (i, parameter_info[i].Location);
                                args.Add (new Argument (arg_expr));
                        }
 
@@ -2735,50 +2769,105 @@ namespace Mono.CSharp {
                }
 
                //
-               // Returns a parameter reference expression for the given name,
-               // or null if there is no such parameter
+               // Lookup inside a block, the returned value can represent 3 states
+               //
+               // true+variable: A local name was found and it's valid
+               // false+variable: A local name was found in a child block only
+               // false+null: No local name was found
                //
-               public Expression GetParameterReference (string name, Location loc)
+               public bool GetLocalName (string name, Block block, ref INamedBlockVariable variable)
                {
-                       for (ToplevelBlock t = this; t != null; t = t.Container) {
-                               if (t.parameters.IsEmpty)
-                                       continue;
+                       if (names == null)
+                               return false;
+
+                       object value;
+                       if (!names.TryGetValue (name, out value))
+                               return false;
+
+                       variable = value as INamedBlockVariable;
+                       Block b = block;
+                       if (variable != null) {
+                               do {
+                                       if (variable.Block == b.Original)
+                                               return true;
+
+                                       b = b.Parent;
+                               } while (b != null);
+
+                               b = variable.Block;
+                               do {
+                                       if (block == b)
+                                               return false;
+
+                                       b = b.Parent;
+                               } while (b != null);
+                       } else {
+                               List<INamedBlockVariable> list = (List<INamedBlockVariable>) value;
+                               for (int i = 0; i < list.Count; ++i) {
+                                       variable = list[i];
+                                       do {
+                                               if (variable.Block == b.Original)
+                                                       return true;
+
+                                               b = b.Parent;
+                                       } while (b != null);
+
+                                       b = variable.Block;
+                                       do {
+                                               if (block == b)
+                                                       return false;
 
-                               Expression expr = t.GetParameterReferenceExpression (name, loc);
-                               if (expr != null)
-                                       return expr;
+                                               b = b.Parent;
+                                       } while (b != null);
+
+                                       b = block;
+                               }
                        }
 
-                       return null;
+                       variable = null;
+                       return false;
                }
 
-               protected virtual Expression GetParameterReferenceExpression (string name, Location loc)
+               public LabeledStatement GetLabel (string name, Block block)
                {
-                       int idx = parameters.GetParameterIndexByName (name);
-                       return idx < 0 ?
-                               null : new ParameterReference (parameter_info [idx], loc);
-               }
+                       if (labels == null)
+                               return null;
 
-               public ToplevelBlock CheckParameterNameConflict (string name)
-               {
-                       for (ToplevelBlock t = this; t != null; t = t.Container) {
-                               if (t.HasParameterWithName (name))
-                                       return t;
+                       object value;
+                       if (!labels.TryGetValue (name, out value)) {
+                               return null;
                        }
 
-                       return null;
-               }
+                       var label = value as LabeledStatement;
+                       Block b = block;
+                       if (label != null) {
+                               if (label.Block == b)
+                                       return label;
 
-               protected virtual bool HasParameterWithName (string name)
-               {
-                       return parameters.GetParameterIndexByName (name) >= 0;
+                               // TODO: Temporary workaround for the switch block implicit label block
+                               if (label.Block.IsCompilerGenerated && label.Block.Parent == b)
+                                       return label;
+                       } else {
+                               List<LabeledStatement> list = (List<LabeledStatement>) value;
+                               for (int i = 0; i < list.Count; ++i) {
+                                       label = list[i];
+                                       if (label.Block == b)
+                                               return label;
+
+                                       // TODO: Temporary workaround for the switch block implicit label block
+                                       if (label.Block.IsCompilerGenerated && label.Block.Parent == b)
+                                               return label;
+                               }
+                       }
+                               
+                       return null;
                }
 
                // <summary>
                //   Returns the "this" instance variable of this block.
                //   See AddThisVariable() for more information.
                // </summary>
-               public LocalInfo ThisVariable {
+               public LocalVariable ThisVariable {
                        get { return this_variable; }
                }
 
@@ -2789,14 +2878,12 @@ namespace Mono.CSharp {
                //   analysis code to ensure that it's been fully initialized before control
                //   leaves the constructor.
                // </summary>
-               public LocalInfo AddThisVariable (TypeContainer ds, Location l)
+               public LocalVariable AddThisVariable (BlockContext bc, TypeContainer ds, Location l)
                {
                        if (this_variable == null) {
-                               this_variable = new LocalInfo (ds, this, l);
-                               this_variable.Used = true;
-                               this_variable.IsThis = true;
-
-                               Variables.Add ("this", this_variable);
+                               this_variable = new LocalVariable (this, "this", LocalVariable.Flags.IsThis | LocalVariable.Flags.Used, l);
+                               this_variable.Type = ds.CurrentType;
+                               this_variable.PrepareForFlowAnalysis (bc);
                        }
 
                        return this_variable;
@@ -2807,122 +2894,11 @@ namespace Mono.CSharp {
                        set { flags = value ? flags | Flags.IsIterator : flags & ~Flags.IsIterator; }
                }
 
-               //
-               // Block has been converted to expression tree
-               //
-               public bool IsExpressionTree {
-                       get { return (flags & Flags.IsExpressionTree) != 0; }
-               }
-
                public bool IsThisAssigned (BlockContext ec)
                {
                        return this_variable == null || this_variable.IsThisAssigned (ec, this);
                }
 
-               public bool Resolve (FlowBranching parent, BlockContext rc, ParametersCompiled ip, IMethodData md)
-               {
-                       if (resolved)
-                               return true;
-
-                       resolved = true;
-
-                       if (rc.HasSet (ResolveContext.Options.ExpressionTreeConversion))
-                               flags |= Flags.IsExpressionTree;
-
-                       try {
-                               if (!ResolveMeta (rc, ip))
-                                       return false;
-
-                               using (rc.With (ResolveContext.Options.DoFlowAnalysis, true)) {
-                                       FlowBranchingToplevel top_level = rc.StartFlowBranching (this, parent);
-
-                                       if (!Resolve (rc))
-                                               return false;
-
-                                       unreachable = top_level.End ();
-                               }
-                       } catch (Exception e) {
-                               if (e is CompletionResult || rc.Report.IsDisabled)
-                                       throw;
-
-                               if (rc.CurrentBlock != null) {
-                                       rc.Report.Error (584, rc.CurrentBlock.StartLocation, "Internal compiler error: {0}", e.Message);
-                               } else {
-                                       rc.Report.Error (587, "Internal compiler error: {0}", e.Message);
-                               }
-
-                               if (Report.DebugFlags > 0)
-                                       throw;
-                       }
-
-                       if (rc.ReturnType != TypeManager.void_type && !unreachable) {
-                               if (rc.CurrentAnonymousMethod == null) {
-                                       rc.Report.Error (161, md.Location, "`{0}': not all code paths return a value", md.GetSignatureForError ());
-                                       return false;
-                               } else if (!rc.CurrentAnonymousMethod.IsIterator) {
-                                       rc.Report.Error (1643, rc.CurrentAnonymousMethod.Location, "Not all code paths return a value in anonymous method of type `{0}'",
-                                                         rc.CurrentAnonymousMethod.GetSignatureForError ());
-                                       return false;
-                               }
-                       }
-
-                       return true;
-               }
-
-               bool ResolveMeta (BlockContext ec, ParametersCompiled ip)
-               {
-                       int errors = ec.Report.Errors;
-                       int orig_count = parameters.Count;
-
-                       if (ip != null)
-                               parameters = ip;
-
-                       // Assert: orig_count != parameter.Count => orig_count == 0
-                       if (orig_count != 0 && orig_count != parameters.Count)
-                               throw new InternalErrorException ("parameter information mismatch");
-
-                       int offset = Parent == null ? 0 : Parent.AssignableSlots;
-
-                       for (int i = 0; i < orig_count; ++i) {
-                               Parameter.Modifier mod = parameters.FixedParameters [i].ModFlags;
-
-                               if ((mod & Parameter.Modifier.OUT) != Parameter.Modifier.OUT)
-                                       continue;
-
-                               VariableInfo vi = new VariableInfo (ip, i, offset);
-                               parameter_info [i].VariableInfo = vi;
-                               offset += vi.Length;
-                       }
-
-                       ResolveMeta (ec, offset);
-
-                       return ec.Report.Errors == errors;
-               }
-
-               // <summary>
-               //   Check whether all `out' parameters have been assigned.
-               // </summary>
-               public void CheckOutParameters (FlowBranching.UsageVector vector, Location loc)
-               {
-                       if (vector.IsUnreachable)
-                               return;
-
-                       int n = parameter_info == null ? 0 : parameter_info.Length;
-
-                       for (int i = 0; i < n; i++) {
-                               VariableInfo var = parameter_info [i].VariableInfo;
-
-                               if (var == null)
-                                       continue;
-
-                               if (vector.IsAssigned (var, false))
-                                       continue;
-
-                               Report.Error (177, loc, "The out parameter `{0}' must be assigned to before control leaves the current method",
-                                       var.Name);
-                       }
-               }
-
                public override void Emit (EmitContext ec)
                {
                        if (Report.Errors > 0)
@@ -2931,8 +2907,6 @@ namespace Mono.CSharp {
 #if PRODUCTION
                        try {
 #endif
-                       EmitMeta (ec);
-
                        if (ec.HasReturnLabel)
                                ec.ReturnLabel = ec.DefineLabel ();
 
@@ -2978,15 +2952,6 @@ namespace Mono.CSharp {
 #endif
                }
 
-               public override void EmitMeta (EmitContext ec)
-               {
-                       // Avoid declaring an IL variable for this_variable since it is not accessed
-                       // from the generated IL
-                       if (this_variable != null)
-                               Variables.Remove ("this");
-                       base.EmitMeta (ec);
-               }
-
                protected override void EmitSymbolInfo (EmitContext ec)
                {
                        AnonymousExpression ae = ec.CurrentAnonymousMethod;
@@ -3108,7 +3073,6 @@ namespace Mono.CSharp {
        }
 
        public class SwitchSection {
-               // An array of SwitchLabels.
                public readonly List<SwitchLabel> Labels;
                public readonly Block Block;
                
@@ -3157,6 +3121,7 @@ namespace Mono.CSharp {
                ExpressionStatement string_dictionary;
                FieldExpr switch_cache_field;
                static int unique_counter;
+               ExplicitBlock block;
 
                //
                // Nullable Types support
@@ -3173,13 +3138,20 @@ namespace Mono.CSharp {
                //
                static TypeSpec [] allowed_types;
 
-               public Switch (Expression e, List<SwitchSection> sects, Location l)
+               public Switch (Expression e, ExplicitBlock block, List<SwitchSection> sects, Location l)
                {
                        Expr = e;
+                       this.block = block;
                        Sections = sects;
                        loc = l;
                }
 
+               public ExplicitBlock Block {
+                       get {
+                               return block;
+                       }
+               }
+
                public bool GotDefault {
                        get {
                                return default_section != null;
@@ -3829,6 +3801,12 @@ namespace Mono.CSharp {
                
                protected override void DoEmit (EmitContext ec)
                {
+                       //
+                       // Needed to emit anonymous storey initialization
+                       // Otherwise it does not contain any statements for now
+                       //
+                       block.Emit (ec);
+
                        default_target = ec.DefineLabel ();
                        null_target = ec.DefineLabel ();
 
@@ -3923,6 +3901,25 @@ namespace Mono.CSharp {
                Iterator iter;
                List<ResumableStatement> resume_points;
                int first_resume_pc;
+               protected Statement stmt;
+               Label dispose_try_block;
+               bool prepared_for_dispose, emitted_dispose;
+
+               protected ExceptionStatement (Statement stmt, Location loc)
+               {
+                       this.stmt = stmt;
+                       this.loc = loc;
+               }
+
+               #region Properties
+
+               public Statement Statement {
+                       get {
+                               return stmt;
+                       }
+               }
+
+               #endregion
 
                protected abstract void EmitPreTryBody (EmitContext ec);
                protected abstract void EmitTryBody (EmitContext ec);
@@ -3950,7 +3947,7 @@ namespace Mono.CSharp {
 
                                Label [] labels = new Label [resume_points.Count];
                                for (int i = 0; i < resume_points.Count; ++i)
-                                       labels [i] = ((ResumableStatement) resume_points [i]).PrepareForEmit (ec);
+                                       labels [i] = resume_points [i].PrepareForEmit (ec);
                                ec.Emit (OpCodes.Switch, labels);
                        }
 
@@ -4000,8 +3997,6 @@ namespace Mono.CSharp {
                        resume_points.Add (stmt);
                }
 
-               Label dispose_try_block;
-               bool prepared_for_dispose, emitted_dispose;
                public override Label PrepareForDispose (EmitContext ec, Label end)
                {
                        if (!prepared_for_dispose) {
@@ -4074,14 +4069,12 @@ namespace Mono.CSharp {
 
        public class Lock : ExceptionStatement {
                Expression expr;
-               public Statement Statement;
-               TemporaryVariable temp;
+               TemporaryVariableReference temp;
                        
-               public Lock (Expression expr, Statement stmt, Location l)
+               public Lock (Expression expr, Statement stmt, Location loc)
+                       : base (stmt, loc)
                {
                        this.expr = expr;
-                       Statement = stmt;
-                       loc = l;
                }
 
                public override bool Resolve (BlockContext ec)
@@ -4103,7 +4096,7 @@ namespace Mono.CSharp {
 
                        ok &= base.Resolve (ec);
 
-                       temp = new TemporaryVariable (expr.Type, loc);
+                       temp = TemporaryVariableReference.Create (expr.Type, ec.CurrentBlock.Parent, loc);
                        temp.Resolve (ec);
 
                        if (TypeManager.void_monitor_enter_object == null || TypeManager.void_monitor_exit_object == null) {
@@ -4140,7 +4133,7 @@ namespace Mono.CSharp {
                        Lock target = (Lock) t;
 
                        target.expr = expr.Clone (clonectx);
-                       target.Statement = Statement.Clone (clonectx);
+                       target.stmt = Statement.Clone (clonectx);
                }
        }
 
@@ -4239,40 +4232,37 @@ namespace Mono.CSharp {
        // 
        // Fixed statement
        //
-       public class Fixed : Statement {
-               Expression type;
-               List<KeyValuePair<LocalInfo, Expression>> declarators;
-               Statement statement;
-               TypeSpec expr_type;
-               Emitter[] data;
-               bool has_ret;
-
-               abstract class Emitter
+       public class Fixed : Statement
+       {
+               abstract class Emitter : ShimExpression
                {
-                       protected LocalInfo vi;
-                       protected Expression converted;
+                       protected LocalVariable vi;
 
-                       protected Emitter (Expression expr, LocalInfo li)
+                       protected Emitter (Expression expr, LocalVariable li)
+                               : base (expr)
                        {
-                               converted = expr;
                                vi = li;
                        }
 
-                       public abstract void Emit (EmitContext ec);
                        public abstract void EmitExit (EmitContext ec);
                }
 
                class ExpressionEmitter : Emitter {
-                       public ExpressionEmitter (Expression converted, LocalInfo li) :
+                       public ExpressionEmitter (Expression converted, LocalVariable li) :
                                base (converted, li)
                        {
                        }
 
+                       protected override Expression DoResolve (ResolveContext rc)
+                       {
+                               throw new NotImplementedException ();
+                       }
+
                        public override void Emit (EmitContext ec) {
                                //
                                // Store pointer in pinned location
                                //
-                               converted.Emit (ec);
+                               expr.Emit (ec);
                                vi.EmitAssign (ec);
                        }
 
@@ -4286,32 +4276,36 @@ namespace Mono.CSharp {
 
                class StringEmitter : Emitter
                {
-                       LocalInfo pinned_string;
+                       LocalVariable pinned_string;
 
-                       public StringEmitter (Expression expr, LocalInfo li, Location loc):
-                               base (expr, li)
+                       public StringEmitter (Expression expr, LocalVariable li, Location loc)
+                               base (expr, li)
                        {
-                               pinned_string = new LocalInfo (new TypeExpression (TypeManager.string_type, loc), null, null, loc);
-                               pinned_string.Pinned = true;
                        }
 
-                       public StringEmitter Resolve (ResolveContext rc)
+                       protected override Expression DoResolve (ResolveContext rc)
                        {
-                               pinned_string.Resolve (rc);
+                               pinned_string = new LocalVariable (vi.Block, "$pinned",
+                                       LocalVariable.Flags.FixedVariable | LocalVariable.Flags.CompilerGenerated | LocalVariable.Flags.Used,
+                                       vi.Location);
+
+                               pinned_string.Type = TypeManager.string_type;
 
                                if (TypeManager.int_get_offset_to_string_data == null) {
                                        TypeManager.int_get_offset_to_string_data = TypeManager.GetPredefinedProperty (
                                                TypeManager.runtime_helpers_type, "OffsetToStringData", pinned_string.Location, TypeManager.int32_type);
                                }
 
+                               eclass = ExprClass.Variable;
+                               type = TypeManager.int32_type;
                                return this;
                        }
 
                        public override void Emit (EmitContext ec)
                        {
-                               pinned_string.ResolveVariable (ec);
+                               pinned_string.CreateBuilder (ec);
 
-                               converted.Emit (ec);
+                               expr.Emit (ec);
                                pinned_string.EmitAssign (ec);
 
                                // TODO: Should use Binary::Add
@@ -4333,49 +4327,20 @@ namespace Mono.CSharp {
                        }
                }
 
-               public Fixed (Expression type, List<KeyValuePair<LocalInfo, Expression>> decls, Statement stmt, Location l)
-               {
-                       this.type = type;
-                       declarators = decls;
-                       statement = stmt;
-                       loc = l;
-               }
-
-               public Statement Statement {
-                       get { return statement; }
-               }
-
-               public override bool Resolve (BlockContext ec)
+               public class VariableDeclaration : BlockVariableDeclaration
                {
-                       if (!ec.IsUnsafe){
-                               Expression.UnsafeError (ec, loc);
-                               return false;
-                       }
-                       
-                       TypeExpr texpr = type.ResolveAsContextualType (ec, false);
-                       if (texpr == null) {
-                               if (type is VarExpr)
-                                       ec.Report.Error (821, type.Location, "A fixed statement cannot use an implicitly typed local variable");
-
-                               return false;
+                       public VariableDeclaration (FullNamedExpression type, LocalVariable li)
+                               : base (type, li)
+                       {
                        }
 
-                       expr_type = texpr.Type;
-
-                       data = new Emitter [declarators.Count];
-
-                       if (!expr_type.IsPointer){
-                               ec.Report.Error (209, loc, "The type of locals declared in a fixed statement must be a pointer type");
-                               return false;
-                       }
-                       
-                       int i = 0;
-                       foreach (var p in declarators){
-                               LocalInfo vi = p.Key;
-                               Expression e = p.Value;
-                               
-                               vi.VariableInfo.SetAssigned (ec);
-                               vi.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Fixed);
+                       protected override Expression ResolveInitializer (BlockContext bc, LocalVariable li, Expression initializer)
+                       {
+                               if (!Variable.Type.IsPointer && li == Variable) {
+                                       bc.Report.Error (209, TypeExpression.Location,
+                                               "The type of locals declared in a fixed statement must be a pointer type");
+                                       return null;
+                               }
 
                                //
                                // The rules for the possible declarators are pretty wise,
@@ -4388,88 +4353,119 @@ namespace Mono.CSharp {
                                // is present, so we need to test for this particular case.
                                //
 
-                               if (e is Cast){
-                                       ec.Report.Error (254, loc, "The right hand side of a fixed statement assignment may not be a cast expression");
-                                       return false;
+                               if (initializer is Cast) {
+                                       bc.Report.Error (254, initializer.Location, "The right hand side of a fixed statement assignment may not be a cast expression");
+                                       return null;
                                }
 
-                               using (ec.Set (ResolveContext.Options.FixedInitializerScope)) {
-                                       e = e.Resolve (ec);
-                               }
+                               initializer = initializer.Resolve (bc);
 
-                               if (e == null)
-                                       return false;
+                               if (initializer == null)
+                                       return null;
 
                                //
-                               // Case 2: Array
+                               // Case 1: Array
                                //
-                               if (e.Type.IsArray){
-                                       TypeSpec array_type = TypeManager.GetElementType (e.Type);
-                                       
+                               if (initializer.Type.IsArray) {
+                                       TypeSpec array_type = TypeManager.GetElementType (initializer.Type);
+
                                        //
                                        // Provided that array_type is unmanaged,
                                        //
-                                       if (!TypeManager.VerifyUnmanaged (ec.Compiler, array_type, loc))
-                                               return false;
+                                       if (!TypeManager.VerifyUnmanaged (bc.Compiler, array_type, loc))
+                                               return null;
 
                                        //
                                        // and T* is implicitly convertible to the
                                        // pointer type given in the fixed statement.
                                        //
-                                       ArrayPtr array_ptr = new ArrayPtr (e, array_type, loc);
-                                       
+                                       ArrayPtr array_ptr = new ArrayPtr (initializer, array_type, loc);
+
                                        Expression converted = Convert.ImplicitConversionRequired (
-                                               ec, array_ptr, vi.VariableType, loc);
+                                               bc, array_ptr, li.Type, loc);
                                        if (converted == null)
-                                               return false;
-                                       
+                                               return null;
+
                                        //
                                        // fixed (T* e_ptr = (e == null || e.Length == 0) ? null : converted [0])
                                        //
                                        converted = new Conditional (new BooleanExpression (new Binary (Binary.Operator.LogicalOr,
-                                               new Binary (Binary.Operator.Equality, e, new NullLiteral (loc), loc),
-                                               new Binary (Binary.Operator.Equality, new MemberAccess (e, "Length"), new IntConstant (0, loc), loc), loc)),
+                                               new Binary (Binary.Operator.Equality, initializer, new NullLiteral (loc), loc),
+                                               new Binary (Binary.Operator.Equality, new MemberAccess (initializer, "Length"), new IntConstant (0, loc), loc), loc)),
                                                        new NullPointer (loc),
                                                        converted, loc);
 
-                                       converted = converted.Resolve (ec);                                     
+                                       converted = converted.Resolve (bc);
 
-                                       data [i] = new ExpressionEmitter (converted, vi);
-                                       i++;
-
-                                       continue;
+                                       return new ExpressionEmitter (converted, li);
                                }
 
                                //
-                               // Case 3: string
+                               // Case 2: string
                                //
-                               if (e.Type == TypeManager.string_type){
-                                       data [i] = new StringEmitter (e, vi, loc).Resolve (ec);
-                                       i++;
-                                       continue;
+                               if (initializer.Type == TypeManager.string_type) {
+                                       return new StringEmitter (initializer, li, loc).Resolve (bc);
                                }
 
-                               // Case 4: fixed buffer
-                               if (e is FixedBufferPtr) {
-                                       data [i++] = new ExpressionEmitter (e, vi);
-                                       continue;
+                               // Case 3: fixed buffer
+                               if (initializer is FixedBufferPtr) {
+                                       return new ExpressionEmitter (initializer, li);
                                }
 
                                //
-                               // Case 1: & object.
+                               // Case 4: & object.
                                //
-                               Unary u = e as Unary;
+                               bool already_fixed = true;
+                               Unary u = initializer as Unary;
                                if (u != null && u.Oper == Unary.Operator.AddressOf) {
                                        IVariableReference vr = u.Expr as IVariableReference;
                                        if (vr == null || !vr.IsFixed) {
-                                               data [i] = new ExpressionEmitter (e, vi);
+                                               already_fixed = false;
                                        }
                                }
 
-                               if (data [i++] == null)
-                                       ec.Report.Error (213, vi.Location, "You cannot use the fixed statement to take the address of an already fixed expression");
+                               if (already_fixed) {
+                                       bc.Report.Error (213, loc, "You cannot use the fixed statement to take the address of an already fixed expression");
+                               }
+
+                               initializer = Convert.ImplicitConversionRequired (bc, initializer, li.Type, loc);
+                               return new ExpressionEmitter (initializer, li);
+                       }
+               }
+
+
+               VariableDeclaration decl;
+               Statement statement;
+               bool has_ret;
+
+               public Fixed (VariableDeclaration decl, Statement stmt, Location l)
+               {
+                       this.decl = decl;
+                       statement = stmt;
+                       loc = l;
+               }
+
+               #region Properties
+
+               public Statement Statement {
+                       get {
+                               return statement;
+                       }
+               }
+
+               public BlockVariableDeclaration Variables {
+                       get {
+                               return decl;
+                       }
+               }
+
+               #endregion
 
-                               e = Convert.ImplicitConversionRequired (ec, e, expr_type, loc);
+               public override bool Resolve (BlockContext ec)
+               {
+                       using (ec.Set (ResolveContext.Options.FixedInitializerScope)) {
+                               if (!decl.Resolve (ec))
+                                       return false;
                        }
 
                        ec.StartFlowBranching (FlowBranching.BranchingType.Conditional, loc);
@@ -4482,8 +4478,13 @@ namespace Mono.CSharp {
                
                protected override void DoEmit (EmitContext ec)
                {
-                       for (int i = 0; i < data.Length; i++) {
-                               data [i].Emit (ec);
+                       decl.Variable.CreateBuilder (ec);
+                       decl.Initializer.Emit (ec);
+                       if (decl.Declarators != null) {
+                               foreach (var d in decl.Declarators) {
+                                       d.Variable.CreateBuilder (ec);
+                                       d.Initializer.Emit (ec);
+                               }
                        }
 
                        statement.Emit (ec);
@@ -4494,8 +4495,11 @@ namespace Mono.CSharp {
                        //
                        // Clear the pinned variable
                        //
-                       for (int i = 0; i < data.Length; i++) {
-                               data [i].EmitExit (ec);
+                       ((Emitter) decl.Initializer).EmitExit (ec);
+                       if (decl.Declarators != null) {
+                               foreach (var d in decl.Declarators) {
+                                       ((Emitter)d.Initializer).EmitExit (ec);
+                               }
                        }
                }
 
@@ -4503,32 +4507,31 @@ namespace Mono.CSharp {
                {
                        Fixed target = (Fixed) t;
 
-                       target.type = type.Clone (clonectx);
-                       target.declarators = new List<KeyValuePair<LocalInfo, Expression>> (declarators.Count);
-                       foreach (var p in declarators) {
-                               target.declarators.Add (new KeyValuePair<LocalInfo, Expression> (
-                                       clonectx.LookupVariable (p.Key), p.Value.Clone (clonectx)));
-                       }
-                       
+                       target.decl = (VariableDeclaration) decl.Clone (clonectx);
                        target.statement = statement.Clone (clonectx);
                }
        }
-       
-       public class Catch : Statement {
-               public readonly string Name;
-               public Block  Block;
-               public Block  VarBlock;
 
-               Expression type_expr;
+       public class Catch : Statement
+       {
+               Block block;
+               LocalVariable li;
+               FullNamedExpression type_expr;
+               CompilerAssign assign;
                TypeSpec type;
                
-               public Catch (Expression type, string name, Block block, Block var_block, Location l)
+               public Catch (Block block, Location loc)
                {
-                       type_expr = type;
-                       Name = name;
-                       Block = block;
-                       VarBlock = var_block;
-                       loc = l;
+                       this.block = block;
+                       this.loc = loc;
+               }
+
+               #region Properties
+
+               public Block Block {
+                       get {
+                               return block;
+                       }
                }
 
                public TypeSpec CatchType {
@@ -4543,38 +4546,55 @@ namespace Mono.CSharp {
                        }
                }
 
+               public FullNamedExpression TypeExpression {
+                       get {
+                               return type_expr;
+                       }
+                       set {
+                               type_expr = value;
+                       }
+               }
+
+               public LocalVariable Variable {
+                       get {
+                               return li;
+                       }
+                       set {
+                               li = value;
+                       }
+               }
+
+               #endregion
+
                protected override void DoEmit (EmitContext ec)
                {
-                       if (CatchType != null)
-                               ec.BeginCatchBlock (CatchType);
-                       else
+                       if (IsGeneral)
                                ec.BeginCatchBlock (TypeManager.object_type);
+                       else
+                               ec.BeginCatchBlock (CatchType);
 
-                       if (VarBlock != null)
-                               VarBlock.Emit (ec);
-
-                       if (Name != null) {
-                               // TODO: Move to resolve
-                               LocalVariableReference lvr = new LocalVariableReference (Block, Name, loc);
-                               lvr.Resolve (new ResolveContext (ec.MemberContext));
-                               
-                               // Only to make verifier happy
-                               if (TypeManager.IsGenericParameter (lvr.Type))
-                                       ec.Emit (OpCodes.Unbox_Any, lvr.Type);
+                       if (li != null) {
+                               li.CreateBuilder (ec);
 
-                               Expression source;
-                               if (lvr.IsHoisted) {
-                                       LocalTemporary lt = new LocalTemporary (lvr.Type);
+                               //
+                               // Special case hoisted catch variable, we have to use a temporary variable
+                               // to pass via anonymous storey initialization with the value still on top
+                               // of the stack
+                               //
+                               if (li.HoistedVariant != null) {
+                                       LocalTemporary lt = new LocalTemporary (li.Type);
+                                       SymbolWriter.OpenCompilerGeneratedBlock (ec);
                                        lt.Store (ec);
-                                       source = lt;
-                               } else {
-                                       // Variable is at the top of the stack
-                                       source = EmptyExpression.Null;
-                               }
+                                       SymbolWriter.CloseCompilerGeneratedBlock (ec);
 
-                               lvr.EmitAssign (ec, source, false, false);
-                       } else
+                                       // switch to assigning from the temporary variable and not from top of the stack
+                                       assign.UpdateSource (lt);
+                               }
+                       } else {
+                               SymbolWriter.OpenCompilerGeneratedBlock (ec);
                                ec.Emit (OpCodes.Pop);
+                               SymbolWriter.CloseCompilerGeneratedBlock (ec);
+                       }
 
                        Block.Emit (ec);
                }
@@ -4588,23 +4608,23 @@ namespace Mono.CSharp {
                                                return false;
 
                                        type = te.Type;
-
-                                       if (type != TypeManager.exception_type && !TypeSpec.IsBaseClass (type, TypeManager.exception_type, false)){
+                                       if (type != TypeManager.exception_type && !TypeSpec.IsBaseClass (type, TypeManager.exception_type, false)) {
                                                ec.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception");
-                                               return false;
-                                       }
-                               } else
-                                       type = null;
+                                       } else if (li != null) {
+                                               li.Type = type;
+                                               li.PrepareForFlowAnalysis (ec);
 
-                               if (!Block.Resolve (ec))
-                                       return false;
+                                               // source variable is at the top of the stack
+                                               Expression source = new EmptyExpression (li.Type);
+                                               if (li.Type.IsGenericParameter)
+                                                       source = new UnboxCast (source, li.Type);
 
-                               // Even though VarBlock surrounds 'Block' we resolve it later, so that we can correctly
-                               // emit the "unused variable" warnings.
-                               if (VarBlock != null)
-                                       return VarBlock.Resolve (ec);
+                                               assign = new CompilerAssign (new LocalVariableReference (li, loc), source, loc);
+                                               Block.AddScopeStatement (new StatementExpression (assign));
+                                       }
+                               }
 
-                               return true;
+                               return Block.Resolve (ec);
                        }
                }
 
@@ -4613,22 +4633,19 @@ namespace Mono.CSharp {
                        Catch target = (Catch) t;
 
                        if (type_expr != null)
-                               target.type_expr = type_expr.Clone (clonectx);
-                       if (VarBlock != null)
-                               target.VarBlock = clonectx.LookupBlock (VarBlock);                      
-                       target.Block = clonectx.LookupBlock (Block);
+                               target.type_expr = (FullNamedExpression) type_expr.Clone (clonectx);
+
+                       target.block = clonectx.LookupBlock (block);
                }
        }
 
        public class TryFinally : ExceptionStatement {
-               Statement stmt;
                Block fini;
 
-               public TryFinally (Statement stmt, Block fini, Location l)
+               public TryFinally (Statement stmt, Block fini, Location loc)
+                        : base (stmt, loc)
                {
-                       this.stmt = stmt;
                        this.fini = fini;
-                       loc = l;
                }
 
                public override bool Resolve (BlockContext ec)
@@ -4713,14 +4730,6 @@ namespace Mono.CSharp {
                        foreach (Catch c in Specific){
                                ec.CurrentBranching.CreateSibling (c.Block, FlowBranching.SiblingType.Catch);
 
-                               if (c.Name != null) {
-                                       LocalInfo vi = c.Block.GetLocalInfo (c.Name);
-                                       if (vi == null)
-                                               throw new Exception ();
-
-                                       vi.VariableInfo = null;
-                               }
-
                                if (!c.Resolve (ec)) {
                                        ok = false;
                                        continue;
@@ -4742,8 +4751,9 @@ namespace Mono.CSharp {
                        if (General != null) {
                                if (CodeGen.Assembly.WrapNonExceptionThrows) {
                                        foreach (Catch c in Specific){
-                                               if (c.CatchType == TypeManager.exception_type && PredefinedAttributes.Get.RuntimeCompatibility.IsDefined) {
-                                                       ec.Report.Warning (1058, 1, c.loc, "A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a `System.Runtime.CompilerServices.RuntimeWrappedException'");
+                                               if (c.CatchType == TypeManager.exception_type && ec.Compiler.PredefinedAttributes.RuntimeCompatibility.IsDefined) {
+                                                       ec.Report.Warning (1058, 1, c.loc,
+                                                               "A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a `System.Runtime.CompilerServices.RuntimeWrappedException'");
                                                }
                                        }
                                }
@@ -4801,145 +4811,185 @@ namespace Mono.CSharp {
                }
        }
 
-       // FIXME: Why is it almost exact copy of Using ??
-       public class UsingTemporary : ExceptionStatement
+       public class Using : ExceptionStatement
        {
-               protected TemporaryVariable local_copy;
-               Statement statement;
-               Expression expr;
-               protected Statement dispose_call;
-
-               public UsingTemporary (Expression expr, Statement stmt, Location l)
+               public class VariableDeclaration : BlockVariableDeclaration
                {
-                       this.expr = expr;
-                       statement = stmt;
-                       loc = l;
-               }
+                       Statement dispose_call;
 
-               #region Properties
-               public Expression Expression {
-                       get {
-                               return expr;
+                       public VariableDeclaration (FullNamedExpression type, LocalVariable li)
+                               : base (type, li)
+                       {
                        }
-               }
 
-               public Statement Statement {
-                       get {
-                               return statement;
+                       public VariableDeclaration (LocalVariable li, Location loc)
+                               : base (li)
+                       {
+                               this.loc = loc;
                        }
-               }
 
-               #endregion
+                       public VariableDeclaration (Expression expr)
+                               : base (null)
+                       {
+                               loc = expr.Location;
+                               Initializer = expr;
+                       }
 
-               protected virtual bool DoResolve (BlockContext ec)
-               {
-                       expr = expr.Resolve (ec);
-                       if (expr == null)
-                               return false;
+                       #region Properties
 
-                       if (expr.Type != TypeManager.idisposable_type && !expr.Type.ImplementsInterface (TypeManager.idisposable_type)) {
-                               if (TypeManager.IsNullableType (expr.Type)) {
-                                       // Will handle it a custom code
-                               } else if (expr.Type == InternalType.Dynamic) {
-                                       expr = Convert.ImplicitConversionStandard (ec, expr, TypeManager.idisposable_type, loc);
-                               } else {
-                                       Using.Error_IsNotConvertibleToIDisposable (ec, expr);
-                                       return false;
-                               }
+                       public bool IsNested { get; private set; }
+
+                       #endregion
+
+                       public void EmitDispose (EmitContext ec)
+                       {
+                               dispose_call.Emit (ec);
                        }
 
-                       var expr_type = expr.Type;
+                       public override bool Resolve (BlockContext bc)
+                       {
+                               if (IsNested)
+                                       return true;
+
+                               return base.Resolve (bc);
+                       }
 
-                       local_copy = new TemporaryVariable (expr_type, loc);
-                       local_copy.Resolve (ec);
+                       public void ResolveExpression (BlockContext bc)
+                       {
+                               var e = Initializer.Resolve (bc);
+                               if (e == null)
+                                       return;
 
-                       if (TypeManager.void_dispose_void == null) {
-                               TypeManager.void_dispose_void = TypeManager.GetPredefinedMethod (
-                                       TypeManager.idisposable_type, "Dispose", loc, TypeSpec.EmptyTypes);
+                               li = LocalVariable.CreateCompilerGenerated (e.Type, bc.CurrentBlock, loc);
+                               Initializer = ResolveInitializer (bc, Variable, e);
                        }
 
-                       var dispose_mg = MethodGroupExpr.CreatePredefined (TypeManager.void_dispose_void, TypeManager.idisposable_type, loc);
-                       dispose_mg.InstanceExpression = TypeManager.IsNullableType (expr_type) ?
-                               new Cast (new TypeExpression (TypeManager.idisposable_type, loc), local_copy, loc).Resolve (ec) :
-                               local_copy;
+                       protected override Expression ResolveInitializer (BlockContext bc, LocalVariable li, Expression initializer)
+                       {
+                               Assign assign;
+                               if (li.Type == InternalType.Dynamic) {
+                                       initializer = initializer.Resolve (bc);
+                                       if (initializer == null)
+                                               return null;
 
-                       dispose_call = new StatementExpression (new Invocation (dispose_mg, null));
+                                       initializer = Convert.ImplicitConversionRequired (bc, initializer, TypeManager.idisposable_type, loc);
+                                       if (initializer == null)
+                                               return null;
 
-                       // Add conditional call when disposing possible null variable
-                       if (!expr_type.IsStruct || TypeManager.IsNullableType (expr_type))
-                               dispose_call = new If (new Binary (Binary.Operator.Inequality, local_copy, new NullLiteral (loc), loc), dispose_call, loc);
+                                       var var = LocalVariable.CreateCompilerGenerated (TypeManager.idisposable_type, bc.CurrentBlock, loc);
+                                       assign = new SimpleAssign (var.CreateReferenceExpression (bc, loc), initializer, loc);
+                                       assign.ResolveStatement (bc);
 
-                       return dispose_call.Resolve (ec);
-               }
+                                       dispose_call = CreateDisposeCall (bc, var);
+                                       dispose_call.Resolve (bc);
 
-               public override bool Resolve (BlockContext ec)
-               {
-                       bool ok = DoResolve (ec);
+                                       return assign;
+                               }
 
-                       ec.StartFlowBranching (this);
+                               if (li == Variable) {
+                                       CheckIDiposableConversion (bc, li, initializer);
+                                       dispose_call = CreateDisposeCall (bc, li);
+                                       dispose_call.Resolve (bc);
+                               }
 
-                       ok &= statement.Resolve (ec);
+                               return base.ResolveInitializer (bc, li, initializer);
+                       }
 
-                       ec.EndFlowBranching ();
+                       protected virtual void CheckIDiposableConversion (BlockContext bc, LocalVariable li, Expression initializer)
+                       {
+                               var type = li.Type;
 
-                       ok &= base.Resolve (ec);
+                               if (type != TypeManager.idisposable_type && !type.ImplementsInterface (TypeManager.idisposable_type, false)) {
+                                       if (TypeManager.IsNullableType (type)) {
+                                               // it's handled in CreateDisposeCall
+                                               return;
+                                       }
 
-                       return ok;
-               }
+                                       bc.Report.SymbolRelatedToPreviousError (type);
+                                       var loc = type_expr == null ? initializer.Location : type_expr.Location;
+                                       bc.Report.Error (1674, loc, "`{0}': type used in a using statement must be implicitly convertible to `System.IDisposable'",
+                                               type.GetSignatureForError ());
 
-               protected override void EmitPreTryBody (EmitContext ec)
-               {
-                       local_copy.EmitAssign (ec, expr);
-               }
+                                       return;
+                               }
+                       }
 
-               protected override void EmitTryBody (EmitContext ec)
-               {
-                       statement.Emit (ec);
-               }
+                       protected virtual Statement CreateDisposeCall (BlockContext bc, LocalVariable lv)
+                       {
+                               var lvr = lv.CreateReferenceExpression (bc, lv.Location);
+                               var type = lv.Type;
+                               var loc = lv.Location;
 
-               protected override void EmitFinallyBody (EmitContext ec)
-               {
-                       dispose_call.Emit (ec);
-               }
+                               if (TypeManager.void_dispose_void == null) {
+                                       TypeManager.void_dispose_void = TypeManager.GetPredefinedMethod (
+                                               TypeManager.idisposable_type, "Dispose", loc, TypeSpec.EmptyTypes);
+                               }
 
-               protected override void CloneTo (CloneContext clonectx, Statement t)
-               {
-                       UsingTemporary target = (UsingTemporary) t;
+                               var dispose_mg = MethodGroupExpr.CreatePredefined (TypeManager.void_dispose_void, TypeManager.idisposable_type, loc);
+                               dispose_mg.InstanceExpression = TypeManager.IsNullableType (type) ?
+                                       new Cast (new TypeExpression (TypeManager.idisposable_type, loc), lvr, loc).Resolve (bc) :
+                                       lvr;
 
-                       target.expr = expr.Clone (clonectx);
-                       target.statement = statement.Clone (clonectx);
-               }
-       }
+                               Statement dispose = new StatementExpression (new Invocation (dispose_mg, null));
 
-       public class Using : ExceptionStatement {
-               Statement stmt;
-               public Statement EmbeddedStatement {
-                       get { return stmt is Using ? ((Using) stmt).EmbeddedStatement : stmt; }
-               }
+                               // Add conditional call when disposing possible null variable
+                               if (!type.IsStruct || TypeManager.IsNullableType (type))
+                                       dispose = new If (new Binary (Binary.Operator.Inequality, lvr, new NullLiteral (loc), loc), dispose, loc);
+
+                               return dispose;
+                       }
 
-               Expression var;
-               Expression init;
+                       public Statement RewriteForDeclarators (BlockContext bc, Statement stmt)
+                       {
+                               for (int i = declarators.Count - 1; i >= 0; --i) {
+                                       var d = declarators [i];
+                                       var vd = new VariableDeclaration (d.Variable, type_expr.Location);
+                                       vd.Initializer = d.Initializer;
+                                       vd.IsNested = true;
+                                       vd.dispose_call = CreateDisposeCall (bc, d.Variable);
+                                       vd.dispose_call.Resolve (bc);
+
+                                       stmt = new Using (vd, stmt, d.Variable.Location);
+                               }
+
+                               declarators = null;
+                               return stmt;
+                       }
+               }
 
-               ExpressionStatement assign;
+               VariableDeclaration decl;
 
-               public Using (Expression var, Expression init, Statement stmt, Location l)
+               public Using (VariableDeclaration decl, Statement stmt, Location loc)
+                       : base (stmt, loc)
                {
-                       this.var = var;
-                       this.init = init;
-                       this.stmt = stmt;
-                       loc = l;
+                       this.decl = decl;
                }
 
-               static public void Error_IsNotConvertibleToIDisposable (BlockContext ec, Expression expr)
+               public Using (Expression expr, Statement stmt, Location loc)
+                       : base (stmt, loc)
                {
-                       ec.Report.SymbolRelatedToPreviousError (expr.Type);
-                       ec.Report.Error (1674, expr.Location, "`{0}': type used in a using statement must be implicitly convertible to `System.IDisposable'",
-                               TypeManager.CSharpName (expr.Type));
+                       this.decl = new VariableDeclaration (expr);
+               }
+
+               #region Properties
+
+               public Expression Expression {
+                       get {
+                               return decl.Variable == null ? decl.Initializer : null;
+                       }
+               }
+
+               public BlockVariableDeclaration Variables {
+                       get {
+                               return decl;
+                       }
                }
 
+               #endregion
+
                protected override void EmitPreTryBody (EmitContext ec)
                {
-                       assign.EmitStatement (ec);
+                       decl.Emit (ec);
                }
 
                protected override void EmitTryBody (EmitContext ec)
@@ -4949,24 +4999,23 @@ namespace Mono.CSharp {
 
                protected override void EmitFinallyBody (EmitContext ec)
                {
-                       Label skip = ec.DefineLabel ();
-
-                       bool emit_null_check = !TypeManager.IsValueType (var.Type);
-                       if (emit_null_check) {
-                               var.Emit (ec);
-                               ec.Emit (OpCodes.Brfalse, skip);
-                       }
-
-                       Invocation.EmitCall (ec, var, TypeManager.void_dispose_void, null, loc);
-
-                       if (emit_null_check)
-                               ec.MarkLabel (skip);
+                       decl.EmitDispose (ec);
                }
 
                public override bool Resolve (BlockContext ec)
                {
-                       if (!ResolveVariable (ec))
-                               return false;
+                       using (ec.Set (ResolveContext.Options.UsingInitializerScope)) {
+                               if (decl.Variable == null) {
+                                       decl.ResolveExpression (ec);
+                               } else {
+                                       if (!decl.Resolve (ec))
+                                               return false;
+
+                                       if (decl.Declarators != null) {
+                                               stmt = decl.RewriteForDeclarators (ec, stmt);
+                                       }
+                               }
+                       }
 
                        ec.StartFlowBranching (this);
 
@@ -4976,43 +5025,14 @@ namespace Mono.CSharp {
 
                        ok &= base.Resolve (ec);
 
-                       if (TypeManager.void_dispose_void == null) {
-                               TypeManager.void_dispose_void = TypeManager.GetPredefinedMethod (
-                                       TypeManager.idisposable_type, "Dispose", loc, TypeSpec.EmptyTypes);
-                       }
-
                        return ok;
                }
 
-               bool ResolveVariable (BlockContext ec)
-               {
-                       assign = new SimpleAssign (var, init, loc);
-                       assign = assign.ResolveStatement (ec);
-                       if (assign == null)
-                               return false;
-
-                       if (assign.Type == TypeManager.idisposable_type || assign.Type.ImplementsInterface (TypeManager.idisposable_type)) {
-                               return true;
-                       }
-
-                       Expression e;
-                       if (assign.Type == InternalType.Dynamic) {
-                               e = Convert.ImplicitConversionStandard (ec, assign, TypeManager.idisposable_type, loc);
-                           var = new TemporaryVariable (e.Type, loc);
-                           assign = new SimpleAssign (var, e, loc).ResolveStatement (ec);
-                           return true;
-                       }
-
-                       Error_IsNotConvertibleToIDisposable (ec, var);
-                       return false;
-               }
-
                protected override void CloneTo (CloneContext clonectx, Statement t)
                {
                        Using target = (Using) t;
 
-                       target.var = var.Clone (clonectx);
-                       target.init = init.Clone (clonectx);
+                       target.decl = (VariableDeclaration) decl.Clone (clonectx);
                        target.stmt = stmt.Clone (clonectx);
                }
        }
@@ -5024,45 +5044,28 @@ namespace Mono.CSharp {
 
                sealed class ArrayForeach : Statement
                {
-                       class ArrayCounter : TemporaryVariable
-                       {
-                               StatementExpression increment;
-
-                               public ArrayCounter (Location loc)
-                                       : base (TypeManager.int32_type, loc)
-                               {
-                               }
-
-                               public void ResolveIncrement (BlockContext ec)
-                               {
-                                       increment = new StatementExpression (new UnaryMutator (UnaryMutator.Mode.PostIncrement, this, loc));
-                                       increment.Resolve (ec);
-                               }
-
-                               public void EmitIncrement (EmitContext ec)
-                               {
-                                       increment.Emit (ec);
-                               }
-                       }
-
                        readonly Foreach for_each;
                        readonly Statement statement;
 
                        Expression conv;
-                       TemporaryVariable[] lengths;
+                       TemporaryVariableReference[] lengths;
                        Expression [] length_exprs;
-                       ArrayCounter[] counter;
+                       StatementExpression[] counter;
+                       TemporaryVariableReference[] variables;
 
-                       TemporaryVariable copy;
+                       TemporaryVariableReference copy;
                        Expression access;
+                       LocalVariableReference variable;
 
                        public ArrayForeach (Foreach @foreach, int rank)
                        {
                                for_each = @foreach;
                                statement = for_each.statement;
                                loc = @foreach.loc;
+                               variable = new LocalVariableReference (for_each.variable, loc);
 
-                               counter = new ArrayCounter [rank];
+                               counter = new StatementExpression[rank];
+                               variables = new TemporaryVariableReference[rank];
                                length_exprs = new Expression [rank];
 
                                //
@@ -5070,7 +5073,7 @@ namespace Mono.CSharp {
                                // multi-dimensional arrays
                                //
                                if (rank > 1)
-                                       lengths = new TemporaryVariable [rank];
+                                       lengths = new TemporaryVariableReference [rank];
                        }
 
                        protected override void CloneTo (CloneContext clonectx, Statement target)
@@ -5080,27 +5083,30 @@ namespace Mono.CSharp {
 
                        public override bool Resolve (BlockContext ec)
                        {
-                               copy = new TemporaryVariable (for_each.expr.Type, loc);
+                               Block variables_block = variable.local_info.Block;
+                               copy = TemporaryVariableReference.Create (for_each.expr.Type, variables_block, loc);
                                copy.Resolve (ec);
 
                                int rank = length_exprs.Length;
                                Arguments list = new Arguments (rank);
                                for (int i = 0; i < rank; i++) {
-                                       counter [i] = new ArrayCounter (loc);
-                                       counter [i].ResolveIncrement (ec);                                      
+                                       var v = TemporaryVariableReference.Create (TypeManager.int32_type, variables_block, loc);
+                                       variables[i] = v;
+                                       counter[i] = new StatementExpression (new UnaryMutator (UnaryMutator.Mode.PostIncrement, v, loc));
+                                       counter[i].Resolve (ec);
 
                                        if (rank == 1) {
                                                length_exprs [i] = new MemberAccess (copy, "Length").Resolve (ec);
                                        } else {
-                                               lengths [i] = new TemporaryVariable (TypeManager.int32_type, loc);
-                                               lengths [i].Resolve (ec);
+                                               lengths[i] = TemporaryVariableReference.Create (TypeManager.int32_type, variables_block, loc);
+                                               lengths[i].Resolve (ec);
 
                                                Arguments args = new Arguments (1);
                                                args.Add (new Argument (new IntConstant (i, loc)));
                                                length_exprs [i] = new Invocation (new MemberAccess (copy, "GetLength"), args).Resolve (ec);
                                        }
 
-                                       list.Add (new Argument (counter [i]));
+                                       list.Add (new Argument (v));
                                }
 
                                access = new ElementAccess (copy, list, loc).Resolve (ec);
@@ -5127,9 +5133,8 @@ namespace Mono.CSharp {
                                ec.StartFlowBranching (FlowBranching.BranchingType.Loop, loc);
                                ec.CurrentBranching.CreateSibling ();
 
-                               for_each.variable = for_each.variable.ResolveLValue (ec, conv);
-                               if (for_each.variable == null)
-                                       ok = false;
+                               variable.local_info.Type = conv.Type;
+                               variable.Resolve (ec);
 
                                ec.StartFlowBranching (FlowBranching.BranchingType.Embedded, loc);
                                if (!statement.Resolve (ec))
@@ -5162,23 +5167,24 @@ namespace Mono.CSharp {
 
                                IntConstant zero = new IntConstant (0, loc);
                                for (int i = 0; i < rank; i++) {
-                                       counter [i].EmitAssign (ec, zero);
+                                       variables [i].EmitAssign (ec, zero);
 
                                        ec.Emit (OpCodes.Br, test [i]);
                                        ec.MarkLabel (loop [i]);
                                }
 
-                               ((IAssignMethod) for_each.variable).EmitAssign (ec, conv, false, false);
+                               variable.local_info.CreateBuilder (ec);
+                               variable.EmitAssign (ec, conv, false, false);
 
                                statement.Emit (ec);
 
                                ec.MarkLabel (ec.LoopBegin);
 
                                for (int i = rank - 1; i >= 0; i--){
-                                       counter [i].EmitIncrement (ec);
+                                       counter [i].Emit (ec);
 
                                        ec.MarkLabel (test [i]);
-                                       counter [i].Emit (ec);
+                                       variables [i].Emit (ec);
 
                                        if (lengths != null)
                                                lengths [i].Emit (ec);
@@ -5197,16 +5203,16 @@ namespace Mono.CSharp {
                        class Body : Statement
                        {
                                TypeSpec type;
-                               Expression variable, current, conv;
+                               LocalVariableReference variable;
+                               Expression current, conv;
                                Statement statement;
-                               Assign assign;
 
-                               public Body (TypeSpec type, Expression variable,
+                               public Body (TypeSpec type, LocalVariable variable,
                                                                   Expression current, Statement statement,
                                                                   Location loc)
                                {
                                        this.type = type;
-                                       this.variable = variable;
+                                       this.variable = new LocalVariableReference (variable, loc);
                                        this.current = current;
                                        this.statement = statement;
                                        this.loc = loc;
@@ -5227,9 +5233,8 @@ namespace Mono.CSharp {
                                        if (conv == null)
                                                return false;
 
-                                       assign = new SimpleAssign (variable, conv, loc);
-                                       if (assign.Resolve (ec) == null)
-                                               return false;
+                                       variable.local_info.Type = conv.Type;
+                                       variable.Resolve (ec);
 
                                        if (!statement.Resolve (ec))
                                                return false;
@@ -5239,68 +5244,62 @@ namespace Mono.CSharp {
 
                                protected override void DoEmit (EmitContext ec)
                                {
-                                       assign.EmitStatement (ec);
+                                       variable.local_info.CreateBuilder (ec);
+                                       variable.EmitAssign (ec, conv, false, false);
+
                                        statement.Emit (ec);
                                }
                        }
 
-                       class Dispose : UsingTemporary
+                       class RuntimeDispose : Using.VariableDeclaration
                        {
-                               LocalTemporary dispose;
+                               public RuntimeDispose (LocalVariable lv, Location loc)
+                                       : base (lv, loc)
+                               {
+                               }
 
-                               public Dispose (TemporaryVariable variable, LocalTemporary dispose, Expression expr, Statement statement, Location loc)
-                                       : base (expr, statement, loc)
+                               protected override void CheckIDiposableConversion (BlockContext bc, LocalVariable li, Expression initializer)
                                {
-                                       base.local_copy = variable;
-                                       this.dispose = dispose;
+                                       // Defered to runtime check
                                }
 
-                               protected override bool DoResolve (BlockContext ec)
+                               protected override Statement CreateDisposeCall (BlockContext bc, LocalVariable lv)
                                {
                                        if (TypeManager.void_dispose_void == null) {
                                                TypeManager.void_dispose_void = TypeManager.GetPredefinedMethod (
                                                        TypeManager.idisposable_type, "Dispose", loc, TypeSpec.EmptyTypes);
                                        }
 
-                                       Expression dispose_var = (Expression) dispose ?? local_copy;
-
-                                       var dispose_mg = MethodGroupExpr.CreatePredefined (TypeManager.void_dispose_void, TypeManager.idisposable_type, loc);
-                                       dispose_mg.InstanceExpression = dispose_var;
-
-                                       dispose_call = new StatementExpression (new Invocation (dispose_mg, null));
-
-                                       if (!dispose_var.Type.IsStruct)
-                                               dispose_call = new If (new Binary (Binary.Operator.Inequality, dispose_var, new NullLiteral (loc), loc), dispose_call, loc);
+                                       //
+                                       // Fabricates code like
+                                       //
+                                       // if ((temp = vr as IDisposable) != null) temp.Dispose ();
+                                       //
 
-                                       return dispose_call.Resolve (ec);
-                               }
+                                       var dispose_variable = LocalVariable.CreateCompilerGenerated (TypeManager.idisposable_type, bc.CurrentBlock, loc);
 
-                               protected override void EmitFinallyBody (EmitContext ec)
-                               {
-                                       Label call_dispose = ec.DefineLabel ();
-                                       if (dispose != null) {
-                                               local_copy.Emit (ec, false);
-                                               ec.Emit (OpCodes.Isinst, dispose.Type);
-                                               dispose.Store (ec);
-                                       }
+                                       var idisaposable_test = new Binary (Binary.Operator.Inequality, new CompilerAssign (
+                                               dispose_variable.CreateReferenceExpression (bc, loc),
+                                               new As (lv.CreateReferenceExpression (bc, loc), new TypeExpression (dispose_variable.Type, loc), loc),
+                                               loc), new NullLiteral (loc), loc);
 
-                                       base.EmitFinallyBody (ec);
+                                       var dispose_mg = MethodGroupExpr.CreatePredefined (TypeManager.void_dispose_void, TypeManager.idisposable_type, loc);
+                                       dispose_mg.InstanceExpression = dispose_variable.CreateReferenceExpression (bc, loc);
 
-                                       if (dispose != null) {
-                                               ec.MarkLabel (call_dispose);
-                                               dispose.Release (ec);
-                                       }
+                                       Statement dispose = new StatementExpression (new Invocation (dispose_mg, null));
+                                       return new If (idisaposable_test, dispose, loc);
                                }
                        }
 
-                       Expression variable, expr;
+                       LocalVariable variable;
+                       Expression expr;
                        Statement statement;
                        Expression var_type;
                        ExpressionStatement init;
+                       TemporaryVariableReference enumerator_variable;
                        bool ambiguous_getenumerator_name;
 
-                       public CollectionForeach (Expression var_type, Expression var,
-                                                 Expression expr, Statement stmt, Location l)
+                       public CollectionForeach (Expression var_type, LocalVariable var, Expression expr, Statement stmt, Location l)
                        {
                                this.var_type = var_type;
                                this.variable = var;
@@ -5327,7 +5326,8 @@ namespace Mono.CSharp {
                                //
                                // Option 1: Try to match by name GetEnumerator first
                                //
-                               var mexpr = Expression.MemberLookup (rc, rc.CurrentType, expr.Type, "GetEnumerator", 0, true, loc);             // TODO: What if CS0229 ?
+                               var mexpr = Expression.MemberLookup (rc, rc.CurrentType, expr.Type,
+                                       "GetEnumerator", 0, Expression.MemberLookupRestrictions.ExactArity, loc);               // TODO: What if CS0229 ?
 
                                var mg = mexpr as MethodGroupExpr;
                                if (mg != null) {
@@ -5423,8 +5423,12 @@ namespace Mono.CSharp {
                        public override bool Resolve (BlockContext ec)
                        {
                                bool is_dynamic = expr.Type == InternalType.Dynamic;
-                               if (is_dynamic)
+
+                               if (is_dynamic) {
                                        expr = Convert.ImplicitConversionRequired (ec, expr, TypeManager.ienumerable_type, loc);
+                               } else if (TypeManager.IsNullableType (expr.Type)) {
+                                       expr = new Nullable.UnwrapCall (expr).Resolve (ec);
+                               }
 
                                var get_enumerator_mg = ResolveGetEnumerator (ec);
                                if (get_enumerator_mg == null) {
@@ -5432,8 +5436,8 @@ namespace Mono.CSharp {
                                }
 
                                var get_enumerator = get_enumerator_mg.BestCandidate;
-                               var enumerator = new TemporaryVariable (get_enumerator.ReturnType, loc);
-                               enumerator.Resolve (ec);
+                               enumerator_variable = TemporaryVariableReference.Create (get_enumerator.ReturnType, variable.Block, loc);
+                               enumerator_variable.Resolve (ec);
 
                                // Prepare bool MoveNext ()
                                var move_next_mg = ResolveMoveNext (ec, get_enumerator);
@@ -5441,7 +5445,7 @@ namespace Mono.CSharp {
                                        return false;
                                }
 
-                               move_next_mg.InstanceExpression = enumerator;
+                               move_next_mg.InstanceExpression = enumerator_variable;
 
                                // Prepare ~T~ Current { get; }
                                var current_prop = ResolveCurrent (ec, get_enumerator);
@@ -5449,7 +5453,7 @@ namespace Mono.CSharp {
                                        return false;
                                }
 
-                               var current_pe = new PropertyExpr (current_prop, loc) { InstanceExpression = enumerator }.Resolve (ec);
+                               var current_pe = new PropertyExpr (current_prop, loc) { InstanceExpression = enumerator_variable }.Resolve (ec);
                                if (current_pe == null)
                                        return false;
 
@@ -5471,36 +5475,40 @@ namespace Mono.CSharp {
                                if (var_type == null)
                                        return false;
 
+                               variable.Type = var_type.Type;
+
                                var init = new Invocation (get_enumerator_mg, null);
-                               init.Resolve (ec);
 
                                statement = new While (new BooleanExpression (new Invocation (move_next_mg, null)),
                                        new Body (var_type.Type, variable, current_pe, statement, loc), loc);
 
-                               var enum_type = enumerator.Type;
+                               var enum_type = enumerator_variable.Type;
 
                                //
                                // Add Dispose method call when enumerator can be IDisposable
                                //
-                               if (!enumerator.Type.ImplementsInterface (TypeManager.idisposable_type)) {
+                               if (!enum_type.ImplementsInterface (TypeManager.idisposable_type, false)) {
                                        if (!enum_type.IsSealed && !TypeManager.IsValueType (enum_type)) {
                                                //
                                                // Runtime Dispose check
                                                //
-                                               var tv = new LocalTemporary (TypeManager.idisposable_type);
-                                               statement = new Dispose (enumerator, tv, init, statement, loc);
+                                               var vd = new RuntimeDispose (enumerator_variable.LocalInfo, loc);
+                                               vd.Initializer = init;
+                                               statement = new Using (vd, statement, loc);
                                        } else {
                                                //
                                                // No Dispose call needed
                                                //
-                                               this.init = new SimpleAssign (enumerator, init);
+                                               this.init = new SimpleAssign (enumerator_variable, init);
                                                this.init.Resolve (ec);
                                        }
                                } else {
                                        //
                                        // Static Dispose check
                                        //
-                                       statement = new Dispose (enumerator, null, init, statement, loc);
+                                       var vd = new Using.VariableDeclaration (enumerator_variable.LocalInfo, loc);
+                                       vd.Initializer = init;
+                                       statement = new Using (vd, statement, loc);
                                }
 
                                return statement.Resolve (ec);
@@ -5508,6 +5516,8 @@ namespace Mono.CSharp {
 
                        protected override void DoEmit (EmitContext ec)
                        {
+                               enumerator_variable.LocalInfo.CreateBuilder (ec);
+
                                if (init != null)
                                        init.EmitStatement (ec);
 
@@ -5547,12 +5557,11 @@ namespace Mono.CSharp {
                }
 
                Expression type;
-               Expression variable;
+               LocalVariable variable;
                Expression expr;
                Statement statement;
 
-               public Foreach (Expression type, LocalVariableReference var, Expression expr,
-                               Statement stmt, Location l)
+               public Foreach (Expression type, LocalVariable var, Expression expr, Statement stmt, Location l)
                {
                        this.type = type;
                        this.variable = var;
@@ -5610,7 +5619,6 @@ namespace Mono.CSharp {
                        Foreach target = (Foreach) t;
 
                        target.type = type.Clone (clonectx);
-                       target.variable = variable.Clone (clonectx);
                        target.expr = expr.Clone (clonectx);
                        target.statement = statement.Clone (clonectx);
                }
index 25fe7d780c846a7de3e899dd299bcd001d011c74..7b2b8857f944c96fb7cf6682bfe7e8ccc81e500d 100644 (file)
@@ -226,7 +226,7 @@ namespace Mono.CSharp {
 
        public static TypeSpec CoreLookupType (CompilerContext ctx, string ns_name, string name, int arity, MemberKind kind, bool required)
        {
-               Namespace ns = GlobalRootNamespace.Instance.GetNamespace (ns_name, true);
+               Namespace ns = ctx.GlobalRootNamespace.GetNamespace (ns_name, true);
                var te = ns.LookupType (ctx, name, arity, !required, Location.Null);
                var ts = te == null ? null : te.Type;
 
@@ -355,7 +355,7 @@ namespace Mono.CSharp {
                                continue;
 
                        if (!RootContext.StdLib) {
-                               var ns = GlobalRootNamespace.Instance.GetNamespace (p.Namespace, false);
+                               var ns = ctx.GlobalRootNamespace.GetNamespace (p.Namespace, false);
                                ns.ReplaceTypeWithPredefined (found, p);
 
                                var tc = found.MemberDefinition as TypeContainer;
@@ -364,8 +364,8 @@ namespace Mono.CSharp {
                        }
                }
 
-               PredefinedAttributes.Get.ParamArray.Initialize (ctx, false);
-               PredefinedAttributes.Get.Out.Initialize (ctx, false);
+               ctx.PredefinedAttributes.ParamArray.Initialize (ctx, false);
+               ctx.PredefinedAttributes.Out.Initialize (ctx, false);
 
                if (InternalType.Dynamic.GetMetaInfo () == null) {
                        InternalType.Dynamic.SetMetaInfo (object_type.GetMetaInfo ());
@@ -390,7 +390,7 @@ namespace Mono.CSharp {
                // Initialize InternalsVisibleTo as the very first optional type. Otherwise we would populate
                // types cache with incorrect accessiblity when any of optional types is internal.
                //
-               PredefinedAttributes.Get.Initialize (ctx);
+               ctx.PredefinedAttributes.Initialize (ctx);
 
                runtime_argument_handle_type = CoreLookupType (ctx, "System", "RuntimeArgumentHandle", MemberKind.Struct, false);
                asynccallback_type = CoreLookupType (ctx, "System", "AsyncCallback", MemberKind.Delegate, false);
index 242dacdb2734ba9a116f81c600f030bd53b99acd..9f90c0bcf0084682b67efa36f97dd6b11c37e59b 100644 (file)
@@ -289,13 +289,16 @@ namespace Mono.CSharp
                        return "<" + TypeManager.CSharpName (MemberDefinition.TypeParameters) + ">";
                }
 
-               public bool ImplementsInterface (TypeSpec iface)
+               public bool ImplementsInterface (TypeSpec iface, bool variantly)
                {
                        var t = this;
                        do {
                                if (t.Interfaces != null) {     // TODO: Try t.iface
                                        foreach (TypeSpec i in t.Interfaces) {
-                                               if (i == iface || TypeSpecComparer.Variant.IsEqual (i, iface) || TypeSpecComparer.IsEqual (i, iface))
+                                               if (i == iface || TypeSpecComparer.IsEqual (i, iface))
+                                                       return true;
+
+                                               if (variantly && TypeSpecComparer.Variant.IsEqual (i, iface))
                                                        return true;
                                        }
                                }
@@ -638,7 +641,7 @@ namespace Mono.CSharp
                                var targs_definition = target_type_def.TypeParameters;
 
                                if (!type1.IsInterface && !type1.IsDelegate) {
-                                       return TypeSpecComparer.Equals (t1_targs, t2_targs);
+                                       return false;
                                }
 
                                for (int i = 0; i < targs_definition.Length; ++i) {
@@ -807,7 +810,19 @@ namespace Mono.CSharp
                        if (a == InternalType.Dynamic || b == InternalType.Dynamic)
                                return b == TypeManager.object_type || a == TypeManager.object_type;
 
-                       if (a == null || !a.IsGeneric || b == null || !b.IsGeneric)
+                       if (a == null)
+                               return false;
+
+                       if (a.IsArray) {
+                               var a_a = (ArrayContainer) a;
+                               var b_a = b as ArrayContainer;
+                               if (b_a == null)
+                                       return false;
+
+                               return IsEqual (a_a.Element, b_a.Element) && a_a.Rank == b_a.Rank;
+                       }
+
+                       if (!a.IsGeneric || b == null || !b.IsGeneric)
                                return false;
 
                        if (a.MemberDefinition != b.MemberDefinition)
index 568d09ac63ac43ada49a09d14aceef49cca4505e..b531c75b54a26e61821663233ad106f4d2155cca 100644 (file)
@@ -247,11 +247,6 @@ namespace Mono.CSharp
                        return null;
                }
 
-               public virtual object Visit (UsingTemporary usingTemporaryStatement)
-               {
-                       return null;
-               }
-
                public virtual object Visit (Foreach foreachStatement)
                {
                        return null;
index d729de720671cc9d7323ebdeaf61a679d332bae8..7f3f9de8bffccc73c81b5edd7bd3d84e963597e4 100644 (file)
@@ -260,7 +260,7 @@ class Tester : DynamicObjectMock
                        Assert (binder.Operation, ExpressionType.Add, "Operation");
                        AssertArgument (binder, new[] {
                            CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                           CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null)
+                           CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
                        }, "ArgumentInfo");
 
                        Assert (arg, Enum.A, "arg");
@@ -738,7 +738,7 @@ class Tester : DynamicObjectMock
        {
                mock.ConvertOperation = (binder) => {
                        Assert (binder.Explicit, true, "Explicit");
-//                     Assert (binder.IsChecked, true, "IsChecked");
+                       //                      Assert (binder.IsChecked, true, "IsChecked");
                        Assert (binder.Type, typeof (byte), "Type");
                        return (byte) 2;
                };
@@ -767,7 +767,7 @@ class Tester : DynamicObjectMock
                };
 
                foreach (int v in d) {
-//                     Console.WriteLine (v);
+                       //                      Console.WriteLine (v);
                }
        }
 
@@ -775,7 +775,6 @@ class Tester : DynamicObjectMock
        {
                mock.GetIndexOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
@@ -791,7 +790,6 @@ class Tester : DynamicObjectMock
        {
                mock.GetIndexOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
@@ -809,7 +807,6 @@ class Tester : DynamicObjectMock
        {
                mock.GetIndexOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
@@ -826,7 +823,6 @@ class Tester : DynamicObjectMock
                mock.GetMemberOperation = (binder) => {
                        Assert (binder.Name, "Foo", "Name");
                        Assert (binder.IgnoreCase, false, "IgnoreCase");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
                                "ArgumentInfo");
@@ -839,11 +835,10 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null)
                        }, "ArgumentInfo");
 
                        Assert ((IList<object>) args, new object[] { "foo", null }, "args");
@@ -856,7 +851,6 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (0, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
                                "ArgumentInfo");
@@ -866,7 +860,7 @@ class Tester : DynamicObjectMock
 
                d ();
        }
-
+       
        void Invoke_3 (dynamic d, DynamicObjectMock mock)
        {
                try {
@@ -880,11 +874,10 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (2, new string[] { "name" }), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.NamedArgument | CSharpArgumentInfoFlags.UseCompileTimeType, "name")
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.NamedArgument | CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, "name")
                        }, "ArgumentInfo");
 
                        Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
@@ -896,25 +889,38 @@ class Tester : DynamicObjectMock
        void Invoke_5 (dynamic d, DynamicObjectMock mock)
        {
                mock.InvokeOperation = (binder, args) => {
-                       Assert (binder.CallInfo, new CallInfo (2, new string[] { "name" }), "CallInfo");
+                       Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.NamedArgument | CSharpArgumentInfoFlags.UseCompileTimeType, "name")
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
                        }, "ArgumentInfo");
 
-                       Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
+                       Assert ((IList<object>) args, new object[] { "a" }, "args");
                };
 
-               Action<object> a = (i) => { };
+               Action<dynamic> a = (i) => { i ("a"); };
                a (d);
        }
 
+       void Invoke_6 (dynamic d, DynamicObjectMock mock)
+       {
+               mock.InvokeOperation = (binder, args) => {
+                       Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
+                       AssertArgument (binder, new[] {
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
+                       }, "ArgumentInfo");
+
+                       Assert ((IList<object>) args, new object[] { 3 }, "args");
+               };
+
+               d (1 + 2);
+       }
+
        void InvokeMember_1 (dynamic d, DynamicObjectMock mock)
        {
                mock.InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)},
@@ -934,7 +940,6 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)},
@@ -954,15 +959,14 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsRef | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
                                "ArgumentInfo");
 
-//                     Assert (binder.Flags, CSharpCallFlags.None, "Flags");
+                       //                      Assert (binder.Flags, CSharpCallFlags.None, "Flags");
                        Assert (binder.IgnoreCase, false, "IgnoreCase");
-//                     Assert (binder.TypeArguments, new Type[0], "TypeArguments");
+                       //                      Assert (binder.TypeArguments, new Type[0], "TypeArguments");
 
                        Assert ((IList<object>) args, new object[] { 9 }, "args");
                };
@@ -975,7 +979,6 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsOut | CSharpArgumentInfoFlags.UseCompileTimeType, null)    },
@@ -1001,15 +1004,14 @@ class Tester : DynamicObjectMock
        {
                InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null),
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null),
                        }, "ArgumentInfo");
-//                     Assert (binder.Flags, CSharpCallFlags.SimpleNameCall, "Flags");
+                       //                      Assert (binder.Flags, CSharpCallFlags.SimpleNameCall, "Flags");
                        Assert (binder.IgnoreCase, false, "IgnoreCase");
-//                     Assert (binder.TypeArguments, Type.EmptyTypes, "TypeArguments");
+                       //                      Assert (binder.TypeArguments, Type.EmptyTypes, "TypeArguments");
 
                        Assert ((IList<object>) args, new object[] { d, null }, "args");
                };
@@ -1021,7 +1023,6 @@ class Tester : DynamicObjectMock
        {
                mock.InvokeMemberOperation = (binder, args) => {
                        Assert (binder.CallInfo, new CallInfo (0, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
                        }, "ArgumentInfo");
@@ -1039,7 +1040,6 @@ class Tester : DynamicObjectMock
        {
                mock.SetIndexOperation = (binder, args, value) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
@@ -1057,12 +1057,11 @@ class Tester : DynamicObjectMock
        {
                mock.SetIndexOperation = (binder, args, value) => {
                        Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null)
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)
                        }, "ArgumentInfo");
 
                        Assert ((IList<object>) args, new object[] { 2, 3 }, "args");
@@ -1077,7 +1076,6 @@ class Tester : DynamicObjectMock
        {
                mock.SetIndexOperation = (binder, args, value) => {
                        Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
@@ -1098,10 +1096,9 @@ class Tester : DynamicObjectMock
                mock.SetMemberOperation = (binder, value) => {
                        Assert (binder.Name, "Foo", "Name");
                        Assert (binder.IgnoreCase, false, "IgnoreCase");
-//                     Assert (binder.CallingContext, typeof (Tester), "CallingContext");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null) // CSC bug?
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
                        }, "ArgumentInfo");
 
                        Assert (value, d_const, "value");
@@ -1237,7 +1234,7 @@ class Tester : DynamicObjectMock
                        Assert (binder.Operation, ExpressionType.Equal, "Operation");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
                                "ArgumentInfo");
 
                        Assert (arg, null, "arg");
@@ -1261,7 +1258,7 @@ class Tester : DynamicObjectMock
                        Assert (binder.Operation, ExpressionType.NotEqual, "Operation");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
                                "ArgumentInfo");
 
                        Assert (arg, null, "arg");
@@ -1285,7 +1282,7 @@ class Tester : DynamicObjectMock
                        Assert (binder.Operation, ExpressionType.And, "Operation");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
                                "ArgumentInfo");
 
                        Assert (arg, null, "arg");
@@ -1323,7 +1320,7 @@ class Tester : DynamicObjectMock
                        Assert (binder.Operation, ExpressionType.Or, "Operation");
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
-                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
+                               CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
                                "ArgumentInfo");
 
                        Assert (arg, null, "arg");
index e234ac990ec5860174ec459b05f7619d5c485109..d5d307b00789c71f78816be38b802094cc44fb55 100644 (file)
@@ -5,7 +5,7 @@ using System.Collections.Generic;
 
 class Disposable : IDisposable
 {
-       public int Counter;
+       public static int Counter;
 
        public void Dispose ()
        {
@@ -27,13 +27,12 @@ public class Test
                        res += v;
                }
 
-               Console.WriteLine (res);
                return res == 31;
        }
        
        bool ForEachTest_2()
        {
-               dynamic c = new int [2] { 5, 7 };
+               dynamic c = new int [] { 5, 7 };
                int total = 0;
                foreach (var v in c)
                {
@@ -42,6 +41,19 @@ public class Test
                
                return total == 12;
        }
+       
+       bool ForEachTest_3()
+       {
+               dynamic[] c = new dynamic [] { (byte) 1, 7 };
+               int total = 0;
+               foreach (var v in c)
+               {
+                       total += v;
+               }
+
+               Console.WriteLine (total);
+               return total == 8;
+       }
 
        bool UsingTest ()
        {
@@ -52,7 +64,7 @@ public class Test
                        }
                } catch { }
 
-               if (d.Counter != 1)
+               if (Disposable.Counter != 1)
                        return false;
 
                try {
@@ -61,7 +73,7 @@ public class Test
                        }
                } catch { }
 
-               if (d.Counter != 1)
+               if (Disposable.Counter != 2)
                        return false;
 
                return true;
@@ -76,8 +88,11 @@ public class Test
                if (!t.ForEachTest_2 ())
                        return 2;
                
-               if (!t.UsingTest ())
+               if (!t.ForEachTest_3 ())
                        return 3;
+               
+               if (!t.UsingTest ())
+                       return 10;
 
                Console.WriteLine ("ok");
                return 0;
index 9fcd0acfa998391b98d1e61fd9accc478d7295ff..ee4b8ba53576afcd05c392e87fdd33a9f141d70d 100644 (file)
@@ -16,6 +16,10 @@ interface IA<U>
 {
 }
 
+struct S<T>
+{
+}
+
 delegate dynamic D (dynamic d);
 
 class DynamicAssignments
@@ -48,6 +52,13 @@ class DynamicAssignments
                I<object> io = null;
                IA<dynamic> id = io;
                
+               IA<object> ia_o = null;
+               IA<dynamic> ia_d = ia_o;
+               
+               S<dynamic> s_d = new S<dynamic> ();
+               S<object> s_o = s_d;
+               S<object>? s_o_n = s_d;
+               
                D del = delegate (object del_arg) {
                         return (object) null;
                };
index ab8431b8cbe7dd3133b31582605f044e0715a782..9a97972897ac584efcfb398fcd6388f690884b40 100644 (file)
@@ -14,6 +14,16 @@ class C
        {
                return 3;
        }
+       
+       public int M2 (object d)
+       {
+               return 1;
+       }
+       
+       public int M2 (byte s)
+       {
+               return 2;
+       }
 }
 
 public class Test
@@ -27,6 +37,10 @@ public class Test
                
                if (v != 2)
                        return 1;
+               
+               v = d.M2 (1 + 3);
+               if (v != 2)
+                       return 2;
 
                return 0;
        }
index 65b6b1a7ac3145c41561d1d262bbe02accae65c3..94c33799bde4a0103b2ab7a0eb1fa95db602a442 100644 (file)
@@ -13,6 +13,10 @@ class C
 
 public class Test
 {
+       static void M (ref dynamic[] d, ref object[] o)
+       {
+       }
+       
        public static int Main ()
        {
                dynamic d = new C ();
@@ -27,6 +31,9 @@ public class Test
                if (u != 40)
                        return 2;
                
+               object[] o = null;
+               M (ref o, ref o);
+               
                return 0;
        }
 }
diff --git a/mcs/tests/dtest-030.cs b/mcs/tests/dtest-030.cs
new file mode 100644 (file)
index 0000000..979e719
--- /dev/null
@@ -0,0 +1,40 @@
+using System;
+
+class A<T>
+{
+}
+
+class B
+{
+       static void M1<T> (T t) where T : struct
+       {
+       }
+       
+       static void M2<T, U> (T t, U u) where U : IEquatable<T>
+       {
+       }
+       
+       static void M3<T, U> (T t, A<U> u) where U : IEquatable<T>
+       {
+       }
+
+       static void M4<T, U> (T t, IEquatable<U> u) where T : IEquatable<U>
+       {
+       }
+
+       public static void Main ()
+       {
+               dynamic d = 2;
+               M1 (d);
+               
+               M2 (d, 6);
+               M2 (4, d);
+               
+               M3 (d, new A<int> ());
+               
+               M4 (d, 6);
+               // TODO: type inference
+               //M4 (4, d);
+       }
+}
+
diff --git a/mcs/tests/dtest-collectioninit-01.cs b/mcs/tests/dtest-collectioninit-01.cs
new file mode 100644 (file)
index 0000000..55bbbb7
--- /dev/null
@@ -0,0 +1,31 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+public class Test
+{
+       class Wrap
+       {
+               List<short> numbers = new List<short> ();
+               
+               public dynamic Numbers { 
+                       get { 
+                               return numbers;
+                       }
+               }
+       }
+       
+       static int Main ()
+       {
+               var a = new Wrap () {
+                       Numbers =  { 3, 9 }
+               };
+               
+               if (a.Numbers [1] != 9)
+                       return 1;
+               
+               Console.WriteLine ("OK");
+               return 0;
+       }
+}
+
diff --git a/mcs/tests/dtest-etree-01.cs b/mcs/tests/dtest-etree-01.cs
new file mode 100644 (file)
index 0000000..95553f9
--- /dev/null
@@ -0,0 +1,25 @@
+using System;
+using System.Linq.Expressions;
+
+public class C
+{
+       static void Conv1(Expression<Func<object, object>> l)
+       {
+       }
+       
+       static void Conv2(Expression<Func<dynamic, dynamic>> l)
+       {
+       }
+       
+       public static void Main ()
+       {
+               Expression<Func<object>> e1 = () => (dynamic) 1;
+               Expression<Func<dynamic>> e2 = () => (object) 1;
+               
+               Conv1 ((d) => (dynamic) 1);
+               Conv1 ((dynamic d) => d);
+               
+               Conv2 ((o) => (object) 1);
+               Conv2 ((object o) => o);
+       }
+}
\ No newline at end of file
index 4ef3c9b44ff9119d195522d4cdf6415557fdfe5c..46ec88e450573f3780cf354d2341a1ab335452ea 100644 (file)
@@ -1,17 +1,66 @@
 using System;
-using System.Collections;
 
-public class Test
+struct S : IDisposable
 {
-        public static void Main ()
-        {
-                foreach (object o in new Test ())
-                        Console.WriteLine (o);
-        }
-
-        public IEnumerator GetEnumerator ()
-        {
-                foreach (int i in new ArrayList ())
-                        yield return i;
-        }
+       public static int hit;
+
+       void IDisposable.Dispose ()
+       {
+               hit++;
+       }
+
+       public void Dispose ()
+       {
+               throw new ApplicationException ();
+       }
+}
+
+class C : IDisposable
+{
+
+       void IDisposable.Dispose ()
+       {
+       }
+
+       public void Dispose ()
+       {
+               throw new ApplicationException ();
+       }
+}
+
+class Test
+{
+       public static int Main ()
+       {
+               S? nullable = null;
+               using (var a = nullable) {
+               }
+
+               if (S.hit != 0)
+                       return 1;
+
+               using (var s = new S ()) {
+               }
+
+               if (S.hit != 1)
+                       return 2;
+
+               C c = null;
+               GenMethod (c);
+               
+               using (S? a = nullable, b = nullable) {
+               }
+               
+               if (S.hit != 1)
+                       return 3;
+
+               Console.WriteLine ("ok");
+               return 0;
+       }
+
+       static void GenMethod<T> (T t) where T : IDisposable
+       {
+               using (T t2 = t) {
+               }
+       }
 }
diff --git a/mcs/tests/gtest-165.cs b/mcs/tests/gtest-165.cs
deleted file mode 100644 (file)
index 6ed567b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections;
-class X {
-        delegate void A ();
-        static IEnumerable GetIt (int [] args)
-        {
-                foreach (int arg in args) {
-                        Console.WriteLine ("OUT: {0}", arg);
-                        A a = delegate {
-                                Console.WriteLine ("arg: {0}", arg);
-                               return;
-                        };
-                        a ();
-                        yield return arg;
-                }
-        }
-        static int Main ()
-        {
-                int total = 0;
-                foreach (int i in GetIt (new int [] { 1, 2, 3})){
-                        Console.WriteLine ("Got: " + i);
-                        total += i;
-                }
-                if (total != 6)
-                        return 1;
-                return 0;
-        }
-}
index fb80a140fa5b6fae54d5db729cb6a596c63de861..f6f3f8c4727912dfdb5ec05567b4ce3bfcefe06c 100644 (file)
@@ -1,9 +1,14 @@
 using System;
 
 //
-// Parser conditional expression tests
+// Parser conditional and cast expression tests
 //
 
+class A<T>
+{
+       public static int Value;
+}
+
 public class ConditionalParsing
 {
        class T
@@ -85,6 +90,11 @@ public class ConditionalParsing
        {
                int i = new int [] { 1, 2, 3 } [1];
        }
+       
+       void Test_11 ()
+       {
+               int a = (int)(A<int>.Value);
+       }
 
        public static void Main ()
        {
diff --git a/mcs/tests/gtest-536.cs b/mcs/tests/gtest-536.cs
new file mode 100644 (file)
index 0000000..64c54cd
--- /dev/null
@@ -0,0 +1,21 @@
+using System;
+
+public class Test
+{
+
+       public sealed class Expression<TDelegate>
+       {
+       }
+
+       public class Expression
+       {
+               public static void Test ()
+               {
+               }
+       }
+
+       static void Main ()
+       {
+               Expression.Test ();
+       }
+}
diff --git a/mcs/tests/gtest-538.cs b/mcs/tests/gtest-538.cs
new file mode 100644 (file)
index 0000000..5458c4b
--- /dev/null
@@ -0,0 +1,82 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+public struct S : IEnumerable<int>
+{
+       public S (int i)
+       {
+       }
+
+       public IEnumerator<int> GetEnumerator ()
+       {
+               return new Enumerator<int> ();
+       }
+
+       IEnumerator IEnumerable.GetEnumerator ()
+       {
+               throw new ApplicationException ();
+       }
+}
+
+public struct S2
+{
+       public IEnumerator<int> GetEnumerator ()
+       {
+               return new Enumerator<int> ();
+       }
+}
+
+public struct Enumerator<T> : IEnumerator<T>
+{
+       public T Current {
+               get {
+                       throw new NotImplementedException ();
+               }
+       }
+
+       object IEnumerator.Current {
+               get {
+                       throw new NotImplementedException ();
+               }
+       }
+
+       public bool MoveNext ()
+       {
+               return false;
+       }
+
+       public void Reset ()
+       {
+               throw new NotImplementedException ();
+       }
+
+       public void Dispose ()
+       {
+               MySystem.DisposeCounter++;
+       }
+}
+
+public class MySystem
+{
+       public static int DisposeCounter;
+
+       public static int Main ()
+       {
+               S? s = new S ();
+               foreach (var a in s) {
+               }
+
+               if (DisposeCounter != 1)
+                       return 1;
+
+               S2? s2 = new S2 ();
+               foreach (var a in s2) {
+               }
+
+               if (DisposeCounter != 2)
+                       return 2;
+
+               return 0;
+       }
+}
diff --git a/mcs/tests/gtest-539.cs b/mcs/tests/gtest-539.cs
new file mode 100644 (file)
index 0000000..e040a42
--- /dev/null
@@ -0,0 +1,46 @@
+using System;
+
+struct S
+{
+       public int ID { get; set; }
+}
+
+class C
+{
+       public readonly int ID;
+
+       private C (int id)
+       {
+               ID = id;
+       }
+
+       public static explicit operator C (S x)
+       {
+               throw new ApplicationException ("wrong conversion");
+       }
+
+       public static explicit operator C (S? x)
+       {
+               return new C (x.HasValue ? x.Value.ID : 5);
+       }
+}
+
+public class Test
+{
+       public static int Main ()
+       {
+               S? s = null;
+               C c = (C) s;
+
+               if (c.ID != 5)
+                       return 1;
+
+               s = new S () { ID = 10 };
+               c = (C) s;
+
+               if (c.ID != 10)
+                       return 2;
+
+               return 0;
+       }
+}
index de85856e3b8b4b73aaa5f3c9d36e5b089e6fe526..389bc7bc44d806064883035d900936ebb75966cf 100644 (file)
@@ -14,6 +14,7 @@ class SomeGenericClass<SomeType>
 
        void Invoke (SomeHandlerType h)
        {
+               h ();
        }
 
        public void FailsToCompile ()
diff --git a/mcs/tests/gtest-lambda-26.cs b/mcs/tests/gtest-lambda-26.cs
new file mode 100644 (file)
index 0000000..450430d
--- /dev/null
@@ -0,0 +1,13 @@
+using System;
+
+class C
+{
+       static void Main ()
+       {
+               Execute (() => {
+                         int a, b;
+                 });
+       }
+
+       public static void Execute (Action action) { }
+}
\ No newline at end of file
diff --git a/mcs/tests/gtest-linq-25.cs b/mcs/tests/gtest-linq-25.cs
new file mode 100644 (file)
index 0000000..8de5de1
--- /dev/null
@@ -0,0 +1,37 @@
+using System;
+using System.Linq;
+
+class A
+{
+       public string Header { get { return null; } }
+}
+
+class B
+{
+       public string Name { get { return null; } }
+}
+
+class C
+{
+       public static int Main ()
+       {
+               Test (delegate () {
+                       var a = new A[0];
+                       var b = new B[0];
+
+                       if (a != null) {
+                               var r = from c in new A[0]
+                                               from p in new B[0]
+                                               where c.Header == p.Name && p.Name == typeof (string).ToString ()
+                                               select new { C = c, P = p };
+                       }
+               });
+               
+               return 0;
+       }
+
+       static void Test (Action a)
+       {
+               a ();
+       }
+}
diff --git a/mcs/tests/test-298.cs b/mcs/tests/test-298.cs
new file mode 100644 (file)
index 0000000..10ea181
--- /dev/null
@@ -0,0 +1,50 @@
+using System;
+
+class A
+{
+       public static int operator + (short x, A b)
+       {
+               return -1;
+       }
+       
+       public static int operator - (A a)
+       {
+               return -1;
+       }
+}
+
+class B : A
+{
+       public static int operator + (int x, B d)
+       {
+               return 1;
+       }
+       
+       public static int operator - (B b)
+       {
+               return 1;
+       }
+}
+
+class C : B
+{
+}
+
+public class Test
+{
+       public static int Main ()
+       {
+               var b = new B ();
+               short s = 3;
+               var res = s + b;
+
+               if (res != 1)
+                       return 1;
+               
+               var c = new C ();
+               if (-c != 1)
+                       return 2;
+
+               return 0;
+       }
+}
\ No newline at end of file
index 482ba03670ccb5c2b29f9d17f0af40d558c11d75..815df52265eb28f3880705af82f851c135ec2c5b 100644 (file)
@@ -1,32 +1,15 @@
-//
-// Sample for bug 75674
-//
 using System;
-using System.Collections;
 
-class XX {
-       static void Metodo (Exception e)
+class C
+{
+       public static int Main ()
        {
-               if (e is NotImplementedException){
-                       Console.WriteLine ("OK");
-               } else {
-                       Console.WriteLine ("Fail");
-               }
-       }
-       
-       static IEnumerable X ()
-       {
-               try {
-                       throw new NotImplementedException ();
-               } catch (Exception e){
-                       Metodo (e);
-               }
-               yield return 0;
-       }
-       
-       static void Main ()
-       {
-               foreach (int a in X ()){
+               const string s = "oups";
+               if (s.Length != 4) {
+                       Console.WriteLine (s.Length);
+                       return 2;
                }
+               
+               return 0;
        }
 }
diff --git a/mcs/tests/test-467.cs b/mcs/tests/test-467.cs
deleted file mode 100644 (file)
index 4079595..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-
-public class ExceptionWithAnonMethod
-{
-       public delegate void EmptyCallback();
-       static string res;
-       
-       public static int Main()
-       {
-               try {
-                       throw new Exception("e is afraid to enter anonymous land");
-               } catch(Exception e) {
-                       AnonHandler(delegate {
-                               Console.WriteLine(e.Message); 
-                               res = e.Message;
-                       });
-               }
-               if (res == "e is afraid to enter anonymous land"){
-                   Console.WriteLine ("Test passed");
-                   return 0;
-               }
-               Console.WriteLine ("Test failed");
-               return 1;
-       }
-
-       public static void AnonHandler(EmptyCallback handler)
-       {
-               if(handler != null) {
-                       handler();
-               }
-       }
-}
index c594439cc23179dc7439596aaf022f97ba4a8dd4..eed776f3dc04b7663c44fc702e223e19abd104f6 100644 (file)
@@ -1,38 +1,64 @@
-//
-// This is a build test: checks that the compiler does not loop
-// forever endlessly with anonymous methods
-//
 using System;
-using System.Collections;
-using System.Text;
 
-  class Space
-  { public int Value = -1;
+class A : IDisposable
+{
+       public A (int v)
+       {
+       }
+       
+       public void Dispose ()
+       {
+       }
+}
 
-    public delegate void DoCopy();
+class C
+{
+       int b;
+       
+       delegate void D (int i);
+       
+       static void Test (object arg)
+       {
+               const int a2= 9, a3 = a2, a4 = a3, a5 = a4;
+               Console.WriteLine (a5);
+               
+               if (a2 > 0) {
+                       bool a = false;
+               } else {
+                       const bool a = false;
+               }
 
-    public DoCopy CopyIt;
+               for (int i = 0; i < 10; ++i) {
+                       Console.WriteLine (i);
+               }
+               
+               for (int i = 0; i < 10; ++i) {
+                       Console.WriteLine (i);
+               }
+               
+               foreach (var i in new int[] { 9, 8 }) {
+                       Console.WriteLine (i);
+               }
 
-    public void Leak(bool useArray, int max)
-    { DoCopy one;
+               using (A i = new A (1), i2 = new A (2), i3 = new A (3)) {
+               }
+               
+               using (A i = new A (3)) {
+               }
 
-      { int answer = 0;
-        int[] work;
-        
-        CopyIt = delegate { Value = answer; };
-        one = delegate 
-              { work = new int[max];
-                foreach(int x in work) answer += x;
-              };
-      }
+               try {
+               }
+               catch (Exception o) {
+                       o = null;
+               }
 
-      one();
-    }
-  }
+               D action = delegate (int i) {
+               };
+       }
 
-  class Program
-  { 
-    static void Main(string[] args)
-    {
-    }
-  }
+       public static int Main ()
+       {
+               Test (1);
+               return 0;
+       }
+}
\ No newline at end of file
diff --git a/mcs/tests/test-496.cs b/mcs/tests/test-496.cs
deleted file mode 100644 (file)
index 4e3125a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.Collections;
-
-public class Test
-{
-       public IEnumerator GetEnumerator ()
-       {
-               yield return "TEST";
-               try {
-                       int.Parse (arg);
-               } catch {
-                       yield break;
-               }
-               yield return "TEST2";
-       }
-
-       static void Main ()
-       {
-               new Test ().Run ();
-       }
-
-       string arg;
-
-       void Run ()
-       {
-               int i = 0;
-               foreach (string s in this)
-                       i++;
-               if (i != 1)
-                       throw new Exception ();
-
-               arg = "1";
-               i = 0;
-               foreach (string s in this)
-                       i++;
-               if (i != 2)
-                       throw new Exception ();
-       }
-}
-
-
index e0655b25609af8c0488130bf99e07bd1c61e5dad..f5008717b6e312b2a5b0d124b275441ebe3e749e 100644 (file)
@@ -3,7 +3,8 @@ using System;
 class X {
        ~X ()
        {
-               Console.WriteLine ("DESTRUCTOR!");
+               int id = 1;
+               Console.WriteLine ("DESTRUCTOR!" + id);
        }
 
         public static int Test1()
index 60f0ca137811cd564d92073a84e22eb2e485abf2..6b024228830ff4be07e66e868fa3c88e580e4671 100644 (file)
@@ -1,20 +1,23 @@
-delegate void TestFunc (int val);
+using System;
 
-class A
+class ClassMain
 {
-       public A(TestFunc func)
+       delegate void D (int i);
+       
+       public static void Main ()
        {
-               func (0);
+               if (true) {
+                       const bool test = false;
+               } else {
+                       test = false;
+               }
+               
+               D d = delegate (int test) { };
        }
-}
-
-class TestClass
-{
-       static int i = 1;
-       static readonly A a = new A(delegate(int a) { i = a; });
-
-       static int Main ()
-       {
-               return i;
+       
+       static bool test { 
+               set {
+               }
        }
 }
+
index dd32486d053158f624d4634768b761bde8bb55df..b2e6c68dd3105c7a4948c3f87a55988a4326dcee 100644 (file)
@@ -1,17 +1,24 @@
-using System;
-using System.Reflection;
+// Compiler options: -warnaserror
 
-class X {
-       delegate object test (MethodInfo x);
-               
-       static void Main ()
-       {
-               DoCall (delegate(MethodInfo from) {
-                    return from.Invoke (null, new object[] { from });
-                });
-       }
-
-       static void DoCall (test t)
+public class TestCase
+{
+       static int Main ()
        {
+               int i = 0;
+               {
+                       goto A;
+                       A:
+                               i += 3;
+               }
+               {
+                       goto A;
+                       A:
+                               i *= 4;
+               }
+               
+               if (i != 12)
+                       return 1;
+                       
+               return 0;
        }
 }
diff --git a/mcs/tests/test-629.cs b/mcs/tests/test-629.cs
deleted file mode 100644 (file)
index 8113301..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections;
-class Foo {
-       static public IEnumerable foo ()
-       {
-               try { yield break; } catch { } finally { }
-       }
-       static int Main ()
-       {
-               int i = 0;
-               foreach (object o in foo ())
-                       ++i;
-               return i;
-       }
-}
diff --git a/mcs/tests/test-645.cs b/mcs/tests/test-645.cs
deleted file mode 100644 (file)
index 00568fd..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections;
-
-class Program
-{
-    static public IEnumerable Empty {
-        get {
-            object [] os = new object [] { };
-            foreach (object o in os) {
-                yield return o;
-            }
-        }
-    }
-
-    static void Main()
-    {
-        IEnumerator enumerator = Empty.GetEnumerator();
-        if (enumerator.Current == null)
-            Console.WriteLine("Successful");
-        enumerator.MoveNext();
-        if (enumerator.Current == null)
-            Console.WriteLine("Successful");
-    }
-}
diff --git a/mcs/tests/test-801.cs b/mcs/tests/test-801.cs
new file mode 100644 (file)
index 0000000..0c20484
--- /dev/null
@@ -0,0 +1,56 @@
+using System;
+
+class C
+{
+       public enum E
+       {
+               V_0 = 10,
+               V_1     = 50,
+               V_2 = 80
+       }
+       
+       public static implicit operator E (C x)
+       {
+               return E.V_2;
+       }
+
+       public static implicit operator int (C x)
+       {
+               return 1;
+       }
+
+       public static int Main ()
+       {
+               var v = new C ();
+               int i = E.V_1 - v;
+               if (i != -30)
+                       return 1;
+               
+               i = v - E.V_1;
+               if (i != 30)
+                       return 10;
+               
+               E e = E.V_1 + v;
+               if (e != (E) 51)
+                       return 2;
+               
+               e = v + E.V_0;
+               if (e != (E) 11)
+                       return 3;
+               
+               bool b = E.V_2 > v;
+               if (b)
+                       return 4;
+               
+               int iv = 900;
+               e = iv - E.V_1;
+               if (e != (E)850)
+                       return 5;
+               
+               i = v - E.V_1;
+               if (i != (int) 30)
+                       return 6;
+
+               return 0;
+       }
+}
index 9fd5e19bbd70e1907ded082686791e15ed59dba2..dd32486d053158f624d4634768b761bde8bb55df 100644 (file)
@@ -1,35 +1,17 @@
-// Test case for Bug #75934
-// Checks for duplicate field names
-
 using System;
-using System.Collections;
 using System.Reflection;
 
-class test
-{
-        public IEnumerable testen (int x)
-        {
-                for (int i = 0;i < x; i++)
-                        if (i % 2 == 0) {
-                                int o = i;
-                                yield return o;
-                        } else {
-                                int o = i*2;
-                                yield return o;
-                        }
-        }
-}
+class X {
+       delegate object test (MethodInfo x);
+               
+       static void Main ()
+       {
+               DoCall (delegate(MethodInfo from) {
+                    return from.Invoke (null, new object[] { from });
+                });
+       }
 
-class reflect
-{
-       public static void Main (string [] args)
+       static void DoCall (test t)
        {
-               Hashtable ht = new Hashtable ();
-               Assembly asm = Assembly.GetAssembly (typeof (test));
-               foreach (Type t in asm.GetTypes ()) {
-                       ht.Clear ();
-                       foreach (FieldInfo fi in t.GetFields (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
-                               ht.Add (fi.Name, fi);
-               }
        }
 }
index 42b6783c7ef889c4732c9533dd580584b69deb8c..4079595e82b982eabb07d94b04ae64fdcd9ef6c6 100644 (file)
@@ -1,30 +1,32 @@
-//
-// This was a bug which was triggered because I removed a routine
-// inadvertently.   The routine was restored, and now the scopes
-// are initialized
-//
 using System;
-using System.Collections;
-using System.Reflection;
 
-public class CustomDict {
-       ArrayList data;
-
-       public CustomDict() { 
-               foreach (object o in this)
-                       Console.WriteLine (o);
-       }
-
-       public IEnumerator GetEnumerator() {
-               if (data != null)
-                       yield return 1;
-       }
-}
-
-public class Tests
+public class ExceptionWithAnonMethod
 {
+       public delegate void EmptyCallback();
+       static string res;
+       
+       public static int Main()
+       {
+               try {
+                       throw new Exception("e is afraid to enter anonymous land");
+               } catch(Exception e) {
+                       AnonHandler(delegate {
+                               Console.WriteLine(e.Message); 
+                               res = e.Message;
+                       });
+               }
+               if (res == "e is afraid to enter anonymous land"){
+                   Console.WriteLine ("Test passed");
+                   return 0;
+               }
+               Console.WriteLine ("Test failed");
+               return 1;
+       }
 
-       public static void Main () {
-               new CustomDict ();
+       public static void AnonHandler(EmptyCallback handler)
+       {
+               if(handler != null) {
+                       handler();
+               }
        }
 }
index a3e73857cf3cf658a895c3bd7a7df4caa09bcec7..60f0ca137811cd564d92073a84e22eb2e485abf2 100644 (file)
@@ -1,17 +1,20 @@
-using System;
-using System.Collections;
+delegate void TestFunc (int val);
 
-public class Test
+class A
 {
-        public static void Main ()
-        {
-                foreach (object o in new Test ())
-                        Console.WriteLine (o);
-        }
+       public A(TestFunc func)
+       {
+               func (0);
+       }
+}
+
+class TestClass
+{
+       static int i = 1;
+       static readonly A a = new A(delegate(int a) { i = a; });
 
-        public IEnumerator GetEnumerator ()
-        {
-               int i = 2;
-               yield return 3;
-        }
+       static int Main ()
+       {
+               return i;
+       }
 }
diff --git a/mcs/tests/test-anon-97.cs b/mcs/tests/test-anon-97.cs
new file mode 100644 (file)
index 0000000..c594439
--- /dev/null
@@ -0,0 +1,38 @@
+//
+// This is a build test: checks that the compiler does not loop
+// forever endlessly with anonymous methods
+//
+using System;
+using System.Collections;
+using System.Text;
+
+  class Space
+  { public int Value = -1;
+
+    public delegate void DoCopy();
+
+    public DoCopy CopyIt;
+
+    public void Leak(bool useArray, int max)
+    { DoCopy one;
+
+      { int answer = 0;
+        int[] work;
+        
+        CopyIt = delegate { Value = answer; };
+        one = delegate 
+              { work = new int[max];
+                foreach(int x in work) answer += x;
+              };
+      }
+
+      one();
+    }
+  }
+
+  class Program
+  { 
+    static void Main(string[] args)
+    {
+    }
+  }
diff --git a/mcs/tests/test-iter-14.cs b/mcs/tests/test-iter-14.cs
new file mode 100644 (file)
index 0000000..482ba03
--- /dev/null
@@ -0,0 +1,32 @@
+//
+// Sample for bug 75674
+//
+using System;
+using System.Collections;
+
+class XX {
+       static void Metodo (Exception e)
+       {
+               if (e is NotImplementedException){
+                       Console.WriteLine ("OK");
+               } else {
+                       Console.WriteLine ("Fail");
+               }
+       }
+       
+       static IEnumerable X ()
+       {
+               try {
+                       throw new NotImplementedException ();
+               } catch (Exception e){
+                       Metodo (e);
+               }
+               yield return 0;
+       }
+       
+       static void Main ()
+       {
+               foreach (int a in X ()){
+               }
+       }
+}
diff --git a/mcs/tests/test-iter-15.cs b/mcs/tests/test-iter-15.cs
new file mode 100644 (file)
index 0000000..4e3125a
--- /dev/null
@@ -0,0 +1,41 @@
+using System;
+using System.Collections;
+
+public class Test
+{
+       public IEnumerator GetEnumerator ()
+       {
+               yield return "TEST";
+               try {
+                       int.Parse (arg);
+               } catch {
+                       yield break;
+               }
+               yield return "TEST2";
+       }
+
+       static void Main ()
+       {
+               new Test ().Run ();
+       }
+
+       string arg;
+
+       void Run ()
+       {
+               int i = 0;
+               foreach (string s in this)
+                       i++;
+               if (i != 1)
+                       throw new Exception ();
+
+               arg = "1";
+               i = 0;
+               foreach (string s in this)
+                       i++;
+               if (i != 2)
+                       throw new Exception ();
+       }
+}
+
+
diff --git a/mcs/tests/test-iter-16.cs b/mcs/tests/test-iter-16.cs
new file mode 100644 (file)
index 0000000..8113301
--- /dev/null
@@ -0,0 +1,14 @@
+using System.Collections;
+class Foo {
+       static public IEnumerable foo ()
+       {
+               try { yield break; } catch { } finally { }
+       }
+       static int Main ()
+       {
+               int i = 0;
+               foreach (object o in foo ())
+                       ++i;
+               return i;
+       }
+}
diff --git a/mcs/tests/test-iter-17.cs b/mcs/tests/test-iter-17.cs
new file mode 100644 (file)
index 0000000..00568fd
--- /dev/null
@@ -0,0 +1,24 @@
+using System;
+using System.Collections;
+
+class Program
+{
+    static public IEnumerable Empty {
+        get {
+            object [] os = new object [] { };
+            foreach (object o in os) {
+                yield return o;
+            }
+        }
+    }
+
+    static void Main()
+    {
+        IEnumerator enumerator = Empty.GetEnumerator();
+        if (enumerator.Current == null)
+            Console.WriteLine("Successful");
+        enumerator.MoveNext();
+        if (enumerator.Current == null)
+            Console.WriteLine("Successful");
+    }
+}
diff --git a/mcs/tests/test-iter-18.cs b/mcs/tests/test-iter-18.cs
new file mode 100644 (file)
index 0000000..9fd5e19
--- /dev/null
@@ -0,0 +1,35 @@
+// Test case for Bug #75934
+// Checks for duplicate field names
+
+using System;
+using System.Collections;
+using System.Reflection;
+
+class test
+{
+        public IEnumerable testen (int x)
+        {
+                for (int i = 0;i < x; i++)
+                        if (i % 2 == 0) {
+                                int o = i;
+                                yield return o;
+                        } else {
+                                int o = i*2;
+                                yield return o;
+                        }
+        }
+}
+
+class reflect
+{
+       public static void Main (string [] args)
+       {
+               Hashtable ht = new Hashtable ();
+               Assembly asm = Assembly.GetAssembly (typeof (test));
+               foreach (Type t in asm.GetTypes ()) {
+                       ht.Clear ();
+                       foreach (FieldInfo fi in t.GetFields (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
+                               ht.Add (fi.Name, fi);
+               }
+       }
+}
diff --git a/mcs/tests/test-iter-19.cs b/mcs/tests/test-iter-19.cs
new file mode 100644 (file)
index 0000000..a3e7385
--- /dev/null
@@ -0,0 +1,17 @@
+using System;
+using System.Collections;
+
+public class Test
+{
+        public static void Main ()
+        {
+                foreach (object o in new Test ())
+                        Console.WriteLine (o);
+        }
+
+        public IEnumerator GetEnumerator ()
+        {
+               int i = 2;
+               yield return 3;
+        }
+}
diff --git a/mcs/tests/test-iter-20.cs b/mcs/tests/test-iter-20.cs
new file mode 100644 (file)
index 0000000..42b6783
--- /dev/null
@@ -0,0 +1,30 @@
+//
+// This was a bug which was triggered because I removed a routine
+// inadvertently.   The routine was restored, and now the scopes
+// are initialized
+//
+using System;
+using System.Collections;
+using System.Reflection;
+
+public class CustomDict {
+       ArrayList data;
+
+       public CustomDict() { 
+               foreach (object o in this)
+                       Console.WriteLine (o);
+       }
+
+       public IEnumerator GetEnumerator() {
+               if (data != null)
+                       yield return 1;
+       }
+}
+
+public class Tests
+{
+
+       public static void Main () {
+               new CustomDict ();
+       }
+}
diff --git a/mcs/tests/test-iter-21.cs b/mcs/tests/test-iter-21.cs
new file mode 100644 (file)
index 0000000..6ed567b
--- /dev/null
@@ -0,0 +1,33 @@
+using System;
+using System.Collections;
+class X {
+        delegate void A ();
+        static IEnumerable GetIt (int [] args)
+        {
+                foreach (int arg in args) {
+                        Console.WriteLine ("OUT: {0}", arg);
+                        A a = delegate {
+                                Console.WriteLine ("arg: {0}", arg);
+                               return;
+                        };
+                        a ();
+                        yield return arg;
+                }
+        }
+        static int Main ()
+        {
+                int total = 0;
+                foreach (int i in GetIt (new int [] { 1, 2, 3})){
+                        Console.WriteLine ("Got: " + i);
+                        total += i;
+                }
+                if (total != 6)
+                        return 1;
+                return 0;
+        }
+}
diff --git a/mcs/tests/test-iter-22.cs b/mcs/tests/test-iter-22.cs
new file mode 100644 (file)
index 0000000..4ef3c9b
--- /dev/null
@@ -0,0 +1,17 @@
+using System;
+using System.Collections;
+
+public class Test
+{
+        public static void Main ()
+        {
+                foreach (object o in new Test ())
+                        Console.WriteLine (o);
+        }
+
+        public IEnumerator GetEnumerator ()
+        {
+                foreach (int i in new ArrayList ())
+                        yield return i;
+        }
+}
index 0bb93cc3fb6da7258808108b8153b571680eb1ae..c2db5c4ce367f199e3c91330274c625ba0b02e24 100644 (file)
         <size>127</size>
       </method>
       <method name="Void &lt;Invoke_5&gt;m__31(System.Dynamic.InvokeBinder, System.Object[])">
-        <size>127</size>
+        <size>91</size>
       </method>
       <method name="Void &lt;Invoke_5&gt;m__32(System.Object)">
-        <size>1</size>
+        <size>93</size>
+      </method>
+    </type>
+    <type name="AssertDynamicObject+&lt;GetFakeMetaObject&gt;c__AnonStorey0">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;BinaryAddChecked_2&gt;c__AnonStorey1">
+      <method name="System.Object &lt;&gt;m__A()">
+        <size>91</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;GetIndex_3&gt;c__AnonStorey2">
+      <method name="Void &lt;&gt;m__2C(System.Dynamic.GetIndexBinder, System.Object[])">
+        <size>92</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;InvokeMember_2&gt;c__AnonStorey3">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;InvokeMember_6&gt;c__AnonStorey4">
+      <method name="Void .ctor()">
+        <size>7</size>
       </method>
-      <method name="Void &lt;InvokeMember_1&gt;m__33(System.Dynamic.InvokeMemberBinder, System.Object[])">
+    </type>
+    <type name="Tester+&lt;SetIndex_3&gt;c__AnonStorey5">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="Void Invoke_6(System.Object, DynamicObjectMock)">
+        <size>124</size>
+      </method>
+      <method name="Void &lt;Invoke_6&gt;m__33(System.Dynamic.InvokeBinder, System.Object[])">
+        <size>92</size>
+      </method>
+      <method name="Void &lt;InvokeMember_1&gt;m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>110</size>
       </method>
-      <method name="Void &lt;InvokeMember_3&gt;m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_3&gt;m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>111</size>
       </method>
-      <method name="Void &lt;InvokeMember_4&gt;m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_4&gt;m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>110</size>
       </method>
-      <method name="Void &lt;InvokeMember_7&gt;m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_7&gt;m__39(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>90</size>
       </method>
-      <method name="Void &lt;SetIndex_1&gt;m__39(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+      <method name="Void &lt;SetIndex_1&gt;m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>124</size>
       </method>
-      <method name="Void &lt;SetIndex_2&gt;m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+      <method name="Void &lt;SetIndex_2&gt;m__3B(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>139</size>
       </method>
-      <method name="Void &lt;SetMember_1&gt;m__3C(System.Dynamic.SetMemberBinder, System.Object)">
+      <method name="Void &lt;SetMember_1&gt;m__3D(System.Dynamic.SetMemberBinder, System.Object)">
         <size>101</size>
       </method>
-      <method name="System.Object &lt;UnaryPlus_1&gt;m__3D(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryPlus_1&gt;m__3E(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryMinus_1&gt;m__3E(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryMinus_1&gt;m__3F(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryNot_1&gt;m__3F(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryNot_1&gt;m__40(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryOnesComplement_1&gt;m__40(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryOnesComplement_1&gt;m__41(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryDecrement_1&gt;m__41(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryDecrement_1&gt;m__42(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryDecrement_2&gt;m__42(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryDecrement_2&gt;m__43(System.Dynamic.UnaryOperationBinder)">
         <size>51</size>
       </method>
-      <method name="System.Object &lt;UnaryIncrement_1&gt;m__43(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIncrement_1&gt;m__44(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryIncrement_2&gt;m__44(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIncrement_2&gt;m__45(System.Dynamic.UnaryOperationBinder)">
         <size>51</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_1&gt;m__45(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_1&gt;m__46(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_1&gt;m__46(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_1&gt;m__47(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_2&gt;m__47(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_2&gt;m__48(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_2&gt;m__48(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_2&gt;m__49(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_3&gt;m__49(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_3&gt;m__4A(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_3&gt;m__4A(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_3&gt;m__4B(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>67</size>
       </method>
-      <method name="System.Object &lt;UnaryIsTrue_1&gt;m__4B(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsTrue_1&gt;m__4C(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="System.Object &lt;UnaryIsTrue_2&gt;m__4C(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsTrue_2&gt;m__4D(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsTrue_2&gt;m__4D(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsTrue_2&gt;m__4E(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__4E(System.Reflection.MethodInfo)">
+      <method name="Boolean &lt;Main&gt;m__4F(System.Reflection.MethodInfo)">
         <size>12</size>
       </method>
-      <method name="System.String &lt;Main&gt;m__4F(System.Reflection.MethodInfo)">
+      <method name="System.String &lt;Main&gt;m__50(System.Reflection.MethodInfo)">
         <size>7</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__50(System.Reflection.MethodInfo)">
+      <method name="Boolean &lt;Main&gt;m__51(System.Reflection.MethodInfo)">
         <size>7</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__51(Boolean)">
+      <method name="Boolean &lt;Main&gt;m__52(Boolean)">
         <size>5</size>
       </method>
     </type>
-    <type name="AssertDynamicObject+&lt;GetFakeMetaObject&gt;c__AnonStorey0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;BinaryAddChecked_2&gt;c__AnonStorey1">
-      <method name="System.Object &lt;&gt;m__A()">
-        <size>91</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;GetIndex_3&gt;c__AnonStorey2">
-      <method name="Void &lt;&gt;m__2C(System.Dynamic.GetIndexBinder, System.Object[])">
-        <size>92</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-    </type>
     <type name="Tester+&lt;InvokeMember_2&gt;c__AnonStorey3">
-      <method name="Void &lt;&gt;m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;&gt;m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>109</size>
       </method>
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
     </type>
     <type name="Tester+&lt;InvokeMember_6&gt;c__AnonStorey4">
-      <method name="Void &lt;&gt;m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;&gt;m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>119</size>
       </method>
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
     </type>
     <type name="Tester+&lt;SetIndex_3&gt;c__AnonStorey5">
-      <method name="Void &lt;&gt;m__3B(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+      <method name="Void &lt;&gt;m__3C(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>119</size>
       </method>
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
     </type>
-    <type name="Tester+&lt;InvokeMember_3&gt;c__DynamicSite0+Container0">
+    <type name="Tester+&lt;InvokeMember_3&gt;c__DynamicSite30+Container0">
       <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
         <size>0</size>
       </method>
         <size>0</size>
       </method>
     </type>
-    <type name="Tester+&lt;InvokeMember_4&gt;c__DynamicSite0+Container0">
+    <type name="Tester+&lt;InvokeMember_4&gt;c__DynamicSite31+Container0">
       <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
         <size>0</size>
       </method>
         <size>1370</size>
       </method>
       <method name="Void AddNullableTest()">
-        <size>2277</size>
+        <size>2278</size>
       </method>
       <method name="Void AddEnumTest()">
         <size>874</size>
         <size>670</size>
       </method>
       <method name="Void AndTestNullable()">
-        <size>1807</size>
+        <size>1808</size>
       </method>
       <method name="Void AndAssignedTest()">
         <size>911</size>
         <size>927</size>
       </method>
       <method name="Void DivideNullableTest()">
-        <size>2305</size>
+        <size>2306</size>
       </method>
       <method name="Void DivideCheckedTest()">
         <size>1</size>
         <size>1941</size>
       </method>
       <method name="Void EqualNullableTest()">
-        <size>3032</size>
+        <size>3033</size>
       </method>
       <method name="Void EqualEnumTest()">
         <size>1047</size>
         <size>1546</size>
       </method>
       <method name="Void ExclusiveOrNullableTest()">
-        <size>1815</size>
+        <size>1816</size>
       </method>
       <method name="Void ExclusiveOrTestEnum()">
         <size>692</size>
         <size>1983</size>
       </method>
       <method name="Void GreaterThanNullableTest()">
-        <size>2405</size>
+        <size>2406</size>
       </method>
       <method name="Void GreaterThanEnumTest()">
         <size>1047</size>
         <size>1983</size>
       </method>
       <method name="Void GreaterThanEqualNullableTest()">
-        <size>2405</size>
+        <size>2406</size>
       </method>
       <method name="Void GreaterThanEqualEnumTest()">
         <size>1047</size>
         <size>1983</size>
       </method>
       <method name="Void LessThanNullableTest()">
-        <size>2419</size>
+        <size>2420</size>
       </method>
       <method name="Void LessThanEnumTest()">
         <size>1047</size>
         <size>1983</size>
       </method>
       <method name="Void LessThanOrEqualNullableTest()">
-        <size>2405</size>
+        <size>2406</size>
       </method>
       <method name="Void LessThanOrEqualEnumTest()">
         <size>1047</size>
         <size>923</size>
       </method>
       <method name="Void ModuloNullableTest()">
-        <size>2293</size>
+        <size>2294</size>
       </method>
       <method name="Void ModuloAssignTest()">
         <size>1137</size>
         <size>1167</size>
       </method>
       <method name="Void MultiplyNullableTest()">
-        <size>2293</size>
+        <size>2294</size>
       </method>
       <method name="Void MultiplyCheckedTest()">
         <size>343</size>
         <size>1945</size>
       </method>
       <method name="Void NotEqualNullableTest()">
-        <size>3032</size>
+        <size>3033</size>
       </method>
       <method name="Void NotEqualEnumTest()">
         <size>1047</size>
         <size>674</size>
       </method>
       <method name="Void OrTestNullable()">
-        <size>1591</size>
+        <size>1592</size>
       </method>
       <method name="Void OrAssignedTest()">
         <size>911</size>
         <size>1132</size>
       </method>
       <method name="Void SubtractNullableTest()">
-        <size>2288</size>
+        <size>2289</size>
       </method>
       <method name="Void SubtractEnumTest()">
         <size>896</size>
         <size>26</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>147</size>
+        <size>145</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>101</size>
       </method>
     </type>
-    <type name="Tester+&lt;InvokeMember&gt;c__DynamicSite0+Container0">
+    <type name="Tester+&lt;InvokeMember&gt;c__DynamicSite2+Container0">
       <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef, System.String ByRef)">
         <size>0</size>
       </method>
   <test name="dtest-008.cs">
     <type name="Disposable">
       <method name="Void Dispose()">
-        <size>15</size>
+        <size>13</size>
       </method>
       <method name="Void Test()">
         <size>1</size>
     </type>
     <type name="Test">
       <method name="Boolean ForEachTest()">
-        <size>512</size>
+        <size>404</size>
       </method>
       <method name="Boolean UsingTest()">
-        <size>862</size>
+        <size>335</size>
       </method>
       <method name="Int32 Main()">
-        <size>57</size>
+        <size>71</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Boolean ForEachTest_2()">
-        <size>300</size>
+        <size>299</size>
+      </method>
+      <method name="Boolean ForEachTest_3()">
+        <size>219</size>
       </method>
     </type>
   </test>
     </type>
     <type name="DynamicAssignments">
       <method name="Int32 Main()">
-        <size>102</size>
+        <size>130</size>
       </method>
       <method name="System.Object &lt;Main&gt;m__0(System.Object)">
         <size>2</size>
     </type>
     <type name="Test">
       <method name="Int32 Main()">
-        <size>194</size>
+        <size>360</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
+    <type name="C">
+      <method name="Int32 M2(System.Object)">
+        <size>2</size>
+      </method>
+      <method name="Int32 M2(Byte)">
+        <size>2</size>
+      </method>
+    </type>
   </test>
   <test name="dtest-028.cs">
     <type name="C">
     </type>
     <type name="Test">
       <method name="Int32 Main()">
-        <size>225</size>
+        <size>236</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>0</size>
       </method>
     </type>
+    <type name="Test">
+      <method name="Void M(System.Object[] ByRef, System.Object[] ByRef)">
+        <size>1</size>
+      </method>
+    </type>
   </test>
   <test name="dtest-029.cs">
     <type name="C">
       </method>
     </type>
   </test>
+  <test name="dtest-030.cs">
+    <type name="A`1[T]">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="Void M1[T](T)">
+        <size>1</size>
+      </method>
+      <method name="Void M2[T,U](T, U)">
+        <size>1</size>
+      </method>
+      <method name="Void M3[T,U](T, A`1[U])">
+        <size>1</size>
+      </method>
+      <method name="Void M4[T,U](T, IEquatable`1)">
+        <size>1</size>
+      </method>
+      <method name="Void Main()">
+        <size>576</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="dtest-collectioninit-01.cs">
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>475</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+Wrap">
+      <method name="System.Object get_Numbers()">
+        <size>7</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>18</size>
+      </method>
+    </type>
+  </test>
   <test name="dtest-error-01.cs">
     <type name="Helper">
       <method name="Int32* Foo(Int32)">
       </method>
     </type>
   </test>
+  <test name="dtest-etree-01.cs">
+    <type name="C">
+      <method name="Void Conv1(System.Linq.Expressions.Expression`1[System.Func`2[System.Object,System.Object]])">
+        <size>1</size>
+      </method>
+      <method name="Void Conv2(System.Linq.Expressions.Expression`1[System.Func`2[System.Object,System.Object]])">
+        <size>1</size>
+      </method>
+      <method name="Void Main()">
+        <size>382</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="dtest-implicitarray-01.cs">
     <type name="C">
       <method name="Void Method()">
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>203</size>
+        <size>204</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>107</size>
+        <size>105</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>208</size>
+        <size>209</size>
       </method>
       <method name="Void TestPairLog()">
-        <size>182</size>
+        <size>184</size>
       </method>
     </type>
     <type name="Pair`2[T,U]">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>66</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>8</size>
-      </method>
     </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="S">
+      <method name="Void System.IDisposable.Dispose()">
+        <size>13</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="Void Dispose()">
+        <size>6</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>187</size>
+    </type>
+    <type name="C">
+      <method name="Void System.IDisposable.Dispose()">
+        <size>1</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
-      </method>
-      <method name="Void Reset()">
         <size>6</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>209</size>
+      </method>
+      <method name="Void GenMethod[T](T)">
+        <size>33</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-079.cs">
     <type name="A.ArrayList`1[T]">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>14</size>
       </method>
       <method name="Void Insert(Int32, T)">
-        <size>256</size>
+        <size>255</size>
       </method>
       <method name="Void RemoveAt(Int32)">
         <size>113</size>
         <size>7</size>
       </method>
       <method name="LinkedList`1[T] op_Addition(LinkedList`1[T], LinkedList`1[T])">
-        <size>123</size>
+        <size>120</size>
       </method>
     </type>
     <type name="LinkedList`1+Node[T]">
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>201</size>
+        <size>197</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>120</size>
+        <size>119</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>846</size>
+        <size>847</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>1330</size>
+        <size>1332</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>112</size>
+        <size>113</size>
       </method>
     </type>
     <type name="Foo`1[T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>134</size>
+        <size>136</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>1599</size>
+        <size>1605</size>
       </method>
     </type>
   </test>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>91</size>
+        <size>89</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
     </type>
   </test>
-  <test name="gtest-165.cs">
-    <type name="X">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable GetIt(System.Int32[])">
-        <size>30</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>119</size>
-      </method>
-    </type>
-    <type name="X+A">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="Void Invoke()">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="Void EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="X+&lt;GetIt&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>201</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>22</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>40</size>
-      </method>
-    </type>
-    <type name="&lt;PrivateImplementationDetails&gt;">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-    </type>
-  </test>
   <test name="gtest-166.cs">
     <type name="C">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Test()">
-        <size>324</size>
+        <size>323</size>
       </method>
       <method name="Int32 Main()">
         <size>6</size>
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>186</size>
+        <size>184</size>
       </method>
     </type>
     <type name="X+&lt;&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>145</size>
+        <size>143</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>84</size>
+        <size>82</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>70</size>
+        <size>68</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>82</size>
+        <size>80</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>82</size>
+        <size>80</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>207</size>
+        <size>205</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>118</size>
+        <size>116</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>11</size>
       </method>
       <method name="Void Run()">
-        <size>151</size>
+        <size>147</size>
       </method>
     </type>
     <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>129</size>
+        <size>127</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>1</size>
       </method>
       <method name="Void Main()">
-        <size>163</size>
+        <size>162</size>
       </method>
       <method name="Void f6(ParamEnum)">
         <size>1</size>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>80</size>
+        <size>78</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>136</size>
       </method>
       <method name="Int32 Test(System.Type, System.Type[])">
-        <size>434</size>
+        <size>425</size>
       </method>
       <method name="Int32 Test()">
         <size>532</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>106</size>
+        <size>104</size>
       </method>
       <method name="Void Dispose()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>220</size>
+        <size>222</size>
       </method>
     </type>
     <type name="MyType">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>168</size>
+        <size>169</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>234</size>
+        <size>235</size>
       </method>
     </type>
   </test>
         <size>21</size>
       </method>
     </type>
+    <type name="A`1[T]">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="ConditionalParsing">
+      <method name="Void Test_11()">
+        <size>7</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-410.cs">
     <type name="Program">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>173</size>
+        <size>174</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>258</size>
+        <size>261</size>
       </method>
     </type>
   </test>
   <test name="gtest-514.cs">
     <type name="test2.Test`3[T,U,V]">
       <method name="Void Method()">
-        <size>128</size>
+        <size>127</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
   </test>
+  <test name="gtest-536.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+Expression`1[TDelegate]">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+Expression">
+      <method name="Void Test()">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="gtest-538.cs">
+    <type name="S">
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>6</size>
+      </method>
+      <method name="IEnumerator`1 GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void .ctor(Int32)">
+        <size>1</size>
+      </method>
+    </type>
+    <type name="S2">
+      <method name="IEnumerator`1 GetEnumerator()">
+        <size>15</size>
+      </method>
+    </type>
+    <type name="Enumerator`1[T]">
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>6</size>
+      </method>
+      <method name="T get_Current()">
+        <size>6</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>2</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>13</size>
+      </method>
+    </type>
+    <type name="MySystem">
+      <method name="Int32 Main()">
+        <size>182</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="gtest-539.cs">
+    <type name="S">
+      <method name="Int32 get_ID()">
+        <size>7</size>
+      </method>
+      <method name="Void set_ID(Int32)">
+        <size>8</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="C op_Explicit(S)">
+        <size>11</size>
+      </method>
+      <method name="C op_Explicit(Nullable`1)">
+        <size>39</size>
+      </method>
+      <method name="Void .ctor(Int32)">
+        <size>14</size>
+      </method>
+    </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>79</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-anon-1.cs">
     <type name="X">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>110</size>
+        <size>108</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>26</size>
       </method>
       <method name="Int32 Main()">
-        <size>577</size>
+        <size>575</size>
       </method>
     </type>
     <type name="Test+&lt;For&gt;c__AnonStorey0`1[T]">
         <size>33</size>
       </method>
       <method name="System.String Implode[TSource](IEnumerable`1, System.String, System.Action`2[System.Text.StringBuilder,TSource])">
-        <size>128</size>
+        <size>125</size>
       </method>
     </type>
     <type name="Test">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>98</size>
+        <size>96</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Void Invoke(SomeGenericClass`1+SomeHandlerType[SomeType])">
-        <size>1</size>
+        <size>7</size>
       </method>
       <method name="Void FailsToCompile()">
         <size>19</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>180</size>
+        <size>178</size>
       </method>
       <method name="Void Dispose()">
         <size>66</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>65</size>
+        <size>63</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>98</size>
+        <size>96</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>83</size>
       </method>
       <method name="Int32 Main()">
-        <size>534</size>
+        <size>528</size>
       </method>
     </type>
     <type name="Test+Wrap">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>276</size>
+        <size>274</size>
       </method>
       <method name="System.Int64[] GetValues()">
         <size>18</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>108</size>
+        <size>106</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>295</size>
+        <size>293</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
   <test name="gtest-etree-20.cs">
     <type name="S">
       <method name="Int32 Main()">
-        <size>215</size>
+        <size>216</size>
       </method>
     </type>
     <type name="A">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>1243</size>
+        <size>1234</size>
       </method>
     </type>
     <type name="Test+Point">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>196</size>
+        <size>194</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>224</size>
+        <size>222</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>185</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>184</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>185</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>84</size>
+        <size>82</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>130</size>
+        <size>128</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>103</size>
+        <size>101</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>150</size>
+        <size>143</size>
       </method>
     </type>
     <type name="Collection`1+&lt;GetEnumerator&gt;c__Iterator0[T]">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>176</size>
+        <size>174</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>117</size>
+        <size>115</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>205</size>
+        <size>215</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
+        <size>76</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>23</size>
       </method>
       <method name="Int32 Main()">
-        <size>133</size>
+        <size>135</size>
       </method>
       <method name="Int32 &lt;get_BaseM&gt;__BaseCallProxy0()">
         <size>7</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>86</size>
+        <size>84</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>181</size>
+        <size>179</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>32</size>
       </method>
       <method name="TR Sum[TA,TR](IEnumerable`1, System.Func`3[TR,TA,TR])">
-        <size>122</size>
+        <size>123</size>
       </method>
     </type>
     <type name="Repro">
       </method>
     </type>
   </test>
+  <test name="gtest-lambda-26.cs">
+    <type name="C">
+      <method name="Void Main()">
+        <size>35</size>
+      </method>
+      <method name="Void Execute(System.Action)">
+        <size>1</size>
+      </method>
+      <method name="Void &lt;Main&gt;m__0()">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-linq-01.cs">
     <type name="from.C">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Void Main()">
-        <size>2205</size>
+        <size>2180</size>
       </method>
       <method name="Void Foo(Int32, Boolean)">
         <size>11</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>509</size>
+        <size>507</size>
       </method>
       <method name="Int32 &lt;Main&gt;m__0(Int32)">
         <size>2</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>561</size>
+        <size>559</size>
       </method>
     </type>
     <type name="&lt;PrivateImplementationDetails&gt;">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>410</size>
+        <size>408</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;i&gt;__T,&lt;u&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>754</size>
+        <size>748</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;i1&gt;__T,&lt;i2&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>912</size>
+        <size>911</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`1[&lt;Result&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>729</size>
+        <size>734</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;a&gt;__T,&lt;ab&gt;__T]">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>86</size>
+        <size>84</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>159</size>
+        <size>157</size>
       </method>
       <method name="Int32 &lt;Main&gt;m__0(Int32)">
         <size>2</size>
     </type>
     <type name="OrderByBugExample.Program">
       <method name="Int32 Main()">
-        <size>351</size>
+        <size>345</size>
       </method>
       <method name="System.String &lt;Main&gt;m__0(OrderByBugExample.Foo)">
         <size>7</size>
       </method>
     </type>
   </test>
+  <test name="gtest-linq-25.cs">
+    <type name="A">
+      <method name="System.String get_Header()">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="System.String get_Name()">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>36</size>
+      </method>
+      <method name="Void Test(System.Action)">
+        <size>7</size>
+      </method>
+      <method name="Void &lt;Main&gt;m__0()">
+        <size>159</size>
+      </method>
+      <method name="IEnumerable`1 &lt;Main&gt;m__1(A)">
+        <size>7</size>
+      </method>
+      <method name="&lt;&gt;__AnonType0`2[A,B] &lt;Main&gt;m__2(A, B)">
+        <size>8</size>
+      </method>
+      <method name="Boolean &lt;Main&gt;m__3(&lt;&gt;__AnonType0`2[A,B])">
+        <size>67</size>
+      </method>
+      <method name="&lt;&gt;__AnonType1`2[A,B] &lt;Main&gt;m__4(&lt;&gt;__AnonType0`2[A,B])">
+        <size>18</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="&lt;&gt;__AnonType0`2[&lt;c&gt;__T,&lt;p&gt;__T]">
+      <method name="&lt;c&gt;__T get_c()">
+        <size>7</size>
+      </method>
+      <method name="&lt;p&gt;__T get_p()">
+        <size>7</size>
+      </method>
+      <method name="Boolean Equals(System.Object)">
+        <size>69</size>
+      </method>
+      <method name="Int32 GetHashCode()">
+        <size>86</size>
+      </method>
+      <method name="System.String ToString()">
+        <size>142</size>
+      </method>
+      <method name="Void .ctor(&lt;c&gt;__T, &lt;p&gt;__T)">
+        <size>21</size>
+      </method>
+    </type>
+    <type name="&lt;&gt;__AnonType1`2[&lt;C&gt;__T,&lt;P&gt;__T]">
+      <method name="&lt;C&gt;__T get_C()">
+        <size>7</size>
+      </method>
+      <method name="&lt;P&gt;__T get_P()">
+        <size>7</size>
+      </method>
+      <method name="Boolean Equals(System.Object)">
+        <size>69</size>
+      </method>
+      <method name="Int32 GetHashCode()">
+        <size>86</size>
+      </method>
+      <method name="System.String ToString()">
+        <size>142</size>
+      </method>
+      <method name="Void .ctor(&lt;C&gt;__T, &lt;P&gt;__T)">
+        <size>21</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-named-01.cs">
     <type name="C">
       <method name="Int32 Test(Int32, Int32, System.String)">
         <size>80</size>
       </method>
       <method name="Void Main()">
-        <size>540</size>
+        <size>561</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>7</size>
       </method>
       <method name="Void ExtraTst()">
-        <size>12</size>
+        <size>10</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>99</size>
+        <size>101</size>
       </method>
     </type>
   </test>
         <size>33</size>
       </method>
       <method name="Int32 test5(Single ByRef, Int64)">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Int32 test6(Single ByRef)">
         <size>10</size>
         <size>15</size>
       </method>
       <method name="Void Bug2()">
-        <size>16</size>
+        <size>15</size>
       </method>
       <method name="Int32 Main()">
         <size>2</size>
         <size>7</size>
       </method>
       <method name="Int32 Main(System.String[])">
-        <size>140</size>
+        <size>136</size>
       </method>
     </type>
     <type name="MonoBUG.Foo">
       </method>
     </type>
   </test>
+  <test name="test-298.cs">
+    <type name="A">
+      <method name="Int32 op_Addition(Int16, A)">
+        <size>2</size>
+      </method>
+      <method name="Int32 op_UnaryNegation(A)">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="Int32 op_Addition(Int32, B)">
+        <size>2</size>
+      </method>
+      <method name="Int32 op_UnaryNegation(B)">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>47</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-299.cs">
     <type name="SampleClass">
       <method name="Void .ctor()">
     </type>
     <type name="A+B">
       <method name="Void .ctor()">
-        <size>500</size>
+        <size>499</size>
       </method>
     </type>
     <type name="A+B+C">
     </type>
     <type name="A+B">
       <method name="Void .ctor()">
-        <size>500</size>
+        <size>499</size>
       </method>
     </type>
     <type name="A+B+C">
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>140</size>
+        <size>138</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>278</size>
+        <size>276</size>
       </method>
     </type>
     <type name="X">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>288</size>
+        <size>268</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-424.cs">
-    <type name="XX">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void Metodo(System.Exception)">
-        <size>37</size>
-      </method>
-      <method name="IEnumerable X()">
-        <size>16</size>
-      </method>
-      <method name="Void Main()">
-        <size>65</size>
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>35</size>
       </method>
-    </type>
-    <type name="XX+&lt;X&gt;c__Iterator0">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>105</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
     </type>
   </test>
   <test name="test-425.cs">
         <size>34</size>
       </method>
       <method name="Int32 test_continue(System.Int32[])">
-        <size>57</size>
+        <size>54</size>
       </method>
       <method name="Boolean test_double(System.Double[])">
-        <size>61</size>
+        <size>58</size>
       </method>
       <method name="Int32 test_break(System.Int32[])">
-        <size>57</size>
+        <size>54</size>
       </method>
       <method name="Boolean test_multi(System.Int32[,])">
-        <size>84</size>
+        <size>87</size>
       </method>
       <method name="Int32 Main()">
         <size>284</size>
         <size>7</size>
       </method>
       <method name="Int32 dob(System.Int32[,])">
-        <size>80</size>
+        <size>83</size>
       </method>
       <method name="Int32 count(System.Object)">
         <size>39</size>
       </method>
     </type>
   </test>
-  <test name="test-467.cs">
-    <type name="ExceptionWithAnonMethod">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>96</size>
-      </method>
-      <method name="Void AnonHandler(ExceptionWithAnonMethod+EmptyCallback)">
-        <size>13</size>
-      </method>
-    </type>
-    <type name="ExceptionWithAnonMethod+EmptyCallback">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="Void Invoke()">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="Void EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="ExceptionWithAnonMethod+&lt;Main&gt;c__AnonStorey0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>33</size>
-      </method>
-    </type>
-  </test>
   <test name="test-468.cs">
     <type name="CorMetaDataDispenserExClass">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>59</size>
+        <size>55</size>
       </method>
       <method name="Void Test_1()">
         <size>1</size>
     </type>
   </test>
   <test name="test-480.cs">
-    <type name="Space">
-      <method name="Void .ctor()">
-        <size>14</size>
+    <type name="A">
+      <method name="Void Dispose()">
+        <size>1</size>
       </method>
-      <method name="Void Leak(Boolean, Int32)">
-        <size>85</size>
+      <method name="Void .ctor(Int32)">
+        <size>7</size>
       </method>
     </type>
-    <type name="Program">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="C">
+      <method name="Void Test(System.Object)">
+        <size>271</size>
       </method>
-      <method name="Void Main(System.String[])">
+      <method name="Int32 Main()">
+        <size>13</size>
+      </method>
+      <method name="Void &lt;Test&gt;m__0(Int32)">
         <size>1</size>
       </method>
-    </type>
-    <type name="Space+DoCopy">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
+      <method name="Void .ctor()">
+        <size>7</size>
       </method>
-      <method name="Void Invoke()">
+    </type>
+    <type name="C+D">
+      <method name="Void Invoke(Int32)">
         <size>0</size>
       </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+      <method name="IAsyncResult BeginInvoke(Int32, System.AsyncCallback, System.Object)">
         <size>0</size>
       </method>
       <method name="Void EndInvoke(IAsyncResult)">
         <size>0</size>
       </method>
-    </type>
-    <type name="Space+&lt;Leak&gt;c__AnonStorey0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>18</size>
-      </method>
-      <method name="Void &lt;&gt;m__1()">
-        <size>68</size>
-      </method>
-    </type>
-    <type name="Space+&lt;Leak&gt;c__AnonStorey1">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
         <size>2</size>
       </method>
       <method name="Void Main()">
-        <size>169</size>
+        <size>166</size>
       </method>
     </type>
     <type name="Q">
       </method>
     </type>
   </test>
-  <test name="test-496.cs">
-    <type name="Test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>15</size>
-      </method>
-      <method name="Void Main()">
-        <size>11</size>
-      </method>
-      <method name="Void Run()">
-        <size>180</size>
-      </method>
-    </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>129</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-    </type>
-  </test>
   <test name="test-497.cs">
     <type name="PlotMenuItem">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>117</size>
+        <size>115</size>
       </method>
     </type>
   </test>
         <size>6</size>
       </method>
       <method name="Int32 Main()">
-        <size>504</size>
+        <size>501</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Finalize()">
-        <size>23</size>
+        <size>36</size>
       </method>
       <method name="Int32 Test1()">
         <size>33</size>
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>93</size>
+        <size>89</size>
       </method>
       <method name="Constraint op_LogicalNot(Constraint)">
         <size>2</size>
     </type>
   </test>
   <test name="test-541.cs">
-    <type name="A">
-      <method name="Void .ctor(TestFunc)">
-        <size>14</size>
+    <type name="ClassMain">
+      <method name="Void Main()">
+        <size>31</size>
       </method>
-    </type>
-    <type name="TestClass">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void set_test(Boolean)">
+        <size>1</size>
       </method>
-      <method name="Void .cctor()">
-        <size>46</size>
+      <method name="Void &lt;Main&gt;m__0(Int32)">
+        <size>1</size>
       </method>
-      <method name="Int32 Main()">
-        <size>6</size>
+      <method name="Void .ctor()">
+        <size>7</size>
       </method>
     </type>
-    <type name="TestFunc">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
+    <type name="ClassMain+D">
       <method name="Void Invoke(Int32)">
         <size>0</size>
       </method>
       <method name="Void EndInvoke(IAsyncResult)">
         <size>0</size>
       </method>
-    </type>
-    <type name="TestClass">
-      <method name="Void &lt;a&gt;m__0(Int32)">
-        <size>7</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-579.cs">
-    <type name="X">
+    <type name="TestCase">
+      <method name="Int32 Main()">
+        <size>32</size>
+      </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>35</size>
-      </method>
-      <method name="Void DoCall(X+test)">
-        <size>1</size>
-      </method>
-    </type>
-    <type name="X+test">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="System.Object Invoke(System.Reflection.MethodInfo)">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.Reflection.MethodInfo, System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="System.Object EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="X">
-      <method name="System.Object &lt;Main&gt;m__0(System.Reflection.MethodInfo)">
-        <size>18</size>
-      </method>
     </type>
   </test>
   <test name="test-58.cs">
         <size>76</size>
       </method>
       <method name="System.String BuildNode_D()">
-        <size>157</size>
+        <size>156</size>
       </method>
       <method name="Void BuildNode_E(System.String[,] ByRef)">
         <size>68</size>
       </method>
     </type>
   </test>
-  <test name="test-629.cs">
-    <type name="Foo">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable foo()">
-        <size>16</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>67</size>
-      </method>
-    </type>
-    <type name="Foo+&lt;foo&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>39</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
-    </type>
-  </test>
   <test name="test-63.cs">
     <type name="X">
       <method name="Void .ctor()">
       </method>
     </type>
   </test>
-  <test name="test-645.cs">
-    <type name="Program">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable get_Empty()">
-        <size>16</size>
-      </method>
-      <method name="Void Main()">
-        <size>61</size>
-      </method>
-    </type>
-    <type name="Program+&lt;&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>158</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
-    </type>
-  </test>
   <test name="test-646.cs">
     <type name="Program">
       <method name="Void .ctor()">
         <size>51</size>
       </method>
       <method name="Void Foo()">
-        <size>145</size>
+        <size>148</size>
       </method>
     </type>
   </test>
         <size>23</size>
       </method>
       <method name="Void Main()">
-        <size>127</size>
+        <size>128</size>
       </method>
     </type>
   </test>
   <test name="test-729.cs">
     <type name="Primes.MainClass">
       <method name="Int32 Main()">
-        <size>141</size>
+        <size>136</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
   </test>
+  <test name="test-799.cs">
+    <type name="Test2">
+      <method name="Int32 Main()">
+        <size>13</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test2+Foo">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test2+Bar">
+      <method name="Void .ctor(Foo)">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-8.cs">
     <type name="X">
       <method name="Void .ctor()">
       </method>
     </type>
   </test>
+  <test name="test-800.cs">
+    <type name="C">
+      <method name="Void Main()">
+        <size>5</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-801.cs">
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>154</size>
+      </method>
+      <method name="E op_Implicit(C)">
+        <size>3</size>
+      </method>
+      <method name="Int32 op_Implicit(C)">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-81.cs">
     <type name="N1.A">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>259</size>
+        <size>256</size>
       </method>
       <method name="System.Collections.ArrayList Find(predicate, System.Collections.ArrayList)">
         <size>83</size>
     </type>
   </test>
   <test name="test-anon-31.cs">
-    <type name="test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable testen(Int32)">
-        <size>30</size>
+    <type name="X">
+      <method name="Void Main()">
+        <size>35</size>
       </method>
-    </type>
-    <type name="reflect">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void DoCall(X+test)">
+        <size>1</size>
       </method>
-      <method name="Void Main(System.String[])">
-        <size>122</size>
+      <method name="System.Object &lt;Main&gt;m__0(System.Reflection.MethodInfo)">
+        <size>18</size>
       </method>
-    </type>
-    <type name="test+&lt;testen&gt;c__Iterator0">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>195</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+    </type>
+    <type name="X+test">
+      <method name="System.Object Invoke(System.Reflection.MethodInfo)">
+        <size>0</size>
       </method>
-      <method name="Void Reset()">
-        <size>6</size>
+      <method name="IAsyncResult BeginInvoke(System.Reflection.MethodInfo, System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
+      <method name="System.Object EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>40</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-anon-35.cs">
-    <type name="CustomDict">
-      <method name="Void .ctor()">
-        <size>68</size>
+    <type name="ExceptionWithAnonMethod">
+      <method name="Int32 Main()">
+        <size>96</size>
       </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>15</size>
+      <method name="Void AnonHandler(ExceptionWithAnonMethod+EmptyCallback)">
+        <size>13</size>
       </method>
-    </type>
-    <type name="Tests">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>7</size>
-      </method>
     </type>
-    <type name="CustomDict+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="ExceptionWithAnonMethod+EmptyCallback">
+      <method name="Void Invoke()">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>86</size>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
-      <method name="Void Reset()">
-        <size>6</size>
+    </type>
+    <type name="ExceptionWithAnonMethod+&lt;Main&gt;c__AnonStorey0">
+      <method name="Void &lt;&gt;m__0()">
+        <size>33</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
     </type>
   </test>
   <test name="test-anon-45.cs">
-    <type name="Test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void Main()">
-        <size>66</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>8</size>
+    <type name="TestFunc">
+      <method name="Void Invoke(Int32)">
+        <size>0</size>
       </method>
-    </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="IAsyncResult BeginInvoke(Int32, System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>77</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+    </type>
+    <type name="A">
+      <method name="Void .ctor(TestFunc)">
+        <size>14</size>
       </method>
-      <method name="Void Reset()">
+    </type>
+    <type name="TestClass">
+      <method name="Int32 Main()">
         <size>6</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void &lt;a&gt;m__0(Int32)">
         <size>7</size>
       </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+      <method name="Void .cctor()">
+        <size>46</size>
+      </method>
     </type>
   </test>
   <test name="test-anon-46.cs">
         <size>1</size>
       </method>
       <method name="Void Test(Int32)">
-        <size>158</size>
+        <size>153</size>
       </method>
     </type>
     <type name="X">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>197</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
+        <size>76</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>201</size>
+        <size>199</size>
       </method>
       <method name="Void &lt;&gt;m__0()">
         <size>22</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>344</size>
+        <size>342</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>515</size>
+        <size>512</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>567</size>
+        <size>564</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>195</size>
+        <size>193</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>44</size>
         <size>12</size>
       </method>
       <method name="Void Test()">
-        <size>102</size>
+        <size>97</size>
       </method>
     </type>
     <type name="C+D">
         <size>7</size>
       </method>
       <method name="Void &lt;&gt;m__0()">
-        <size>109</size>
+        <size>108</size>
       </method>
     </type>
     <type name="C+&lt;Test&gt;c__AnonStorey0+&lt;Test&gt;c__AnonStorey1">
         <size>3</size>
       </method>
       <method name="Program+D Get(Int32)">
-        <size>115</size>
+        <size>128</size>
       </method>
       <method name="Int32 Run(Int32)">
         <size>12</size>
       </method>
     </type>
     <type name="Program+&lt;Get&gt;c__AnonStorey0">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Program+&lt;Get&gt;c__AnonStorey1">
       <method name="Int32 &lt;&gt;m__0()">
-        <size>19</size>
+        <size>24</size>
       </method>
       <method name="Int32 &lt;&gt;m__1()">
-        <size>19</size>
+        <size>24</size>
       </method>
       <method name="Int32 &lt;&gt;m__2()">
+        <size>19</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-anon-97.cs">
+    <type name="Space">
+      <method name="Void Leak(Boolean, Int32)">
+        <size>85</size>
+      </method>
+      <method name="Void .ctor()">
         <size>14</size>
       </method>
+    </type>
+    <type name="Space+DoCopy">
+      <method name="Void Invoke()">
+        <size>0</size>
+      </method>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
+      </method>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="Program">
+      <method name="Void Main(System.String[])">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Space+&lt;Leak&gt;c__AnonStorey1">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Space+&lt;Leak&gt;c__AnonStorey0">
+      <method name="Void &lt;&gt;m__0()">
+        <size>18</size>
+      </method>
+      <method name="Void &lt;&gt;m__1()">
+        <size>68</size>
+      </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
         <size>16</size>
       </method>
       <method name="Int32 Main()">
-        <size>173</size>
+        <size>172</size>
       </method>
     </type>
     <type name="X+&lt;GetIt&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>173</size>
+        <size>171</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>248</size>
+        <size>247</size>
       </method>
     </type>
     <type name="&lt;PrivateImplementationDetails&gt;">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>151</size>
+        <size>149</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>238</size>
+        <size>236</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>123</size>
+        <size>121</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>183</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>407</size>
+        <size>403</size>
       </method>
     </type>
     <type name="S+&lt;Get&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>183</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>131</size>
+        <size>129</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>374</size>
+        <size>373</size>
       </method>
     </type>
     <type name="Test+&lt;Foo&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>360</size>
+        <size>358</size>
       </method>
       <method name="Void Dispose()">
         <size>102</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>270</size>
+        <size>268</size>
       </method>
     </type>
     <type name="Tester+&lt;GetEnumerator&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>625</size>
+        <size>635</size>
       </method>
       <method name="Void Dispose()">
-        <size>84</size>
+        <size>96</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>186</size>
+        <size>184</size>
       </method>
     </type>
     <type name="X+&lt;&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>145</size>
+        <size>143</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>124</size>
+        <size>122</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>165</size>
+        <size>163</size>
       </method>
       <method name="Void Dispose()">
         <size>55</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>27</size>
+        <size>25</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
     </type>
   </test>
+  <test name="test-iter-14.cs">
+    <type name="XX">
+      <method name="Void Metodo(System.Exception)">
+        <size>37</size>
+      </method>
+      <method name="IEnumerable X()">
+        <size>16</size>
+      </method>
+      <method name="Void Main()">
+        <size>65</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="XX+&lt;X&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>103</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-15.cs">
+    <type name="Test">
+      <method name="IEnumerator GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void Main()">
+        <size>11</size>
+      </method>
+      <method name="Void Run()">
+        <size>177</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>127</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-16.cs">
+    <type name="Foo">
+      <method name="IEnumerable foo()">
+        <size>16</size>
+      </method>
+      <method name="Int32 Main()">
+        <size>67</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Foo+&lt;foo&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>37</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-17.cs">
+    <type name="Program">
+      <method name="IEnumerable get_Empty()">
+        <size>16</size>
+      </method>
+      <method name="Void Main()">
+        <size>61</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Program+&lt;&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>156</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-18.cs">
+    <type name="test">
+      <method name="IEnumerable testen(Int32)">
+        <size>30</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="reflect">
+      <method name="Void Main(System.String[])">
+        <size>119</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="test+&lt;testen&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>40</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>193</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-19.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>66</size>
+      </method>
+      <method name="IEnumerator GetEnumerator()">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>75</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-20.cs">
+    <type name="CustomDict">
+      <method name="IEnumerator GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>68</size>
+      </method>
+    </type>
+    <type name="Tests">
+      <method name="Void Main()">
+        <size>7</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="CustomDict+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>84</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-21.cs">
+    <type name="X">
+      <method name="IEnumerable GetIt(System.Int32[])">
+        <size>30</size>
+      </method>
+      <method name="Int32 Main()">
+        <size>119</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="X+A">
+      <method name="Void Invoke()">
+        <size>0</size>
+      </method>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
+      </method>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="X+&lt;GetIt&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>40</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>199</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void &lt;&gt;m__0()">
+        <size>22</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="&lt;PrivateImplementationDetails&gt;">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-22.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>66</size>
+      </method>
+      <method name="IEnumerator GetEnumerator()">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>197</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>76</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-named-01.cs">
     <type name="A">
       <method name="Void .ctor()">
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>279</size>
+        <size>274</size>
       </method>
     </type>
   </test>
         <size>40</size>
       </method>
       <method name="Int32 Main()">
-        <size>239</size>
+        <size>242</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
index d5568e845f49653df3430b77e4ab47d628ec1f96..66641e221604b09986a34f4e709f4a80fea189d3 100644 (file)
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>203</size>
+        <size>204</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>107</size>
+        <size>105</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>208</size>
+        <size>209</size>
       </method>
       <method name="Void TestPairLog()">
-        <size>182</size>
+        <size>184</size>
       </method>
     </type>
     <type name="Pair`2[T,U]">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>66</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>8</size>
-      </method>
     </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="S">
+      <method name="Void System.IDisposable.Dispose()">
+        <size>13</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="Void Dispose()">
+        <size>6</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>187</size>
+    </type>
+    <type name="C">
+      <method name="Void System.IDisposable.Dispose()">
+        <size>1</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
-      </method>
-      <method name="Void Reset()">
         <size>6</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>209</size>
+      </method>
+      <method name="Void GenMethod[T](T)">
+        <size>33</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-079.cs">
     <type name="A.ArrayList`1[T]">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>14</size>
       </method>
       <method name="Void Insert(Int32, T)">
-        <size>256</size>
+        <size>255</size>
       </method>
       <method name="Void RemoveAt(Int32)">
         <size>113</size>
         <size>7</size>
       </method>
       <method name="LinkedList`1[T] op_Addition(LinkedList`1[T], LinkedList`1[T])">
-        <size>123</size>
+        <size>120</size>
       </method>
     </type>
     <type name="LinkedList`1+Node[T]">
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>201</size>
+        <size>197</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>120</size>
+        <size>119</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>846</size>
+        <size>847</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>1330</size>
+        <size>1332</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Main(System.String[])">
-        <size>112</size>
+        <size>113</size>
       </method>
     </type>
     <type name="Foo`1[T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>134</size>
+        <size>136</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>1599</size>
+        <size>1605</size>
       </method>
     </type>
   </test>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>91</size>
+        <size>89</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
     </type>
   </test>
-  <test name="gtest-165.cs">
-    <type name="X">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable GetIt(System.Int32[])">
-        <size>30</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>119</size>
-      </method>
-    </type>
-    <type name="X+A">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="Void Invoke()">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="Void EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="X+&lt;GetIt&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>201</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>22</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>40</size>
-      </method>
-    </type>
-    <type name="&lt;PrivateImplementationDetails&gt;">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-    </type>
-  </test>
   <test name="gtest-166.cs">
     <type name="C">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Test()">
-        <size>324</size>
+        <size>323</size>
       </method>
       <method name="Int32 Main()">
         <size>6</size>
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>186</size>
+        <size>184</size>
       </method>
     </type>
     <type name="X+&lt;&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>145</size>
+        <size>143</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>84</size>
+        <size>82</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>70</size>
+        <size>68</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>82</size>
+        <size>80</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>82</size>
+        <size>80</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>207</size>
+        <size>205</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>118</size>
+        <size>116</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>11</size>
       </method>
       <method name="Void Run()">
-        <size>151</size>
+        <size>147</size>
       </method>
     </type>
     <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>129</size>
+        <size>127</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>1</size>
       </method>
       <method name="Void Main()">
-        <size>163</size>
+        <size>162</size>
       </method>
       <method name="Void f6(ParamEnum)">
         <size>1</size>
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>80</size>
+        <size>78</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>106</size>
       </method>
       <method name="Int32 Test(System.Type, System.Type[])">
-        <size>400</size>
+        <size>391</size>
       </method>
       <method name="Int32 Test()">
         <size>532</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>106</size>
+        <size>104</size>
       </method>
       <method name="Void Dispose()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>220</size>
+        <size>222</size>
       </method>
     </type>
     <type name="MyType">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>168</size>
+        <size>169</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>234</size>
+        <size>235</size>
       </method>
     </type>
   </test>
         <size>21</size>
       </method>
     </type>
+    <type name="A`1[T]">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="ConditionalParsing">
+      <method name="Void Test_11()">
+        <size>7</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-410.cs">
     <type name="Program">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>173</size>
+        <size>174</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>258</size>
+        <size>261</size>
       </method>
     </type>
   </test>
   <test name="gtest-514.cs">
     <type name="test2.Test`3[T,U,V]">
       <method name="Void Method()">
-        <size>128</size>
+        <size>127</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
   </test>
+  <test name="gtest-536.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+Expression`1[TDelegate]">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+Expression">
+      <method name="Void Test()">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="gtest-538.cs">
+    <type name="S">
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>6</size>
+      </method>
+      <method name="IEnumerator`1 GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void .ctor(Int32)">
+        <size>1</size>
+      </method>
+    </type>
+    <type name="S2">
+      <method name="IEnumerator`1 GetEnumerator()">
+        <size>15</size>
+      </method>
+    </type>
+    <type name="Enumerator`1[T]">
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>6</size>
+      </method>
+      <method name="T get_Current()">
+        <size>6</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>2</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>13</size>
+      </method>
+    </type>
+    <type name="MySystem">
+      <method name="Int32 Main()">
+        <size>182</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="gtest-539.cs">
+    <type name="S">
+      <method name="Int32 get_ID()">
+        <size>7</size>
+      </method>
+      <method name="Void set_ID(Int32)">
+        <size>8</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="C op_Explicit(S)">
+        <size>11</size>
+      </method>
+      <method name="C op_Explicit(Nullable`1)">
+        <size>39</size>
+      </method>
+      <method name="Void .ctor(Int32)">
+        <size>14</size>
+      </method>
+    </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>79</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-anon-1.cs">
     <type name="X">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>110</size>
+        <size>108</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>26</size>
       </method>
       <method name="Int32 Main()">
-        <size>572</size>
+        <size>570</size>
       </method>
     </type>
     <type name="Test+&lt;For&gt;c__AnonStorey0`1[T]">
         <size>33</size>
       </method>
       <method name="System.String Implode[TSource](IEnumerable`1, System.String, System.Action`2[System.Text.StringBuilder,TSource])">
-        <size>128</size>
+        <size>125</size>
       </method>
     </type>
     <type name="Test">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>98</size>
+        <size>96</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Void Invoke(SomeGenericClass`1+SomeHandlerType[SomeType])">
-        <size>1</size>
+        <size>7</size>
       </method>
       <method name="Void FailsToCompile()">
         <size>19</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>180</size>
+        <size>178</size>
       </method>
       <method name="Void Dispose()">
         <size>66</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>65</size>
+        <size>63</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>98</size>
+        <size>96</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>83</size>
       </method>
       <method name="Int32 Main()">
-        <size>534</size>
+        <size>528</size>
       </method>
     </type>
     <type name="Test+Wrap">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>300</size>
+        <size>298</size>
       </method>
       <method name="System.Int64[] GetValues()">
         <size>18</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>108</size>
+        <size>106</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>295</size>
+        <size>293</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
   <test name="gtest-etree-20.cs">
     <type name="S">
       <method name="Int32 Main()">
-        <size>215</size>
+        <size>216</size>
       </method>
     </type>
     <type name="A">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>1243</size>
+        <size>1234</size>
       </method>
     </type>
     <type name="Test+Point">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>196</size>
+        <size>194</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>219</size>
+        <size>217</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>185</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>184</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>185</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>84</size>
+        <size>82</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>130</size>
+        <size>128</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>103</size>
+        <size>101</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>150</size>
+        <size>143</size>
       </method>
     </type>
     <type name="Collection`1+&lt;GetEnumerator&gt;c__Iterator0[T]">
         <size>12</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>176</size>
+        <size>174</size>
       </method>
       <method name="Void Dispose()">
         <size>57</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>117</size>
+        <size>115</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>52</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>205</size>
+        <size>215</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
+        <size>76</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>23</size>
       </method>
       <method name="Int32 Main()">
-        <size>133</size>
+        <size>135</size>
       </method>
       <method name="Int32 &lt;get_BaseM&gt;__BaseCallProxy0()">
         <size>7</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>86</size>
+        <size>84</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>40</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>181</size>
+        <size>179</size>
       </method>
       <method name="Void Dispose()">
         <size>62</size>
         <size>32</size>
       </method>
       <method name="TR Sum[TA,TR](IEnumerable`1, System.Func`3[TR,TA,TR])">
-        <size>122</size>
+        <size>123</size>
       </method>
     </type>
     <type name="Repro">
       </method>
     </type>
   </test>
+  <test name="gtest-lambda-26.cs">
+    <type name="C">
+      <method name="Void Main()">
+        <size>35</size>
+      </method>
+      <method name="Void Execute(System.Action)">
+        <size>1</size>
+      </method>
+      <method name="Void &lt;Main&gt;m__0()">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-linq-01.cs">
     <type name="from.C">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Void Main()">
-        <size>2205</size>
+        <size>2180</size>
       </method>
       <method name="Void Foo(Int32, Boolean)">
         <size>11</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>509</size>
+        <size>507</size>
       </method>
       <method name="Int32 &lt;Main&gt;m__0(Int32)">
         <size>2</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>561</size>
+        <size>559</size>
       </method>
     </type>
     <type name="&lt;PrivateImplementationDetails&gt;">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>410</size>
+        <size>408</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;i&gt;__T,&lt;u&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>754</size>
+        <size>748</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;i1&gt;__T,&lt;i2&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>912</size>
+        <size>911</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`1[&lt;Result&gt;__T]">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>729</size>
+        <size>734</size>
       </method>
     </type>
     <type name="&lt;&gt;__AnonType0`2[&lt;a&gt;__T,&lt;ab&gt;__T]">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>86</size>
+        <size>84</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>159</size>
+        <size>157</size>
       </method>
       <method name="Int32 &lt;Main&gt;m__0(Int32)">
         <size>2</size>
     </type>
     <type name="OrderByBugExample.Program">
       <method name="Int32 Main()">
-        <size>351</size>
+        <size>345</size>
       </method>
       <method name="System.String &lt;Main&gt;m__0(OrderByBugExample.Foo)">
         <size>7</size>
       </method>
     </type>
   </test>
+  <test name="gtest-linq-25.cs">
+    <type name="A">
+      <method name="System.String get_Header()">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="System.String get_Name()">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>36</size>
+      </method>
+      <method name="Void Test(System.Action)">
+        <size>7</size>
+      </method>
+      <method name="Void &lt;Main&gt;m__0()">
+        <size>159</size>
+      </method>
+      <method name="IEnumerable`1 &lt;Main&gt;m__1(A)">
+        <size>7</size>
+      </method>
+      <method name="&lt;&gt;__AnonType0`2[A,B] &lt;Main&gt;m__2(A, B)">
+        <size>8</size>
+      </method>
+      <method name="Boolean &lt;Main&gt;m__3(&lt;&gt;__AnonType0`2[A,B])">
+        <size>67</size>
+      </method>
+      <method name="&lt;&gt;__AnonType1`2[A,B] &lt;Main&gt;m__4(&lt;&gt;__AnonType0`2[A,B])">
+        <size>18</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="&lt;&gt;__AnonType0`2[&lt;c&gt;__T,&lt;p&gt;__T]">
+      <method name="&lt;c&gt;__T get_c()">
+        <size>7</size>
+      </method>
+      <method name="&lt;p&gt;__T get_p()">
+        <size>7</size>
+      </method>
+      <method name="Boolean Equals(System.Object)">
+        <size>69</size>
+      </method>
+      <method name="Int32 GetHashCode()">
+        <size>86</size>
+      </method>
+      <method name="System.String ToString()">
+        <size>142</size>
+      </method>
+      <method name="Void .ctor(&lt;c&gt;__T, &lt;p&gt;__T)">
+        <size>21</size>
+      </method>
+    </type>
+    <type name="&lt;&gt;__AnonType1`2[&lt;C&gt;__T,&lt;P&gt;__T]">
+      <method name="&lt;C&gt;__T get_C()">
+        <size>7</size>
+      </method>
+      <method name="&lt;P&gt;__T get_P()">
+        <size>7</size>
+      </method>
+      <method name="Boolean Equals(System.Object)">
+        <size>69</size>
+      </method>
+      <method name="Int32 GetHashCode()">
+        <size>86</size>
+      </method>
+      <method name="System.String ToString()">
+        <size>142</size>
+      </method>
+      <method name="Void .ctor(&lt;C&gt;__T, &lt;P&gt;__T)">
+        <size>21</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-named-01.cs">
     <type name="C">
       <method name="Int32 Test(Int32, Int32, System.String)">
         <size>7</size>
       </method>
       <method name="Void ExtraTst()">
-        <size>12</size>
+        <size>10</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>99</size>
+        <size>101</size>
       </method>
     </type>
   </test>
         <size>33</size>
       </method>
       <method name="Int32 test5(Single ByRef, Int64)">
-        <size>75</size>
+        <size>73</size>
       </method>
       <method name="Int32 test6(Single ByRef)">
         <size>10</size>
         <size>15</size>
       </method>
       <method name="Void Bug2()">
-        <size>16</size>
+        <size>15</size>
       </method>
       <method name="Int32 Main()">
         <size>2</size>
         <size>7</size>
       </method>
       <method name="Int32 Main(System.String[])">
-        <size>140</size>
+        <size>136</size>
       </method>
     </type>
     <type name="MonoBUG.Foo">
       </method>
     </type>
   </test>
+  <test name="test-298.cs">
+    <type name="A">
+      <method name="Int32 op_Addition(Int16, A)">
+        <size>2</size>
+      </method>
+      <method name="Int32 op_UnaryNegation(A)">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="Int32 op_Addition(Int32, B)">
+        <size>2</size>
+      </method>
+      <method name="Int32 op_UnaryNegation(B)">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test">
+      <method name="Int32 Main()">
+        <size>47</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-299.cs">
     <type name="SampleClass">
       <method name="Void .ctor()">
     </type>
     <type name="A+B">
       <method name="Void .ctor()">
-        <size>475</size>
+        <size>474</size>
       </method>
     </type>
     <type name="A+B+C">
     </type>
     <type name="A+B">
       <method name="Void .ctor()">
-        <size>475</size>
+        <size>474</size>
       </method>
     </type>
     <type name="A+B+C">
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>134</size>
+        <size>132</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>278</size>
+        <size>276</size>
       </method>
     </type>
     <type name="X">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>288</size>
+        <size>268</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-424.cs">
-    <type name="XX">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void Metodo(System.Exception)">
-        <size>37</size>
-      </method>
-      <method name="IEnumerable X()">
-        <size>16</size>
-      </method>
-      <method name="Void Main()">
-        <size>65</size>
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>35</size>
       </method>
-    </type>
-    <type name="XX+&lt;X&gt;c__Iterator0">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>105</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
     </type>
   </test>
   <test name="test-425.cs">
         <size>34</size>
       </method>
       <method name="Int32 test_continue(System.Int32[])">
-        <size>57</size>
+        <size>54</size>
       </method>
       <method name="Boolean test_double(System.Double[])">
-        <size>61</size>
+        <size>58</size>
       </method>
       <method name="Int32 test_break(System.Int32[])">
-        <size>57</size>
+        <size>54</size>
       </method>
       <method name="Boolean test_multi(System.Int32[,])">
-        <size>84</size>
+        <size>87</size>
       </method>
       <method name="Int32 Main()">
         <size>284</size>
         <size>7</size>
       </method>
       <method name="Int32 dob(System.Int32[,])">
-        <size>80</size>
+        <size>83</size>
       </method>
       <method name="Int32 count(System.Object)">
         <size>39</size>
       </method>
     </type>
   </test>
-  <test name="test-467.cs">
-    <type name="ExceptionWithAnonMethod">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>96</size>
-      </method>
-      <method name="Void AnonHandler(ExceptionWithAnonMethod+EmptyCallback)">
-        <size>13</size>
-      </method>
-    </type>
-    <type name="ExceptionWithAnonMethod+EmptyCallback">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="Void Invoke()">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="Void EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="ExceptionWithAnonMethod+&lt;Main&gt;c__AnonStorey0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>33</size>
-      </method>
-    </type>
-  </test>
   <test name="test-468.cs">
     <type name="CorMetaDataDispenserExClass">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>59</size>
+        <size>55</size>
       </method>
       <method name="Void Test_1()">
         <size>1</size>
     </type>
   </test>
   <test name="test-480.cs">
-    <type name="Space">
-      <method name="Void .ctor()">
-        <size>14</size>
+    <type name="A">
+      <method name="Void Dispose()">
+        <size>1</size>
       </method>
-      <method name="Void Leak(Boolean, Int32)">
-        <size>85</size>
+      <method name="Void .ctor(Int32)">
+        <size>7</size>
       </method>
     </type>
-    <type name="Program">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="C">
+      <method name="Void Test(System.Object)">
+        <size>271</size>
       </method>
-      <method name="Void Main(System.String[])">
+      <method name="Int32 Main()">
+        <size>13</size>
+      </method>
+      <method name="Void &lt;Test&gt;m__0(Int32)">
         <size>1</size>
       </method>
-    </type>
-    <type name="Space+DoCopy">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
+      <method name="Void .ctor()">
+        <size>7</size>
       </method>
-      <method name="Void Invoke()">
+    </type>
+    <type name="C+D">
+      <method name="Void Invoke(Int32)">
         <size>0</size>
       </method>
-      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+      <method name="IAsyncResult BeginInvoke(Int32, System.AsyncCallback, System.Object)">
         <size>0</size>
       </method>
       <method name="Void EndInvoke(IAsyncResult)">
         <size>0</size>
       </method>
-    </type>
-    <type name="Space+&lt;Leak&gt;c__AnonStorey0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void &lt;&gt;m__0()">
-        <size>18</size>
-      </method>
-      <method name="Void &lt;&gt;m__1()">
-        <size>68</size>
-      </method>
-    </type>
-    <type name="Space+&lt;Leak&gt;c__AnonStorey1">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
         <size>2</size>
       </method>
       <method name="Void Main()">
-        <size>169</size>
+        <size>166</size>
       </method>
     </type>
     <type name="Q">
       </method>
     </type>
   </test>
-  <test name="test-496.cs">
-    <type name="Test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>15</size>
-      </method>
-      <method name="Void Main()">
-        <size>11</size>
-      </method>
-      <method name="Void Run()">
-        <size>180</size>
-      </method>
-    </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>129</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-    </type>
-  </test>
   <test name="test-497.cs">
     <type name="PlotMenuItem">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>117</size>
+        <size>115</size>
       </method>
     </type>
   </test>
         <size>6</size>
       </method>
       <method name="Int32 Main()">
-        <size>504</size>
+        <size>501</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Void Finalize()">
-        <size>23</size>
+        <size>36</size>
       </method>
       <method name="Int32 Test1()">
         <size>33</size>
   </test>
   <test name="test-53.cs">
     <type name="MyDispose">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
-    </type>
-    <type name="X">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
+    </type>
+    <type name="X">
       <method name="Int32 Main()">
         <size>257</size>
       </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
     </type>
   </test>
   <test name="test-530.cs">
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>93</size>
+        <size>89</size>
       </method>
       <method name="Constraint op_LogicalNot(Constraint)">
         <size>2</size>
     </type>
   </test>
   <test name="test-541.cs">
-    <type name="A">
-      <method name="Void .ctor(TestFunc)">
-        <size>14</size>
+    <type name="ClassMain">
+      <method name="Void Main()">
+        <size>31</size>
       </method>
-    </type>
-    <type name="TestClass">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void set_test(Boolean)">
+        <size>1</size>
       </method>
-      <method name="Void .cctor()">
-        <size>46</size>
+      <method name="Void &lt;Main&gt;m__0(Int32)">
+        <size>1</size>
       </method>
-      <method name="Int32 Main()">
-        <size>6</size>
+      <method name="Void .ctor()">
+        <size>7</size>
       </method>
     </type>
-    <type name="TestFunc">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
+    <type name="ClassMain+D">
       <method name="Void Invoke(Int32)">
         <size>0</size>
       </method>
       <method name="Void EndInvoke(IAsyncResult)">
         <size>0</size>
       </method>
-    </type>
-    <type name="TestClass">
-      <method name="Void &lt;a&gt;m__0(Int32)">
-        <size>7</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-579.cs">
-    <type name="X">
+    <type name="TestCase">
+      <method name="Int32 Main()">
+        <size>32</size>
+      </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>35</size>
-      </method>
-      <method name="Void DoCall(X+test)">
-        <size>1</size>
-      </method>
-    </type>
-    <type name="X+test">
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-      <method name="System.Object Invoke(System.Reflection.MethodInfo)">
-        <size>0</size>
-      </method>
-      <method name="IAsyncResult BeginInvoke(System.Reflection.MethodInfo, System.AsyncCallback, System.Object)">
-        <size>0</size>
-      </method>
-      <method name="System.Object EndInvoke(IAsyncResult)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="X">
-      <method name="System.Object &lt;Main&gt;m__0(System.Reflection.MethodInfo)">
-        <size>18</size>
-      </method>
     </type>
   </test>
   <test name="test-58.cs">
         <size>76</size>
       </method>
       <method name="System.String BuildNode_D()">
-        <size>157</size>
+        <size>156</size>
       </method>
       <method name="Void BuildNode_E(System.String[,] ByRef)">
         <size>68</size>
       </method>
     </type>
   </test>
-  <test name="test-629.cs">
-    <type name="Foo">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable foo()">
-        <size>16</size>
-      </method>
-      <method name="Int32 Main()">
-        <size>67</size>
-      </method>
-    </type>
-    <type name="Foo+&lt;foo&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>39</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
-    </type>
-  </test>
   <test name="test-63.cs">
     <type name="X">
       <method name="Void .ctor()">
       </method>
     </type>
   </test>
-  <test name="test-645.cs">
-    <type name="Program">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable get_Empty()">
-        <size>16</size>
-      </method>
-      <method name="Void Main()">
-        <size>61</size>
-      </method>
-    </type>
-    <type name="Program+&lt;&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>158</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
-      </method>
-      <method name="Void Reset()">
-        <size>6</size>
-      </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>26</size>
-      </method>
-    </type>
-  </test>
   <test name="test-646.cs">
     <type name="Program">
       <method name="Void .ctor()">
         <size>51</size>
       </method>
       <method name="Void Foo()">
-        <size>145</size>
+        <size>148</size>
       </method>
     </type>
   </test>
         <size>23</size>
       </method>
       <method name="Void Main()">
-        <size>127</size>
+        <size>128</size>
       </method>
     </type>
   </test>
   <test name="test-729.cs">
     <type name="Primes.MainClass">
       <method name="Int32 Main()">
-        <size>141</size>
+        <size>136</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
   <test name="test-800.cs">
     <type name="C">
       <method name="Void Main()">
+        <size>5</size>
+      </method>
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
+    </type>
+  </test>
+  <test name="test-801.cs">
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>154</size>
+      </method>
+      <method name="E op_Implicit(C)">
+        <size>3</size>
+      </method>
+      <method name="Int32 op_Implicit(C)">
+        <size>2</size>
+      </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>259</size>
+        <size>256</size>
       </method>
       <method name="System.Collections.ArrayList Find(predicate, System.Collections.ArrayList)">
         <size>83</size>
     </type>
   </test>
   <test name="test-anon-31.cs">
-    <type name="test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerable testen(Int32)">
-        <size>30</size>
+    <type name="X">
+      <method name="Void Main()">
+        <size>35</size>
       </method>
-    </type>
-    <type name="reflect">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="Void DoCall(X+test)">
+        <size>1</size>
       </method>
-      <method name="Void Main(System.String[])">
-        <size>122</size>
+      <method name="System.Object &lt;Main&gt;m__0(System.Reflection.MethodInfo)">
+        <size>18</size>
       </method>
-    </type>
-    <type name="test+&lt;testen&gt;c__Iterator0">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
-      </method>
-      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
-        <size>7</size>
-      </method>
-      <method name="Boolean MoveNext()">
-        <size>195</size>
-      </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+    </type>
+    <type name="X+test">
+      <method name="System.Object Invoke(System.Reflection.MethodInfo)">
+        <size>0</size>
       </method>
-      <method name="Void Reset()">
-        <size>6</size>
+      <method name="IAsyncResult BeginInvoke(System.Reflection.MethodInfo, System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
-        <size>7</size>
+      <method name="System.Object EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>40</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
     </type>
   </test>
     </type>
   </test>
   <test name="test-anon-35.cs">
-    <type name="CustomDict">
-      <method name="Void .ctor()">
-        <size>68</size>
+    <type name="ExceptionWithAnonMethod">
+      <method name="Int32 Main()">
+        <size>96</size>
       </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>15</size>
+      <method name="Void AnonHandler(ExceptionWithAnonMethod+EmptyCallback)">
+        <size>13</size>
       </method>
-    </type>
-    <type name="Tests">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void Main()">
-        <size>7</size>
-      </method>
     </type>
-    <type name="CustomDict+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+    <type name="ExceptionWithAnonMethod+EmptyCallback">
+      <method name="Void Invoke()">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>86</size>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
-      <method name="Void Reset()">
-        <size>6</size>
+    </type>
+    <type name="ExceptionWithAnonMethod+&lt;Main&gt;c__AnonStorey0">
+      <method name="Void &lt;&gt;m__0()">
+        <size>33</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
     </type>
   </test>
   <test name="test-anon-45.cs">
-    <type name="Test">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
-      <method name="Void Main()">
-        <size>66</size>
-      </method>
-      <method name="IEnumerator GetEnumerator()">
-        <size>8</size>
+    <type name="TestFunc">
+      <method name="Void Invoke(Int32)">
+        <size>0</size>
       </method>
-    </type>
-    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
-      <method name="Void .ctor()">
-        <size>7</size>
+      <method name="IAsyncResult BeginInvoke(Int32, System.AsyncCallback, System.Object)">
+        <size>0</size>
       </method>
-      <method name="System.Object System.Collections.IEnumerator.get_Current()">
-        <size>7</size>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
       </method>
-      <method name="Boolean MoveNext()">
-        <size>77</size>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
       </method>
-      <method name="Void Dispose()">
-        <size>8</size>
+    </type>
+    <type name="A">
+      <method name="Void .ctor(TestFunc)">
+        <size>14</size>
       </method>
-      <method name="Void Reset()">
+    </type>
+    <type name="TestClass">
+      <method name="Int32 Main()">
         <size>6</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void &lt;a&gt;m__0(Int32)">
+        <size>7</size>
+      </method>
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
+      <method name="Void .cctor()">
+        <size>46</size>
+      </method>
     </type>
   </test>
   <test name="test-anon-46.cs">
         <size>1</size>
       </method>
       <method name="Void Test(Int32)">
-        <size>158</size>
+        <size>153</size>
       </method>
     </type>
     <type name="X">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>187</size>
+        <size>197</size>
       </method>
       <method name="Void Dispose()">
-        <size>64</size>
+        <size>76</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>201</size>
+        <size>199</size>
       </method>
       <method name="Void &lt;&gt;m__0()">
         <size>22</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>344</size>
+        <size>342</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>515</size>
+        <size>512</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Int32 Test(Int32)">
-        <size>567</size>
+        <size>564</size>
       </method>
       <method name="Int32 Main()">
         <size>46</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>195</size>
+        <size>193</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>44</size>
         <size>12</size>
       </method>
       <method name="Void Test()">
-        <size>102</size>
+        <size>97</size>
       </method>
     </type>
     <type name="C+D">
         <size>7</size>
       </method>
       <method name="Void &lt;&gt;m__0()">
-        <size>109</size>
+        <size>108</size>
       </method>
     </type>
     <type name="C+&lt;Test&gt;c__AnonStorey0+&lt;Test&gt;c__AnonStorey1">
         <size>3</size>
       </method>
       <method name="Program+D Get(Int32)">
-        <size>115</size>
+        <size>128</size>
       </method>
       <method name="Int32 Run(Int32)">
         <size>12</size>
       </method>
     </type>
     <type name="Program+&lt;Get&gt;c__AnonStorey0">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Program+&lt;Get&gt;c__AnonStorey1">
       <method name="Int32 &lt;&gt;m__0()">
-        <size>19</size>
+        <size>24</size>
       </method>
       <method name="Int32 &lt;&gt;m__1()">
-        <size>19</size>
+        <size>24</size>
       </method>
       <method name="Int32 &lt;&gt;m__2()">
+        <size>19</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-anon-97.cs">
+    <type name="Space">
+      <method name="Void Leak(Boolean, Int32)">
+        <size>85</size>
+      </method>
+      <method name="Void .ctor()">
         <size>14</size>
       </method>
+    </type>
+    <type name="Space+DoCopy">
+      <method name="Void Invoke()">
+        <size>0</size>
+      </method>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
+      </method>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="Program">
+      <method name="Void Main(System.String[])">
+        <size>1</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Space+&lt;Leak&gt;c__AnonStorey1">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Space+&lt;Leak&gt;c__AnonStorey0">
+      <method name="Void &lt;&gt;m__0()">
+        <size>18</size>
+      </method>
+      <method name="Void &lt;&gt;m__1()">
+        <size>68</size>
+      </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
         <size>16</size>
       </method>
       <method name="Int32 Main()">
-        <size>173</size>
+        <size>172</size>
       </method>
     </type>
     <type name="X+&lt;GetIt&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>173</size>
+        <size>171</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>248</size>
+        <size>247</size>
       </method>
     </type>
     <type name="&lt;PrivateImplementationDetails&gt;">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>151</size>
+        <size>149</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>238</size>
+        <size>236</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>123</size>
+        <size>121</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>183</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>407</size>
+        <size>403</size>
       </method>
     </type>
     <type name="S+&lt;Get&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>183</size>
+        <size>181</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>131</size>
+        <size>129</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>136</size>
+        <size>134</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>374</size>
+        <size>373</size>
       </method>
     </type>
     <type name="Test+&lt;Foo&gt;c__Iterator0">
   </test>
   <test name="test-iter-08.cs">
     <type name="Foo">
-      <method name="Void .ctor(Int32)">
-        <size>14</size>
-      </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
+      <method name="Void .ctor(Int32)">
+        <size>14</size>
+      </method>
     </type>
     <type name="X">
-      <method name="Void .ctor()">
-        <size>7</size>
-      </method>
       <method name="IEnumerable Test(Int32, Int32)">
         <size>44</size>
       </method>
       <method name="Int32 Main()">
         <size>169</size>
       </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
     </type>
     <type name="X+&lt;Test&gt;c__Iterator0">
-      <method name="Void .ctor()">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
         <size>7</size>
       </method>
       <method name="System.Object System.Collections.IEnumerator.get_Current()">
       <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
         <size>7</size>
       </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>52</size>
+      </method>
       <method name="Boolean MoveNext()">
-        <size>360</size>
+        <size>358</size>
       </method>
       <method name="Void Dispose()">
         <size>102</size>
       <method name="Void Reset()">
         <size>6</size>
       </method>
-      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+      <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
-        <size>52</size>
-      </method>
     </type>
   </test>
   <test name="test-iter-09.cs">
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>270</size>
+        <size>268</size>
       </method>
     </type>
     <type name="Tester+&lt;GetEnumerator&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>625</size>
+        <size>635</size>
       </method>
       <method name="Void Dispose()">
-        <size>84</size>
+        <size>96</size>
       </method>
       <method name="Void Reset()">
         <size>6</size>
         <size>1</size>
       </method>
       <method name="Int32 Main()">
-        <size>186</size>
+        <size>184</size>
       </method>
     </type>
     <type name="X+&lt;&gt;c__Iterator0">
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>126</size>
+        <size>124</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>145</size>
+        <size>143</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>124</size>
+        <size>122</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>165</size>
+        <size>163</size>
       </method>
       <method name="Void Dispose()">
         <size>55</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>27</size>
+        <size>25</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
       </method>
     </type>
   </test>
+  <test name="test-iter-14.cs">
+    <type name="XX">
+      <method name="Void Metodo(System.Exception)">
+        <size>37</size>
+      </method>
+      <method name="IEnumerable X()">
+        <size>16</size>
+      </method>
+      <method name="Void Main()">
+        <size>65</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="XX+&lt;X&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>103</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-15.cs">
+    <type name="Test">
+      <method name="IEnumerator GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void Main()">
+        <size>11</size>
+      </method>
+      <method name="Void Run()">
+        <size>177</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>127</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-16.cs">
+    <type name="Foo">
+      <method name="IEnumerable foo()">
+        <size>16</size>
+      </method>
+      <method name="Int32 Main()">
+        <size>67</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Foo+&lt;foo&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>37</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-17.cs">
+    <type name="Program">
+      <method name="IEnumerable get_Empty()">
+        <size>16</size>
+      </method>
+      <method name="Void Main()">
+        <size>61</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Program+&lt;&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>26</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>156</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-18.cs">
+    <type name="test">
+      <method name="IEnumerable testen(Int32)">
+        <size>30</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="reflect">
+      <method name="Void Main(System.String[])">
+        <size>119</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="test+&lt;testen&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>40</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>193</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-19.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>66</size>
+      </method>
+      <method name="IEnumerator GetEnumerator()">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>75</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-20.cs">
+    <type name="CustomDict">
+      <method name="IEnumerator GetEnumerator()">
+        <size>15</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>68</size>
+      </method>
+    </type>
+    <type name="Tests">
+      <method name="Void Main()">
+        <size>7</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="CustomDict+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>84</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-21.cs">
+    <type name="X">
+      <method name="IEnumerable GetIt(System.Int32[])">
+        <size>30</size>
+      </method>
+      <method name="Int32 Main()">
+        <size>119</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="X+A">
+      <method name="Void Invoke()">
+        <size>0</size>
+      </method>
+      <method name="IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)">
+        <size>0</size>
+      </method>
+      <method name="Void EndInvoke(IAsyncResult)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="X+&lt;GetIt&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator System.Collections.IEnumerable.GetEnumerator()">
+        <size>7</size>
+      </method>
+      <method name="IEnumerator`1 System.Collections.Generic.IEnumerable&lt;object&gt;.GetEnumerator()">
+        <size>40</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>199</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>8</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void &lt;&gt;m__0()">
+        <size>22</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="&lt;PrivateImplementationDetails&gt;">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="test-iter-22.cs">
+    <type name="Test">
+      <method name="Void Main()">
+        <size>66</size>
+      </method>
+      <method name="IEnumerator GetEnumerator()">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Test+&lt;GetEnumerator&gt;c__Iterator0">
+      <method name="System.Object System.Collections.Generic.IEnumerator&lt;object&gt;.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="System.Object System.Collections.IEnumerator.get_Current()">
+        <size>7</size>
+      </method>
+      <method name="Boolean MoveNext()">
+        <size>197</size>
+      </method>
+      <method name="Void Dispose()">
+        <size>76</size>
+      </method>
+      <method name="Void Reset()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-named-01.cs">
     <type name="A">
       <method name="Void .ctor()">
         <size>30</size>
       </method>
       <method name="Int32 Main()">
-        <size>279</size>
+        <size>274</size>
       </method>
     </type>
   </test>
         <size>40</size>
       </method>
       <method name="Int32 Main()">
-        <size>239</size>
+        <size>242</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>7</size>
       </method>
       <method name="Boolean MoveNext()">
-        <size>69</size>
+        <size>67</size>
       </method>
       <method name="Void Dispose()">
         <size>8</size>
index 9547cad26621d07469b63f3938049bd72187de08..8117f1ae7a822e1b21a7b1a3ae46bcad17bade3f 100644 (file)
@@ -20,7 +20,6 @@ net_4_0_dirs := \
        $(per_profile_dirs) \
        corcompare      \
        mono-xmltool    \
-       mdoc            \
        mono-shlib-cop  \
        sgen            \
        mconfig         \
@@ -47,6 +46,7 @@ net_4_0_dirs := \
 net_2_0_dirs := \
        $(per_profile_dirs) \
        monodoc         \
+       mdoc            \
        compiler-tester
 
 moonlight_dirs := \
index 5f46eef6826cec7e0f3610f6d9f90627bab448ad..87dc7ac79397f7e6810944f358412ff8d0839f79 100644 (file)
@@ -15,7 +15,7 @@ MDOC_COMMON_FLAGS = \
        /r:System.Web.dll                                                           \
        /r:System.Xml.Linq.dll                                                      \
        /r:ICSharpCode.SharpZipLib.dll                                              \
-       /r:$(topdir)/class/lib/net_4_0/Mono.Cecil.dll
+       /r:Mono.Cecil.dll
 
 LOCAL_MCS_FLAGS = $(MDOC_COMMON_FLAGS) \
        /r:$(topdir)/class/lib/net_2_0/monodoc.dll
index 89a8cbb1b69609b36fb65bcff37b71d61635587a..c86acd8297145c0d357d39aca7e67a6122c3ef43 100644 (file)
@@ -1570,7 +1570,7 @@ class MDocUpdater : MDocCommand
 
                string retnodename = null;
                if (returntype != null && returntype.FullName != "System.Void") { // FIXME
-                       info.ReturnNodeName = retnodename = returnisreturn ? "returns" : "value";
+                       retnodename = returnisreturn ? "returns" : "value";
                        string retnodename_other = !returnisreturn ? "returns" : "value";
                        
                        // If it has a returns node instead of a value node, change its name.
@@ -2522,6 +2522,7 @@ class DocsNodeInfo {
                if (DocUtils.IsDelegate (type)) {
                        Parameters = type.GetMethod("Invoke").Parameters;
                        ReturnType = type.GetMethod("Invoke").ReturnType.ReturnType;
+                       ReturnIsReturn = true;
                }
        }
 
@@ -2564,7 +2565,6 @@ class DocsNodeInfo {
        public bool AddRemarks = true;
        public IMemberReference Member;
        public TypeDefinition Type;
-       public string ReturnNodeName;
 }
 
 class DocumentationEnumerator {
@@ -2987,7 +2987,7 @@ class MsxdocDocumentationImporter : DocumentationImporter {
                                // properties, so let's try to normalize things.
                                case "value":
                                case "returns": {
-                                       XmlElement v = e.OwnerDocument.CreateElement (info.ReturnNodeName ?? child.Name);
+                                       XmlElement v = e.OwnerDocument.CreateElement (info.ReturnIsReturn ? "returns" : "value");
                                        v.InnerXml = child.InnerXml;
                                        e.AppendChild (v);
                                        break;
index 5d12001d4055707f2763ab9c7682725de2c8fc3e..5c8ad7435699a41a9b84bb42c63ddfb4d0165e03 100644 (file)
@@ -54,7 +54,7 @@
     <typeparam name="TRet">return type, with attributes!</typeparam>
     <param name="a">To be added.</param>
     <summary>To be added.</summary>
-    <value>To be added.</value>
+    <returns>To be added.</returns>
     <remarks>
       <c>T:Mono.DocTest.Generic.Func`2</c>.</remarks>
   </Docs>
index 57a69d9c254e3b63ee623b8f981224d3698906c3..a272ffae4e118e34ae5ecee4c42dc610ce87c4c8 100644 (file)
@@ -55,7 +55,7 @@
     <typeparam name="TRet">To be added.</typeparam>
     <param name="a">To be added.</param>
     <summary>To be added.</summary>
-    <value>To be added.</value>
+    <returns>To be added.</returns>
     <remarks>To be added.</remarks>
   </Docs>
 </Type>
index a389595271942cb4cfe9e478ac64aefae2740a83..a52f177d1822521bc0249b54cd3c4ebdea8c0abf 100644 (file)
@@ -54,7 +54,7 @@
     <typeparam name="TRet">To be added.</typeparam>
     <param name="a">To be added.</param>
     <summary>To be added.</summary>
-    <value>To be added.</value>
+    <returns>To be added.</returns>
     <remarks>To be added.</remarks>
   </Docs>
 </Type>
index a3826ea512ba605aca1aae839a32769bfdbd5ea6..ade5740efb1d64bd40b99f6df27780130a012bc7 100644 (file)
         </dl>
       </blockquote>
       <h4 class="Subsection">
-        <a href="javascript:toggle_display('T:Mono.DocTest.Generic.Func`2:Docs:Value')">
-          <span id="T:Mono.DocTest.Generic.Func`2:Docs:Value:toggle">⊟</span> Value</a>
+        <a href="javascript:toggle_display('T:Mono.DocTest.Generic.Func`2:Docs:Returns')">
+          <span id="T:Mono.DocTest.Generic.Func`2:Docs:Returns:toggle">⊟</span> Returns</a>
       </h4>
-      <blockquote class="SubsectionBox" id="T:Mono.DocTest.Generic.Func`2:Docs:Value">
+      <blockquote class="SubsectionBox" id="T:Mono.DocTest.Generic.Func`2:Docs:Returns">
         <span class="NotEntered">Documentation for this section has not yet been entered.</span>
       </blockquote>
       <h4 class="Subsection">
index aed861b98ed0c2d089735ed679f3eb17ef288339..c15a9545729efe2130b1786662a6a6a995c9479a 100644 (file)
@@ -576,7 +576,7 @@ class Example {
             <typeparam name="TRet">return type, with attributes!</typeparam>
             <param name="a">To be added.</param>
             <summary>To be added.</summary>
-            <value>To be added.</value>
+            <returns>To be added.</returns>
             <remarks>
                 <c>T:Mono.DocTest.Generic.Func`2</c>.</remarks>
         </member>
index 8643e4b1ef12a44f5e6ff938f7438b5408335af1..70b382730867628cfcc5b981b943ff4d3659590c 100644 (file)
@@ -3,9 +3,14 @@ SUBDIRS =
 include ../../build/rules.make
 HAS_NUNIT_TEST = yes
 
+BUILD_FRAMEWORK = Microsoft.Build.Framework.dll
+BUILD_ENGINE = Microsoft.Build.Engine.dll
+
 ifeq (3.5, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v3.5
 ASSEMBLY_VERSION = 3.5.0.0
+BUILD_FRAMEWORK := $(topdir)/class/lib/$(PROFILE)/$(BUILD_FRAMEWORK)
+BUILD_ENGINE := $(topdir)/class/lib/$(PROFILE)/$(BUILD_ENGINE)
 else
 ifeq (4.0, $(FRAMEWORK_VERSION))
 NAME_SUFFIX = .v4.0
@@ -13,7 +18,7 @@ ASSEMBLY_VERSION = 4.0.0.0
 endif
 endif
 
-LOCAL_MCS_FLAGS = -r:Microsoft.Build.Framework.dll -r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll -r:Microsoft.Build.Engine.dll
+LOCAL_MCS_FLAGS = -r:$(BUILD_FRAMEWORK) -r:Microsoft.Build.Utilities$(NAME_SUFFIX).dll -r:$(BUILD_ENGINE)
 PROGRAM = $(topdir)/class/lib/$(PROFILE)/xbuild.exe
 
 include ../../build/executable.make
index 7da2c07074d7b15e5a17840b4e0389860d3bf089..b56dc32be641dcc5e71d95971b5343689fcda4b4 100644 (file)
@@ -7,20 +7,17 @@
 %define sgen no
 %endif
 
-%if %llvm == yes
-%define enable_llvm --enable-loadedllvm
-%endif
-
 Name:           mono-core
 License:        LGPL v2.1 only
 Group:          Development/Languages/Mono
 Summary:        A .NET Runtime Environment
 Url:            http://www.mono-project.com
 Version:        @VERSION@
-Release:        30
+Release:        0
 Source0:        mono-%{version}.tar.bz2
 BuildRequires:  bison
 BuildRequires:  gcc-c++
+BuildRequires:  fdupes
 BuildRequires:  pkgconfig
 BuildRequires:  zlib-devel
 %ifnarch ia64
@@ -51,6 +48,9 @@ Conflicts:      f-spot < 0.4
 Conflicts:      helix-banshee < 1.0
 Conflicts:      mono-addins < 0.3.1
 Recommends:     libgdiplus0 >= 2.6
+%if %llvm == yes
+Recommends:     libmono-llvm0 = %{version}-%{release}
+%endif
 Provides:       mono(Commons.Xml.Relaxng) = 1.0.5000.0
 Provides:       mono(CustomMarshalers) = 1.0.5000.0
 Provides:       mono(I18N) = 1.0.5000.0
@@ -67,6 +67,7 @@ Provides:       mono(System.Security) = 1.0.5000.0
 Provides:       mono(System.Xml) = 1.0.5000.0
 Provides:       mono(mscorlib) = 1.0.5000.0
 
+%define _use_internal_dependency_generator 0
 %define __find_provides env sh -c 'filelist=($(cat)) && { printf "%s\\n" "${filelist[@]}" | /usr/lib/rpm/find-provides && printf "%s\\n" "${filelist[@]}" | prefix=%{buildroot}%{_prefix} %{buildroot}%{_bindir}/mono-find-provides ; } | sort | uniq'
 %define __find_requires env sh -c 'filelist=($(cat)) && { printf "%s\\n" "${filelist[@]}" | /usr/lib/rpm/find-requires && printf "%s\\n" "${filelist[@]}" | prefix=%{buildroot}%{_prefix} %{buildroot}%{_bindir}/mono-find-requires ; } | sort | uniq'
 
@@ -91,9 +92,12 @@ export CFLAGS=" $RPM_OPT_FLAGS -fno-strict-aliasing"
 export PATH=/opt/novell/llvm-mono/bin:$PATH
 %endif
 %configure \
-  --with-ikvm=yes \
   --with-sgen=%{sgen} \
-  %{?enable_llvm} \
+%if %llvm == yes
+  --enable-loadedllvm \
+  --disable-system-aot \
+%endif
+  --with-ikvm=yes \
   --with-moonlight=no
 make # We are not -jN safe! %{?jobs:-j%jobs}
 
@@ -118,9 +122,10 @@ rm -f %buildroot%_prefix/lib/mono/*/culevel.exe*
 rm -f %buildroot%_prefix/lib/mono/2.0/cilc.exe*
 # brp-compress doesn't search _mandir
 # so we cheat it
-ln -s . %buildroot%_prefix/usr
+ln -s . %buildroot%_prefix%_prefix
 RPM_BUILD_ROOT=%buildroot%_prefix /usr/lib/rpm/brp-compress
-rm %buildroot%_prefix/usr
+rm %buildroot%_prefix%_prefix
+%fdupes %buildroot%_prefix
 %find_lang mcs
 
 %clean
@@ -144,6 +149,8 @@ rm -rf %buildroot
 %dir %_sysconfdir/mono
 %dir %_sysconfdir/mono/2.0
 %dir %_sysconfdir/mono/4.0
+%_bindir/al
+%_bindir/al2
 %_bindir/certmgr
 %_bindir/chktrust
 %_bindir/csharp
@@ -195,10 +202,12 @@ rm -rf %buildroot
 %_prefix/lib/mono/2.0/System.Configuration.dll
 %_prefix/lib/mono/2.0/System.Core.dll
 %_prefix/lib/mono/2.0/System.Drawing.dll
+%_prefix/lib/mono/2.0/System.Net.dll
 %_prefix/lib/mono/2.0/System.Security.dll
 %_prefix/lib/mono/2.0/System.Xml.Linq.dll
 %_prefix/lib/mono/2.0/System.Xml.dll
 %_prefix/lib/mono/2.0/System.dll
+%_prefix/lib/mono/2.0/al.exe*
 %_prefix/lib/mono/2.0/cscompmgd.dll
 %_prefix/lib/mono/2.0/csharp.exe*
 %_prefix/lib/mono/2.0/gacutil.exe*
@@ -225,11 +234,13 @@ rm -rf %buildroot
 %_prefix/lib/mono/4.0/System.Core.dll
 %_prefix/lib/mono/4.0/System.Drawing.dll
 %_prefix/lib/mono/4.0/System.Dynamic.dll
+%_prefix/lib/mono/4.0/System.Net.dll
 %_prefix/lib/mono/4.0/System.Numerics.dll
 %_prefix/lib/mono/4.0/System.Security.dll
 %_prefix/lib/mono/4.0/System.Xml.Linq.dll
 %_prefix/lib/mono/4.0/System.Xml.dll
 %_prefix/lib/mono/4.0/System.dll
+%_prefix/lib/mono/4.0/al.exe*
 %_prefix/lib/mono/4.0/certmgr.exe*
 %_prefix/lib/mono/4.0/chktrust.exe*
 %_prefix/lib/mono/4.0/cscompmgd.dll
@@ -266,6 +277,7 @@ rm -rf %buildroot
 %_prefix/lib/mono/gac/System.Core
 %_prefix/lib/mono/gac/System.Drawing
 %_prefix/lib/mono/gac/System.Dynamic
+%_prefix/lib/mono/gac/System.Net
 %_prefix/lib/mono/gac/System.Numerics
 %_prefix/lib/mono/gac/System.Security
 %_prefix/lib/mono/gac/System.Xml
@@ -299,6 +311,7 @@ A Library for embedding Mono in your Application.
 License:        LGPL v2.1 only
 Summary:       Development files for libmono
 Group:          Development/Languages/Mono
+Requires:       mono-core == %version-%release
 
 %description -n libmono-2_0-devel
 The Mono Project is an open development initiative that is working to
@@ -343,6 +356,7 @@ A Library for embedding Mono in your Application (sgen version).
 License:        LGPL v2.1 only
 Summary:       Development files for libmonosgen
 Group:          Development/Languages/Mono
+Requires:       mono-core == %version-%release
 
 %description -n libmonosgen-2_0-devel
 The Mono Project is an open development initiative that is working to
@@ -428,7 +442,6 @@ Obsoletes:      mono-novell-directory
 Provides:       mono-directory
 Provides:       mono-ms-enterprise
 Provides:       mono-novell-directory
-Provides:       mono(Mono.Data) = 1.0.5000.0
 Provides:       mono(Mono.Data.Tds) = 1.0.5000.0
 Provides:       mono(Novell.Directory.Ldap) = 1.0.5000.0
 Provides:       mono(System.Data) = 1.0.5000.0
@@ -453,19 +466,19 @@ Database connectivity for Mono.
 %_prefix/lib/mono/2.0/Novell.Directory.Ldap.dll
 %_prefix/lib/mono/2.0/System.Data.DataSetExtensions.dll
 %_prefix/lib/mono/2.0/System.Data.Linq.dll
-%_prefix/lib/mono/2.0/System.Data.Services.dll
 %_prefix/lib/mono/2.0/System.Data.dll
 %_prefix/lib/mono/2.0/System.DirectoryServices.dll
 %_prefix/lib/mono/2.0/System.EnterpriseServices.dll
+%_prefix/lib/mono/2.0/System.Runtime.Serialization.dll
 %_prefix/lib/mono/2.0/System.Transactions.dll
 %_prefix/lib/mono/4.0/Mono.Data.Tds.dll
 %_prefix/lib/mono/4.0/Novell.Directory.Ldap.dll
 %_prefix/lib/mono/4.0/System.Data.DataSetExtensions.dll
 %_prefix/lib/mono/4.0/System.Data.Linq.dll
-%_prefix/lib/mono/4.0/System.Data.Services.dll
 %_prefix/lib/mono/4.0/System.Data.dll
 %_prefix/lib/mono/4.0/System.DirectoryServices.dll
 %_prefix/lib/mono/4.0/System.EnterpriseServices.dll
+%_prefix/lib/mono/4.0/System.Runtime.Serialization.dll
 %_prefix/lib/mono/4.0/System.Transactions.dll
 %_prefix/lib/mono/4.0/sqlmetal.exe*
 %_prefix/lib/mono/4.0/sqlsharp.exe*
@@ -474,9 +487,9 @@ Database connectivity for Mono.
 %_prefix/lib/mono/gac/System.Data
 %_prefix/lib/mono/gac/System.Data.DataSetExtensions
 %_prefix/lib/mono/gac/System.Data.Linq
-%_prefix/lib/mono/gac/System.Data.Services
 %_prefix/lib/mono/gac/System.DirectoryServices
 %_prefix/lib/mono/gac/System.EnterpriseServices
+%_prefix/lib/mono/gac/System.Runtime.Serialization
 %_prefix/lib/mono/gac/System.Transactions
 
 %package -n mono-winforms
@@ -646,31 +659,28 @@ Mono implementation of WCF, Windows Communication Foundation
 %defattr(-, root, root)
 %_bindir/svcutil
 %_libdir/pkgconfig/wcf.pc
+%_prefix/lib/mono/2.0/System.Data.Services.dll
 %_prefix/lib/mono/2.0/System.IdentityModel.Selectors.dll
 %_prefix/lib/mono/2.0/System.IdentityModel.dll
-%_prefix/lib/mono/2.0/System.Runtime.Serialization.dll
 %_prefix/lib/mono/2.0/System.ServiceModel.Web.dll
 %_prefix/lib/mono/2.0/System.ServiceModel.dll
+%_prefix/lib/mono/4.0/System.Data.Services.dll
 %_prefix/lib/mono/4.0/System.IdentityModel.Selectors.dll
 %_prefix/lib/mono/4.0/System.IdentityModel.dll
 %_prefix/lib/mono/4.0/System.Runtime.DurableInstancing.dll
-%_prefix/lib/mono/4.0/System.Runtime.Serialization.dll
 %_prefix/lib/mono/4.0/System.ServiceModel.Discovery.dll
 %_prefix/lib/mono/4.0/System.ServiceModel.Routing.dll
 %_prefix/lib/mono/4.0/System.ServiceModel.Web.dll
 %_prefix/lib/mono/4.0/System.ServiceModel.dll
-%_prefix/lib/mono/4.0/System.Web.ApplicationServices.dll
 %_prefix/lib/mono/4.0/svcutil.exe*
-%_prefix/lib/mono/gac/System.Data.Services.Client
+%_prefix/lib/mono/gac/System.Data.Services
 %_prefix/lib/mono/gac/System.IdentityModel
 %_prefix/lib/mono/gac/System.IdentityModel.Selectors
 %_prefix/lib/mono/gac/System.Runtime.DurableInstancing
-%_prefix/lib/mono/gac/System.Runtime.Serialization
 %_prefix/lib/mono/gac/System.ServiceModel
 %_prefix/lib/mono/gac/System.ServiceModel.Discovery
 %_prefix/lib/mono/gac/System.ServiceModel.Routing
 %_prefix/lib/mono/gac/System.ServiceModel.Web
-%_prefix/lib/mono/gac/System.Web.ApplicationServices
 
 %package -n mono-winfxcore
 License:        MIT License (or similar) ; Ms-Pl
@@ -691,6 +701,7 @@ Mono implementation of core WinFX APIs
 %defattr(-, root, root)
 %_prefix/lib/mono/2.0/WindowsBase.dll*
 %_prefix/lib/mono/4.0/WindowsBase.dll*
+%_prefix/lib/mono/gac/System.Data.Services.Client
 %_prefix/lib/mono/gac/WindowsBase
 
 %package -n mono-web
@@ -724,6 +735,7 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %config %_sysconfdir/mono/2.0/Browsers
 %config %_sysconfdir/mono/2.0/DefaultWsdlHelpGenerator.aspx
 %config %_sysconfdir/mono/2.0/web.config
+%config %_sysconfdir/mono/4.0/DefaultWsdlHelpGenerator.aspx
 %config %_sysconfdir/mono/4.0/web.config
 %config %_sysconfdir/mono/browscap.ini
 %config %_sysconfdir/mono/mconfig/config.xml
@@ -735,10 +747,6 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %_bindir/wsdl2
 %_bindir/xsd
 %_libdir/pkgconfig/mono.web.pc
-%_libdir/pkgconfig/system.web.extensions.design_1.0.pc
-%_libdir/pkgconfig/system.web.extensions_1.0.pc
-%_libdir/pkgconfig/system.web.mvc.pc
-%_libdir/pkgconfig/system.web.mvc2.pc
 %_mandir/man1/disco.1%ext_man
 %_mandir/man1/mconfig.1%ext_man
 %_mandir/man1/soapsuds.1%ext_man
@@ -751,15 +759,11 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %_prefix/lib/mono/2.0/System.Runtime.Serialization.Formatters.Soap.dll
 %_prefix/lib/mono/2.0/System.Web.Abstractions.dll
 %_prefix/lib/mono/2.0/System.Web.DynamicData.dll
-%_prefix/lib/mono/2.0/System.Web.Extensions.Design.dll
-%_prefix/lib/mono/2.0/System.Web.Extensions.dll
-%_prefix/lib/mono/2.0/System.Web.Mvc.dll
 %_prefix/lib/mono/2.0/System.Web.Routing.dll
 %_prefix/lib/mono/2.0/System.Web.Services.dll
 %_prefix/lib/mono/2.0/System.Web.dll
 %_prefix/lib/mono/2.0/wsdl.exe*
 %_prefix/lib/mono/2.0/xsd.exe*
-%_prefix/lib/mono/3.5/System.Web.Extensions.Design.dll
 %_prefix/lib/mono/4.0/Mono.Http.dll
 %_prefix/lib/mono/4.0/Mono.Web.dll
 %_prefix/lib/mono/4.0/System.ComponentModel.Composition.dll
@@ -767,9 +771,8 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %_prefix/lib/mono/4.0/System.Runtime.Remoting.dll
 %_prefix/lib/mono/4.0/System.Runtime.Serialization.Formatters.Soap.dll
 %_prefix/lib/mono/4.0/System.Web.Abstractions.dll
+%_prefix/lib/mono/4.0/System.Web.ApplicationServices.dll
 %_prefix/lib/mono/4.0/System.Web.DynamicData.dll
-%_prefix/lib/mono/4.0/System.Web.Extensions.Design.dll
-%_prefix/lib/mono/4.0/System.Web.Extensions.dll
 %_prefix/lib/mono/4.0/System.Web.Routing.dll
 %_prefix/lib/mono/4.0/System.Web.Services.dll
 %_prefix/lib/mono/4.0/System.Web.dll
@@ -778,9 +781,6 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %_prefix/lib/mono/4.0/soapsuds.exe*
 %_prefix/lib/mono/4.0/wsdl.exe*
 %_prefix/lib/mono/4.0/xsd.exe*
-%_prefix/lib/mono/compat-2.0/System.Web.Extensions.Design.dll
-%_prefix/lib/mono/compat-2.0/System.Web.Extensions.dll
-%_prefix/lib/mono/compat-2.0/System.Web.Mvc.dll
 %_prefix/lib/mono/gac/Mono.Http
 %_prefix/lib/mono/gac/Mono.Web
 %_prefix/lib/mono/gac/System.ComponentModel.Composition
@@ -789,12 +789,43 @@ Mono implementation of ASP.NET, Remoting and Web Services.
 %_prefix/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap
 %_prefix/lib/mono/gac/System.Web
 %_prefix/lib/mono/gac/System.Web.Abstractions
+%_prefix/lib/mono/gac/System.Web.ApplicationServices
 %_prefix/lib/mono/gac/System.Web.DynamicData
+%_prefix/lib/mono/gac/System.Web.Routing
+%_prefix/lib/mono/gac/System.Web.Services
+
+%package -n mono-mvc
+License:        MIT License (or similar) ; Ms-Pl
+Summary:        Mono implementation of ASP.NET MVC
+Group:          Development/Languages/Mono
+Requires:       mono-core == %version-%release
+
+%description -n mono-mvc
+The Mono Project is an open development initiative that is working to
+develop an open source, Unix version of the .NET development platform.
+Its objective is to enable Unix developers to build and deploy
+cross-platform .NET applications. The project will implement various
+technologies that have been submitted to the ECMA for standardization.
+
+Mono implementation of ASP.NET MVC.
+
+%files -n mono-mvc
+%defattr(-, root, root)
+%_libdir/pkgconfig/system.web.extensions.design_1.0.pc
+%_libdir/pkgconfig/system.web.extensions_1.0.pc
+%_libdir/pkgconfig/system.web.mvc.pc
+%_libdir/pkgconfig/system.web.mvc2.pc
+%_prefix/lib/mono/2.0/System.Web.Extensions.Design.dll
+%_prefix/lib/mono/2.0/System.Web.Extensions.dll
+%_prefix/lib/mono/2.0/System.Web.Mvc.dll
+%_prefix/lib/mono/4.0/System.Web.Extensions.Design.dll
+%_prefix/lib/mono/4.0/System.Web.Extensions.dll
+%_prefix/lib/mono/compat-2.0/System.Web.Extensions.Design.dll
+%_prefix/lib/mono/compat-2.0/System.Web.Extensions.dll
+%_prefix/lib/mono/compat-2.0/System.Web.Mvc.dll
 %_prefix/lib/mono/gac/System.Web.Extensions
 %_prefix/lib/mono/gac/System.Web.Extensions.Design
 %_prefix/lib/mono/gac/System.Web.Mvc
-%_prefix/lib/mono/gac/System.Web.Routing
-%_prefix/lib/mono/gac/System.Web.Services
 
 %package -n mono-data-oracle
 License:        LGPL v2.1 only
@@ -926,8 +957,6 @@ Mono development tools.
 
 %files -n mono-devel
 %defattr(-, root, root)
-%_bindir/al
-%_bindir/al2
 %_bindir/caspol
 %_bindir/ccrewrite
 %_bindir/cert2spc
@@ -1018,7 +1047,6 @@ Mono development tools.
 %_prefix/lib/mono/2.0/Microsoft.VisualBasic.targets
 %_prefix/lib/mono/2.0/Mono.Debugger.Soft.dll
 %_prefix/lib/mono/2.0/PEAPI.dll
-%_prefix/lib/mono/2.0/al.exe*
 %_prefix/lib/mono/2.0/genxs.exe*
 %_prefix/lib/mono/2.0/ilasm.exe*
 %_prefix/lib/mono/2.0/mkbundle.exe*
@@ -1051,7 +1079,6 @@ Mono development tools.
 %_prefix/lib/mono/4.0/Microsoft.VisualBasic.targets
 %_prefix/lib/mono/4.0/Mono.CodeContracts.dll
 %_prefix/lib/mono/4.0/PEAPI.dll
-%_prefix/lib/mono/4.0/al.exe*
 %_prefix/lib/mono/4.0/caspol.exe*
 %_prefix/lib/mono/4.0/ccrewrite.exe*
 %_prefix/lib/mono/4.0/cert2spc.exe*
@@ -1097,7 +1124,9 @@ Mono development tools.
 License:        LGPL v2.1 only
 Summary:        Monodoc - Documentation tools for C# code
 Group:          Development/Tools/Other
+Requires:       mono-core == %version-%release
 Obsoletes:      monodoc
+Provides:       monodoc
 # Added to uncompress and compare documentation used by build-compare
 Requires:       unzip
 
@@ -1130,7 +1159,7 @@ Monodoc-core contains documentation tools for C#.
 %_mandir/man1/monodocer.1%ext_man
 %_mandir/man1/monodocs2html.1%ext_man
 %_mandir/man5/mdoc.5%ext_man
-%_prefix/lib/mono/4.0/mdoc.exe*
+%_prefix/lib/mono/2.0/mdoc.exe*
 %_prefix/lib/mono/4.0/mod.exe*
 %_prefix/lib/mono/gac/monodoc
 %_prefix/lib/mono/monodoc
@@ -1140,15 +1169,21 @@ Monodoc-core contains documentation tools for C#.
 License:        LGPL v2.1 only
 Summary:        Install everything built from the mono source tree
 Group:          Development/Languages/Mono
-Requires:       bytefx-data-mysql = %version-%release
-Requires:       ibm-data-db2 = %version-%release
 Requires:       mono-core = %version-%release
+Requires:       ibm-data-db2 = %version-%release
+Requires:       libmono-2_0-1 = %version-%release
+Requires:       libmono-2_0-devel = %version-%release
+%if %llvm == yes
+Requires:       libmono-llvm0 = %version-%release
+%endif
+%if %sgen == yes
+Requires:       libmonosgen-2_0-0 = %version-%release
+Requires:       libmonosgen-2_0-devel = %version-%release
+%endif
 Requires:       mono-data = %version-%release
-Requires:       mono-data-firebird = %version-%release
 Requires:       mono-data-oracle = %version-%release
 Requires:       mono-data-postgresql = %version-%release
 Requires:       mono-data-sqlite = %version-%release
-Requires:       mono-data-sybase = %version-%release
 Requires:       mono-devel = %version-%release
 Requires:       mono-extras = %version-%release
 Requires:       mono-locale-extras = %version-%release
@@ -1156,6 +1191,8 @@ Requires:       mono-nunit = %version-%release
 Requires:       mono-wcf = %version-%release
 Requires:       mono-web = %version-%release
 Requires:       mono-winforms = %version-%release
+Requires:       mono-winfxcore = %version-%release
+Requires:       monodoc-core = %version-%release
 
 %description -n mono-complete
 The Mono Project is an open development initiative that is working to
index 37d389b1bdb08ae6f830c3a03e1af2c5bc8fb314..d4719cac40c0592b98bbef8dcbf4c5dce0af19a1 100644 (file)
@@ -862,8 +862,10 @@ dis_method_list (const char *klass_name, MonoImage *m, guint32 start, guint32 en
                if (ms != NULL){
                        sig_str = dis_stringify_method_signature (m, ms, i + 1, container, FALSE);
                        method_name = mono_metadata_string_heap (m, cols [MONO_METHOD_NAME]);
-               } else
+               } else {
+                       sig_str = NULL;
                        method_name = g_strdup ("<NULL METHOD SIGNATURE>");
+               }
 
                fprintf (output, "    // method line %d\n", i + 1);
                fprintf (output, "    .method %s", flags);
index 4e37942532043f661a3fd656fb5b3ae42fb751a2..b2777006bd6d84411e8d966dc60a0f0d2fd980d1 100644 (file)
@@ -1693,7 +1693,7 @@ static gboolean process_open_compare (gpointer handle, gpointer user_data)
 gpointer OpenProcess (guint32 req_access G_GNUC_UNUSED, gboolean inherit G_GNUC_UNUSED, guint32 pid)
 {
        /* Find the process handle that corresponds to pid */
-       gpointer handle;
+       gpointer handle = NULL;
        
        mono_once (&process_current_once, process_set_current);
 
@@ -1701,11 +1701,12 @@ gpointer OpenProcess (guint32 req_access G_GNUC_UNUSED, gboolean inherit G_GNUC_
        g_message ("%s: looking for process %d", __func__, pid);
 #endif
 
-       handle = _wapi_search_handle (WAPI_HANDLE_PROCESS,
-                                     process_open_compare,
-                                     GUINT_TO_POINTER (pid), NULL, TRUE);
+       if (_wapi_shm_enabled ())
+               handle = _wapi_search_handle (WAPI_HANDLE_PROCESS,
+                                             process_open_compare,
+                                             GUINT_TO_POINTER (pid), NULL, TRUE);
        if (handle == 0) {
-#if defined(__OpenBSD__)
+#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__)
                if ((kill(pid, 0) == 0) || (errno == EPERM)) {
 #elif defined(__HAIKU__)
                team_info teamInfo;
index 2bd47b2059b498b83af4d67b84ebaba256d62104..9e70e8c5aec0da235fd4fd3bfa61a499e0eeabeb 100644 (file)
@@ -151,6 +151,12 @@ _wapi_shm_detach (_wapi_shm_t type)
        g_free (wapi_storage [type]);
 }
 
+gboolean
+_wapi_shm_enabled (void)
+{
+       return FALSE;
+}
+
 #else
 /*
  * Use POSIX shared memory if possible, it is simpler, and it has the advantage that 
index c9e1e119eda957508b96a57464366dc5469cc151..ad0db69b2a84aa844e614a64d0074fe9493ab9db 100644 (file)
@@ -28,17 +28,29 @@ unix_sources = \
 platform_sources = $(unix_sources)
 endif
 
+if SHARED_MONO
 bin_PROGRAMS = pedump
+endif
 
 #
 # libtool is not capable of creating static/shared versions of the same
 # convenience lib, so we have to do it ourselves
 #
 if SUPPORT_SGEN
-sgen_libraries = libmonoruntimesgen.la libmonoruntimesgen-static.la 
+if SHARED_MONO
+shared_sgen_libraries = libmonoruntimesgen.la 
+endif
+sgen_libraries = $(shared_sgen_libraries) libmonoruntimesgen-static.la 
 endif
 
-noinst_LTLIBRARIES = libmonoruntime.la libmonoruntime-static.la $(sgen_libraries)
+if MOONLIGHT
+moonlight_libraries = libmonoruntimemoon.la
+endif
+
+if SHARED_MONO
+shared_libraries = libmonoruntime.la
+endif
+noinst_LTLIBRARIES =  $(shared_libraries) libmonoruntime-static.la $(sgen_libraries) $(moonlight_libraries)
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CFLAGS) $(GLIB_CFLAGS) -DMONO_BINDIR=\"$(bindir)/\" -DMONO_ASSEMBLIES=\"$(assembliesdir)\" -DMONO_CFG_DIR=\"$(confdir)\"
 
@@ -177,6 +189,7 @@ libmonoruntime_la_SOURCES = \
        sgen-major-copying.c    \
        sgen-gc.h               \
        sgen-archdep.h          \
+       sgen-cardtable.h        \
        sgen-major-copy-object.h \
        sgen-major-scan-object.h \
        sgen-protocol.h         \
@@ -197,6 +210,9 @@ libmonoruntime_la_SOURCES = \
 
 libmonoruntime_la_CFLAGS = $(BOEHM_DEFINES)
 
+libmonoruntimemoon_la_SOURCES = $(libmonoruntime_la_SOURCES)
+libmonoruntimemoon_la_CFLAGS = $(MOONLIGHT_DEFINES) $(BOEHM_DEFINES)
+
 libmonoruntimesgen_la_SOURCES = $(libmonoruntime_la_SOURCES)
 libmonoruntimesgen_la_CFLAGS = $(SGEN_DEFINES)
 
@@ -247,6 +263,7 @@ else
 PEDUMP_DTRACE_OBJECT = 
 endif
 
+if SHARED_MONO
 pedump_SOURCES =               \
        pedump.c
 
@@ -256,6 +273,7 @@ pedump_LDADD = libmonoruntime.la ../io-layer/libwapi.la ../utils/libmonoutils.la
 if PLATFORM_DARWIN
 pedump_LDFLAGS=-framework CoreFoundation
 endif
+endif
 
 EXTRA_DIST = make-bundle.pl sample-bundle $(win32_sources) $(unix_sources) $(null_sources) $(sgen_sources) runtime.h
 
index 3764d293b6265b64c17de04d640852cead198ad7..64ad374e00861cb7bf141208ad54e2bb6865c440 100644 (file)
@@ -990,7 +990,7 @@ add_assemblies_to_domain (MonoDomain *domain, MonoAssembly *ass, GHashTable *ht)
                mono_assembly_addref (ass);
                g_hash_table_insert (ht, ass, ass);
                domain->domain_assemblies = g_slist_prepend (domain->domain_assemblies, ass);
-               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Assembly %s %p added to domain %s, ref_count=%d\n", ass->aname.name, ass, domain->friendly_name, ass->ref_count);
+               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Assembly %s %p added to domain %s, ref_count=%d", ass->aname.name, ass, domain->friendly_name, ass->ref_count);
        }
 
        if (ass->image->references) {
index 4bb632cbb90be7dfb752e477a0684ea0cdf2f429..d07174134b4768483910358652f0b941ca9145cd 100644 (file)
@@ -29,6 +29,7 @@
 #include <mono/metadata/mono-config.h>
 #include <mono/utils/mono-digest.h>
 #include <mono/utils/mono-logger-internal.h>
+#include <mono/utils/mono-path.h>
 #include <mono/metadata/reflection.h>
 #include <mono/metadata/coree.h>
 
@@ -61,6 +62,7 @@ static char **assemblies_path = NULL;
 /* Contains the list of directories that point to auxiliary GACs */
 static char **extra_gac_paths = NULL;
 
+#ifndef DISABLE_ASSEMBLY_REMAPPING
 /* The list of system assemblies what will be remapped to the running
  * runtime version. WARNING: this list must be sorted.
  */
@@ -120,6 +122,7 @@ static const AssemblyVersionMap framework_assemblies [] = {
        {"System.Xml", 0},
        {"mscorlib", 0}
 };
+#endif
 
 /*
  * keeps track of loaded assemblies
@@ -589,7 +592,7 @@ void
 mono_set_rootdir (void)
 {
 #if defined(HOST_WIN32) || (defined(PLATFORM_MACOSX) && !defined(TARGET_ARM))
-       gchar *bindir, *installdir, *root, *name, *config;
+       gchar *bindir, *installdir, *root, *name, *resolvedname, *config;
 
 #ifdef HOST_WIN32
        name = mono_get_module_file_name ((HMODULE) &__ImageBase);
@@ -612,10 +615,14 @@ mono_set_rootdir (void)
                        fallback ();
                        return;
                }
+
+               name = mono_path_resolve_symlinks (name);
        }
 #endif
 
-       bindir = g_path_get_dirname (name);
+       resolvedname = mono_path_resolve_symlinks (name);
+
+       bindir = g_path_get_dirname (resolvedname);
        installdir = g_path_get_dirname (bindir);
        root = g_build_path (G_DIR_SEPARATOR_S, installdir, "lib", NULL);
 
@@ -634,6 +641,7 @@ mono_set_rootdir (void)
        g_free (installdir);
        g_free (bindir);
        g_free (name);
+       g_free (resolvedname);
 #elif defined(DISABLE_MONO_AUTODETECTION)
        fallback ();
 #else
@@ -790,6 +798,7 @@ mono_assembly_addref (MonoAssembly *assembly)
        InterlockedIncrement (&assembly->ref_count);
 }
 
+#ifndef DISABLE_ASSEMBLY_REMAPPING
 static MonoAssemblyName *
 mono_assembly_remap_version (MonoAssemblyName *aname, MonoAssemblyName *dest_aname)
 {
@@ -838,6 +847,7 @@ mono_assembly_remap_version (MonoAssemblyName *aname, MonoAssemblyName *dest_ana
        }
        return aname;
 }
+#endif
 
 /*
  * mono_assembly_get_assemblyref:
@@ -954,7 +964,7 @@ mono_assembly_load_reference (MonoImage *image, int index)
                if (reference != REFERENCE_MISSING){
                        mono_assembly_addref (reference);
                        if (image->assembly)
-                               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Assembly Ref addref %s %p -> %s %p: %d\n",
+                               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Assembly Ref addref %s %p -> %s %p: %d",
                                    image->assembly->aname.name, image->assembly, reference->aname.name, reference, reference->ref_count);
                } else {
                        if (image->assembly)
@@ -1553,7 +1563,7 @@ mono_assembly_load_from_full (MonoImage *image, const char*fname,
        /* Add a non-temporary reference because of ass->image */
        mono_image_addref (image);
 
-       mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Image addref %s %p -> %s %p: %d\n", ass->aname.name, ass, image->name, image, image->ref_count);
+       mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Image addref %s %p -> %s %p: %d", ass->aname.name, ass, image->name, image, image->ref_count);
 
        /* 
         * The load hooks might take locks so we can't call them while holding the
@@ -2053,7 +2063,10 @@ MonoAssembly*
 mono_assembly_load_with_partial_name (const char *name, MonoImageOpenStatus *status)
 {
        MonoAssembly *res;
-       MonoAssemblyName *aname, base_name, maped_aname;
+       MonoAssemblyName *aname, base_name;
+#ifndef DISABLE_ASSEMBLY_REMAPPING
+       MonoAssemblyName maped_aname;
+#endif
        gchar *fullname, *gacpath;
        gchar **paths;
 
@@ -2063,12 +2076,14 @@ mono_assembly_load_with_partial_name (const char *name, MonoImageOpenStatus *sta
        if (!mono_assembly_name_parse (name, aname))
                return NULL;
 
+#ifndef DISABLE_ASSEMBLY_REMAPPING
        /* 
         * If no specific version has been requested, make sure we load the
         * correct version for system assemblies.
         */ 
        if ((aname->major | aname->minor | aname->build | aname->revision) == 0)
                aname = mono_assembly_remap_version (aname, &maped_aname);
+#endif
        
        res = mono_assembly_loaded (aname);
        if (res) {
@@ -2592,12 +2607,17 @@ mono_assembly_load_full_nosearch (MonoAssemblyName *aname,
 {
        MonoAssembly *result;
        char *fullpath, *filename;
-       MonoAssemblyName maped_aname, maped_name_pp;
+#ifndef DISABLE_ASSEMBLY_REMAPPING
+       MonoAssemblyName maped_aname;
+#endif
+       MonoAssemblyName maped_name_pp;
        int ext_index;
        const char *ext;
        int len;
 
+#ifndef DISABLE_ASSEMBLY_REMAPPING
        aname = mono_assembly_remap_version (aname, &maped_aname);
+#endif
        
        /* Reflection only assemblies don't get assembly binding */
        if (!refonly)
@@ -2708,9 +2728,11 @@ MonoAssembly*
 mono_assembly_loaded_full (MonoAssemblyName *aname, gboolean refonly)
 {
        MonoAssembly *res;
+#ifndef DISABLE_ASSEMBLY_REMAPPING
        MonoAssemblyName maped_aname;
 
        aname = mono_assembly_remap_version (aname, &maped_aname);
+#endif
 
        res = mono_assembly_invoke_search_hook_internal (aname, refonly, FALSE);
 
index 504bdcb526e94b40f97f393f253c5272a349fe38..33983b151794b3888f29b19c231105b4d8cb8981 100644 (file)
@@ -128,6 +128,18 @@ mono_gc_base_init (void)
        gc_initialized = TRUE;
 }
 
+/**
+ * mono_gc_collect:
+ * @generation: GC generation identifier
+ *
+ * Perform a garbage collection for the given generation, higher numbers
+ * mean usually older objects. Collecting a high-numbered generation
+ * implies collecting also the lower-numbered generations.
+ * The maximum value for @generation can be retrieved with a call to
+ * mono_gc_max_generation(), so this function is usually called as:
+ *
+ *     mono_gc_collect (mono_gc_max_generation ());
+ */
 void
 mono_gc_collect (int generation)
 {
@@ -145,35 +157,87 @@ mono_gc_collect (int generation)
 #endif
 }
 
+/**
+ * mono_gc_max_generation:
+ *
+ * Get the maximum generation number used by the current garbage
+ * collector. The value will be 0 for the Boehm collector, 1 or more
+ * for the generational collectors.
+ *
+ * Returns: the maximum generation number.
+ */
 int
 mono_gc_max_generation (void)
 {
        return 0;
 }
 
+/**
+ * mono_gc_get_generation:
+ * @object: a managed object
+ *
+ * Get the garbage collector's generation that @object belongs to.
+ * Use this has a hint only.
+ *
+ * Returns: a garbage collector generation number
+ */
 int
 mono_gc_get_generation  (MonoObject *object)
 {
        return 0;
 }
 
+/**
+ * mono_gc_collection_count:
+ * @generation: a GC generation number
+ *
+ * Get how many times a garbage collection has been performed
+ * for the given @generation number.
+ *
+ * Returns: the number of garbage collections
+ */
 int
 mono_gc_collection_count (int generation)
 {
        return GC_gc_no;
 }
 
+/**
+ * mono_gc_add_memory_pressure:
+ * @value: amount of bytes
+ *
+ * Adjust the garbage collector's view of how many bytes of memory
+ * are indirectly referenced by managed objects (for example unmanaged
+ * memory holding image or other binary data).
+ * This is a hint only to the garbage collector algorithm.
+ * Note that negative amounts of @value will decrease the memory
+ * pressure.
+ */
 void
 mono_gc_add_memory_pressure (gint64 value)
 {
 }
 
+/**
+ * mono_gc_get_used_size:
+ *
+ * Get the approximate amount of memory used by managed objects.
+ *
+ * Returns: the amount of memory used in bytes
+ */
 int64_t
 mono_gc_get_used_size (void)
 {
        return GC_get_heap_size () - GC_get_free_bytes ();
 }
 
+/**
+ * mono_gc_get_heap_size:
+ *
+ * Get the amount of memory used by the garbage collector.
+ *
+ * Returns: the size of the heap in bytes
+ */
 int64_t
 mono_gc_get_heap_size (void)
 {
index f791cb1a9eabd9be7ec6bb84518467e16f157f4a..255f442eeafa995a5d0d5fc73b48d5e179e5aa90 100644 (file)
@@ -130,6 +130,7 @@ static MonoAotModuleInfoTable *aot_modules = NULL;
 static const MonoRuntimeInfo supported_runtimes[] = {
        {"v2.0.50215","2.0", { {2,0,0,0},    {8,0,0,0}, { 3, 5, 0, 0 } }        },
        {"v2.0.50727","2.0", { {2,0,0,0},    {8,0,0,0}, { 3, 5, 0, 0 } }        },
+       {"v4.0.20506","4.0", { {4,0,0,0},    {10,0,0,0}, { 4, 0, 0, 0 } }   },
        {"v4.0.30128","4.0", { {4,0,0,0},    {10,0,0,0}, { 4, 0, 0, 0 } }   },
        {"v4.0.30319","4.0", { {4,0,0,0},    {10,0,0,0}, { 4, 0, 0, 0 } }   },
        {"moonlight", "2.1", { {2,0,5,0},    {9,0,0,0}, { 3, 5, 0, 0 } }    },
index c88d40c126794d5dc7c9d390c38afebac8f6c057..5db7a38405f6d3785dfc4437dc2e3aee46feb1b6 100644 (file)
@@ -125,11 +125,24 @@ mono_monitor_init (void)
 void
 mono_monitor_cleanup (void)
 {
+       MonoThreadsSync *mon;
        MonitorArray *marray, *next = NULL;
 
        /*DeleteCriticalSection (&monitor_mutex);*/
 
+       /* The monitors on the freelist don't have weak links - mark them */
+       for (mon = monitor_freelist; mon; mon = mon->data)
+               mon->wait_list = (gpointer)-1;
+
        for (marray = monitor_allocated; marray; marray = next) {
+               int i;
+
+               for (i = 0; i < marray->num_monitors; ++i) {
+                       mon = &marray->monitors [i];
+                       if (mon->wait_list != (gpointer)-1)
+                               mono_gc_weak_link_remove (&mon->data);
+               }
+
                next = marray->next;
                g_free (marray);
        }
@@ -252,6 +265,7 @@ mon_new (gsize id)
                                                        new->wait_list = g_slist_remove (new->wait_list, new->wait_list->data);
                                                }
                                        }
+                                       mono_gc_weak_link_remove (&new->data);
                                        new->data = monitor_freelist;
                                        monitor_freelist = new;
                                }
index 92c70c33963275a2827e4268f9ff9c8bd51e3304..dcb48c5e088d24284aef52c5507e7fe89a013aaa 100644 (file)
@@ -17,6 +17,7 @@
 #include <mono/metadata/mono-debug.h>
 #include <mono/metadata/mono-debug-debugger.h>
 #include <mono/metadata/mono-endian.h>
+#include <mono/metadata/gc-internal.h>
 #include <string.h>
 
 #define DATA_TABLE_CHUNK_SIZE          16384
@@ -228,6 +229,12 @@ mono_debug_init (MonoDebugFormat format)
        mono_debug_initialized = TRUE;
        mono_debug_format = format;
 
+       /*
+        * This must be called before mono_debugger_initialize(), because the
+        * latter registers GC roots.
+        */
+       mono_gc_base_init ();
+
        mono_debugger_initialize (_mono_debug_using_mono_debugger);
 
        mono_debugger_lock ();
index 5822bde39aa6a65fc2e23cb17b61e8433223d241..19b6f6698daddd2d175ccac63293bd1b90826c4f 100644 (file)
@@ -445,15 +445,16 @@ verify_image_file (const char *fname)
 
        mono_image_load_names (image);
 
-       if (!verify_partial_md && !mono_verifier_verify_full_table_data (image, &errors))
-               goto invalid_image;
-
        /*fake an assembly for class loading to work*/
        assembly = g_new0 (MonoAssembly, 1);
        assembly->in_gac = FALSE;
        assembly->image = image;
        image->assembly = assembly;
 
+       if (!verify_partial_md && !mono_verifier_verify_full_table_data (image, &errors))
+               goto invalid_image;
+
+
        table = &image->tables [MONO_TABLE_TYPEDEF];
        for (i = 1; i <= table->rows; ++i) {
                guint32 token = i | MONO_TOKEN_TYPE_DEF;
index 8999ea43453329996d1a5ccb4c4cf45f13299a74..3408b88879a8451244441a8bb60d12dff0b30bea 100644 (file)
@@ -108,7 +108,7 @@ typedef void (*MonoProfileAssemblyResult) (MonoProfiler *prof, MonoAssembly *ass
 
 typedef void (*MonoProfileMethodInline)   (MonoProfiler *prof, MonoMethod   *parent, MonoMethod *child, int *ok);
 
-typedef void (*MonoProfileThreadFunc)     (MonoProfiler *prof, intptr_t tid);
+typedef void (*MonoProfileThreadFunc)     (MonoProfiler *prof, uintptr_t tid);
 typedef void (*MonoProfileAllocFunc)      (MonoProfiler *prof, MonoObject *obj, MonoClass *klass);
 typedef void (*MonoProfileStatFunc)       (MonoProfiler *prof, mono_byte *ip, void *context);
 typedef void (*MonoProfileStatCallChainFunc) (MonoProfiler *prof, int call_chain_depth, mono_byte **ip, void *context);
index dadca2a8c5a238b7175d5833649d29bccdd3a9fd..ba0d151641555eddf715cdc301b5687a06269aa8 100644 (file)
@@ -39,6 +39,7 @@
 
 guint8 *sgen_cardtable;
 
+/*WARNING: This function returns the number of cards regardless of overflow in case of overlapping cards.*/
 static mword
 cards_in_range (mword address, mword size)
 {
@@ -50,9 +51,13 @@ cards_in_range (mword address, mword size)
 
 guint8 *sgen_shadow_cardtable;
 
+#define SGEN_SHADOW_CARDTABLE_END (sgen_shadow_cardtable + CARD_COUNT_IN_BYTES)
+#define SGEN_CARDTABLE_END (sgen_cardtable + CARD_COUNT_IN_BYTES)
+
 static gboolean
 sgen_card_table_region_begin_scanning (mword start, mword end)
 {
+       /*XXX this can be improved to work on words and have a single loop induction var */
        while (start <= end) {
                if (sgen_card_table_card_begin_scanning (start))
                        return TRUE;
@@ -61,12 +66,6 @@ sgen_card_table_region_begin_scanning (mword start, mword end)
        return FALSE;
 }
 
-void
-sgen_card_table_get_card_data (guint8 *dest, mword address, mword cards)
-{
-       memcpy (dest, sgen_card_table_get_shadow_card_address (address), cards);
-}
-
 #else
 
 static gboolean
@@ -76,6 +75,7 @@ sgen_card_table_region_begin_scanning (mword start, mword size)
        guint8 *card = sgen_card_table_get_card_address (start);
        guint8 *end = card + cards_in_range (start, size);
 
+       /*XXX this can be improved to work on words and have a branchless body */
        while (card != end) {
                if (*card++) {
                        res = TRUE;
@@ -88,15 +88,29 @@ sgen_card_table_region_begin_scanning (mword start, mword size)
        return res;
 }
 
-void
-sgen_card_table_get_card_data (guint8 *dest, mword address, mword cards)
-{
-       guint8 *src = sgen_card_table_get_card_address (address);
-       memcpy (dest, src, cards);
-       memset (src, 0, cards);
-}
+#endif
 
+/*FIXME this assumes that major blocks are multiple of 4K which is pretty reasonable */
+gboolean
+sgen_card_table_get_card_data (guint8 *data_dest, mword address, mword cards)
+{
+       mword *start = (mword*)sgen_card_table_get_card_scan_address (address);
+       mword *dest = (mword*)data_dest;
+       mword *end = (mword*)(data_dest + cards);
+       mword mask = 0;
+
+       for (; dest < end; ++dest, ++start) {
+               mword v = *start;
+               *dest = v;
+               mask |= v;
+
+#ifndef SGEN_HAVE_OVERLAPPING_CARDS
+               *start = 0;
 #endif
+       }
+
+       return mask;
+}
 
 static gboolean
 sgen_card_table_address_is_marked (mword address)
@@ -154,11 +168,6 @@ void los_scan_card_table (GrayQueue *queue);
 void los_iterate_live_block_ranges (sgen_cardtable_block_callback callback);
 
 
-static void
-clear_cards (mword start, mword size)
-{
-       memset (sgen_card_table_get_card_address (start), 0, size >> CARD_BITS);
-}
 
 #ifdef SGEN_HAVE_OVERLAPPING_CARDS
 
@@ -168,9 +177,43 @@ move_cards_to_shadow_table (mword start, mword size)
        guint8 *from = sgen_card_table_get_card_address (start);
        guint8 *to = sgen_card_table_get_shadow_card_address (start);
        size_t bytes = cards_in_range (start, size);
-       memcpy (to, from, bytes);
+
+       if (to + bytes > SGEN_SHADOW_CARDTABLE_END) {
+               size_t first_chunk = SGEN_SHADOW_CARDTABLE_END - to;
+
+               memcpy (to, from, first_chunk);
+               memcpy (sgen_shadow_cardtable, from + first_chunk, bytes - first_chunk);
+       } else {
+               memcpy (to, from, bytes);
+       }
+}
+
+static void
+clear_cards (mword start, mword size)
+{
+       guint8 *addr = sgen_card_table_get_card_address (start);
+       size_t bytes = cards_in_range (start, size);
+
+       if (addr + bytes > SGEN_CARDTABLE_END) {
+               size_t first_chunk = SGEN_CARDTABLE_END - addr;
+
+               memset (addr, 0, first_chunk);
+               memset (sgen_cardtable, 0, bytes - first_chunk);
+       } else {
+               memset (addr, 0, bytes);
+       }
 }
 
+
+#else
+
+static void
+clear_cards (mword start, mword size)
+{
+       memset (sgen_card_table_get_card_address (start), 0, cards_in_range (start, size));
+}
+
+
 #endif
 
 static void
@@ -178,7 +221,7 @@ card_table_clear (void)
 {
        /*XXX we could do this in 2 ways. using mincore or iterating over all sections/los objects */
        if (use_cardtable) {
-               major.iterate_live_block_ranges (clear_cards);
+               major_collector.iterate_live_block_ranges (clear_cards);
                los_iterate_live_block_ranges (clear_cards);
        }
 }
@@ -187,14 +230,15 @@ scan_from_card_tables (void *start_nursery, void *end_nursery, GrayQueue *queue)
 {
        if (use_cardtable) {
 #ifdef SGEN_HAVE_OVERLAPPING_CARDS
+       /*FIXME we should have a bit on each block/los object telling if the object have marked cards.*/
        /*First we copy*/
-       major.iterate_live_block_ranges (move_cards_to_shadow_table);
+       major_collector.iterate_live_block_ranges (move_cards_to_shadow_table);
        los_iterate_live_block_ranges (move_cards_to_shadow_table);
 
        /*Then we clear*/
        card_table_clear ();
 #endif
-               major.scan_card_table (queue);
+               major_collector.scan_card_table (queue);
                los_scan_card_table (queue);
        }
 }
@@ -243,59 +287,93 @@ sgen_cardtable_scan_object (char *obj, mword obj_size, guint8 *cards, SgenGrayQu
                return;
 
        if (vt->rank) {
+               guint8 *card_data, *card_base;
+               guint8 *card_data_end;
+               char *obj_start = sgen_card_table_align_pointer (obj);
+               char *obj_end = obj + obj_size;
+               size_t card_count;
+
                MonoArray *arr = (MonoArray*)obj;
                mword desc = (mword)klass->element_class->gc_descr;
-               char *start = sgen_card_table_align_pointer (obj);
-               char *end = obj + obj_size;
-               int size = mono_array_element_size (klass);
+               int elem_size = mono_array_element_size (klass);
 
-               g_assert (desc);
+#ifdef SGEN_HAVE_OVERLAPPING_CARDS
+               guint8 *overflow_scan_end = NULL;
+#endif
 
-               for (; start <= end; start += CARD_SIZE_IN_BYTES) {
-                       char *elem, *card_end;
-                       uintptr_t index;
+               if (cards)
+                       card_data = cards;
+               else
+                       card_data = sgen_card_table_get_card_scan_address ((mword)obj);
 
-                       if (cards) {
-                               if (!*cards++)
-                                       continue;
-                       } else if (!sgen_card_table_card_begin_scanning ((mword)start)) {
+               card_base = card_data;
+               card_count = cards_in_range ((mword)obj, obj_size);
+               card_data_end = card_data + card_count;
+
+
+#ifdef SGEN_HAVE_OVERLAPPING_CARDS
+               /*Check for overflow and if so, setup to scan in two steps*/
+               if (!cards && card_data_end >= SGEN_SHADOW_CARDTABLE_END) {
+                       overflow_scan_end = sgen_shadow_cardtable + (card_data_end - SGEN_SHADOW_CARDTABLE_END);
+                       card_data_end = SGEN_SHADOW_CARDTABLE_END;
+               }
+
+LOOP_HEAD:
+#endif
+               /*FIXME use card skipping code*/
+               for (; card_data < card_data_end; ++card_data) {
+                       int index;
+                       int idx = card_data - card_base;
+                       char *start = (char*)(obj_start + idx * CARD_SIZE_IN_BYTES);
+                       char *card_end = start + CARD_SIZE_IN_BYTES;
+                       char *elem;
+
+                       if (!*card_data)
                                continue;
-                       }
 
-                       card_end = start + CARD_SIZE_IN_BYTES;
-                       if (end < card_end)
-                               card_end = end;
+                       if (!cards)
+                               sgen_card_table_prepare_card_for_scanning (card_data);
+
+                       card_end = MIN (card_end, obj_end);
 
                        if (start <= (char*)arr->vector)
                                index = 0;
                        else
-                               index = ARRAY_OBJ_INDEX (start, obj, size);
+                               index = ARRAY_OBJ_INDEX (start, obj, elem_size);
 
-                       elem = (char*)mono_array_addr_with_size ((MonoArray*)obj, size, index);
+                       elem = (char*)mono_array_addr_with_size ((MonoArray*)obj, elem_size, index);
                        if (klass->element_class->valuetype) {
-                               while (elem < card_end) {
-                                       major.minor_scan_vtype (elem, desc, nursery_start, nursery_next, queue);
-                                       elem += size;
-                               }
+                               for (; elem < card_end; elem += elem_size)
+                                       major_collector.minor_scan_vtype (elem, desc, nursery_start, nursery_next, queue);
                        } else {
-                               while (elem < card_end) {
+                               for (; elem < card_end; elem += SIZEOF_VOID_P) {
                                        gpointer new, old = *(gpointer*)elem;
+                                       /*XXX it might be faster to do a nursery check here instead as it avoid a call*/
                                        if (old) {
-                                               major.copy_object ((void**)elem, queue);
+                                               major_collector.copy_object ((void**)elem, queue);
                                                new = *(gpointer*)elem;
                                                if (G_UNLIKELY (ptr_in_nursery (new)))
                                                        mono_sgen_add_to_global_remset (elem);
                                        }
-                                       elem += size;
                                }
                        }
                }
+
+#ifdef SGEN_HAVE_OVERLAPPING_CARDS
+               if (overflow_scan_end) {
+                       card_data = sgen_shadow_cardtable;
+                       card_data_end = overflow_scan_end;
+                       overflow_scan_end = NULL;
+                       goto LOOP_HEAD;
+               }
+#endif
+
        } else {
                if (cards) {
                        if (sgen_card_table_is_range_marked (cards, obj_size))
-                               major.minor_scan_object (obj, queue);
+                               major_collector.minor_scan_object (obj, queue);
                } else if (sgen_card_table_region_begin_scanning ((mword)obj, obj_size)) {
-                       major.minor_scan_object (obj, queue);
+                       major_collector.minor_scan_object (obj, queue);
                }
        }
 }
@@ -335,10 +413,10 @@ card_tables_collect_starts (gboolean begin)
 #ifdef CARDTABLE_STATS
        if (begin) {
                total_cards = marked_cards = remarked_cards = 0;
-               major.iterate_live_block_ranges (count_marked_cards);
+               major_collector.iterate_live_block_ranges (count_marked_cards);
                los_iterate_live_block_ranges (count_marked_cards);
        } else {
-               major.iterate_live_block_ranges (count_marked_cards);
+               major_collector.iterate_live_block_ranges (count_marked_cards);
                los_iterate_live_block_ranges (count_remarked_cards);
                printf ("cards total %d marked %d remarked %d\n", total_cards, marked_cards, remarked_cards);
        }
index ac92aa1f4ea39e5ff3254f8f285c8edf277f7f71..97430eab34e73a005469aef7b3b411a0c7e9aa22 100644 (file)
 
 #define SGEN_HAVE_CARDTABLE    1
 
-#if SIZEOF_VOID_P == 8
-#define SGEN_HAVE_OVERLAPPING_CARDS    1
-#endif
-
 #ifdef SGEN_HAVE_CARDTABLE
 
 void sgen_card_table_reset_region (mword start, mword end) MONO_INTERNAL;
@@ -37,15 +33,26 @@ void* sgen_card_table_align_pointer (void *ptr) MONO_INTERNAL;
 void sgen_card_table_mark_address (mword address) MONO_INTERNAL;
 void sgen_card_table_mark_range (mword address, mword size) MONO_INTERNAL;
 void sgen_cardtable_scan_object (char *obj, mword obj_size, guint8 *cards, SgenGrayQueue *queue) MONO_INTERNAL;
-void sgen_card_table_get_card_data (guint8 *dest, mword address, mword cards) MONO_INTERNAL;
+gboolean sgen_card_table_get_card_data (guint8 *dest, mword address, mword cards) MONO_INTERNAL;
 typedef void (*sgen_cardtable_block_callback) (mword start, mword size);
 
+/*How many bytes a single card covers*/
 #define CARD_BITS 9
+
+/* How many bits of the address space is covered by the card table.
+ * If this value is smaller than the number of address bits, card aliasing is required.
+ */
+#define CARD_TABLE_BITS 32
+
 #define CARD_SIZE_IN_BYTES (1 << CARD_BITS)
-#define CARD_COUNT_BITS (32 - 9)
+#define CARD_COUNT_BITS (CARD_TABLE_BITS - CARD_BITS)
 #define CARD_COUNT_IN_BYTES (1 << CARD_COUNT_BITS)
 #define CARD_MASK ((1 << CARD_COUNT_BITS) - 1)
 
+#if SIZEOF_VOID_P * 8 > CARD_TABLE_BITS
+#define SGEN_HAVE_OVERLAPPING_CARDS    1
+#endif
+
 extern guint8 *sgen_cardtable MONO_INTERNAL;
 
 
@@ -71,6 +78,13 @@ sgen_card_table_card_begin_scanning (mword address)
        return *sgen_card_table_get_shadow_card_address (address) != 0;
 }
 
+static inline void
+sgen_card_table_prepare_card_for_scanning (guint8 *card)
+{
+}
+
+#define sgen_card_table_get_card_scan_address sgen_card_table_get_shadow_card_address
+
 #else
 
 static inline guint8*
@@ -87,6 +101,15 @@ sgen_card_table_card_begin_scanning (mword address)
        *card = 0;
        return res;
 }
+
+static inline void
+sgen_card_table_prepare_card_for_scanning (guint8 *card)
+{
+       *card = 0;
+}
+
+#define sgen_card_table_get_card_scan_address sgen_card_table_get_card_address
+
 #endif
 
 #endif
index e84b7b880c66969f36d25ef947b254c9fd106dc6..a1c67a8bafb3bdea47439fa0ce20915a79cddeeb 100644 (file)
@@ -776,7 +776,7 @@ static int mark_ephemerons_in_range (CopyOrMarkObjectFunc copy_func, char *start
 static void clear_unreachable_ephemerons (CopyOrMarkObjectFunc copy_func, char *start, char *end, GrayQueue *queue);
 static void null_ephemerons_for_domain (MonoDomain *domain);
 
-SgenMajorCollector major;
+SgenMajorCollector major_collector;
 
 #include "sgen-protocol.c"
 #include "sgen-pinning.c"
@@ -1223,7 +1223,7 @@ mono_gc_scan_for_specific_ref (MonoObject *key)
        mono_sgen_scan_area_with_callback (nursery_section->data, nursery_section->end_data,
                        (IterateObjectCallbackFunc)scan_object_for_specific_ref_callback, key);
 
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)scan_object_for_specific_ref_callback, key);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)scan_object_for_specific_ref_callback, key);
 
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
                scan_object_for_specific_ref (bigobj->data, key);
@@ -1250,8 +1250,10 @@ clear_nursery_fragments (char *next)
        Fragment *frag;
        if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION) {
                g_assert (next <= nursery_frag_real_end);
+               DEBUG (4, fprintf (gc_debug_file, "Clear nursery frag %p-%p\n", next, nursery_frag_real_end));
                memset (next, 0, nursery_frag_real_end - next);
                for (frag = nursery_fragments; frag; frag = frag->next) {
+                       DEBUG (4, fprintf (gc_debug_file, "Clear nursery frag %p-%p\n", frag->fragment_start, frag->fragment_end));
                        memset (frag->fragment_start, 0, frag->fragment_end - frag->fragment_start);
                }
        }
@@ -1364,7 +1366,7 @@ check_for_xdomain_refs (void)
        mono_sgen_scan_area_with_callback (nursery_section->data, nursery_section->end_data,
                        (IterateObjectCallbackFunc)scan_object_for_xdomain_refs, NULL);
 
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)scan_object_for_xdomain_refs, NULL);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)scan_object_for_xdomain_refs, NULL);
 
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
                scan_object_for_xdomain_refs (bigobj->data, bigobj->size, NULL);
@@ -1404,14 +1406,14 @@ static void
 clear_domain_free_major_non_pinned_object_callback (char *obj, size_t size, MonoDomain *domain)
 {
        if (need_remove_object_for_domain (obj, domain))
-               major.free_non_pinned_object (obj, size);
+               major_collector.free_non_pinned_object (obj, size);
 }
 
 static void
 clear_domain_free_major_pinned_object_callback (char *obj, size_t size, MonoDomain *domain)
 {
        if (need_remove_object_for_domain (obj, domain))
-               major.free_pinned_object (obj, size);
+               major_collector.free_pinned_object (obj, size);
 }
 
 /*
@@ -1456,7 +1458,7 @@ mono_gc_clear_domain (MonoDomain * domain)
           objects with major-mark&sweep), but we might need to
           dereference a pointer from an object to another object if
           the first object is a proxy. */
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)clear_domain_process_major_object_callback, domain);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)clear_domain_process_major_object_callback, domain);
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
                clear_domain_process_object (bigobj->data, domain);
 
@@ -1477,8 +1479,8 @@ mono_gc_clear_domain (MonoDomain * domain)
                prev = bigobj;
                bigobj = bigobj->next;
        }
-       major.iterate_objects (TRUE, FALSE, (IterateObjectCallbackFunc)clear_domain_free_major_non_pinned_object_callback, domain);
-       major.iterate_objects (FALSE, TRUE, (IterateObjectCallbackFunc)clear_domain_free_major_pinned_object_callback, domain);
+       major_collector.iterate_objects (TRUE, FALSE, (IterateObjectCallbackFunc)clear_domain_free_major_non_pinned_object_callback, domain);
+       major_collector.iterate_objects (FALSE, TRUE, (IterateObjectCallbackFunc)clear_domain_free_major_pinned_object_callback, domain);
 
        UNLOCK_GC;
 }
@@ -1547,7 +1549,7 @@ mono_sgen_add_to_global_remset (gpointer ptr)
 
        g_assert (!ptr_in_nursery (ptr) && ptr_in_nursery (*(gpointer*)ptr));
 
-       lock = (current_collection_generation == GENERATION_OLD && major.is_parallel);
+       lock = (current_collection_generation == GENERATION_OLD && major_collector.is_parallel);
        if (lock)
                LOCK_GLOBAL_REMSET;
 
@@ -1604,10 +1606,10 @@ drain_gray_stack (GrayQueue *queue)
                        if (!obj)
                                break;
                        DEBUG (9, fprintf (gc_debug_file, "Precise gray object scan %p (%s)\n", obj, safe_name (obj)));
-                       major.minor_scan_object (obj, queue);
+                       major_collector.minor_scan_object (obj, queue);
                }
        } else {
-               if (major.is_parallel && queue == &workers_distribute_gray_queue)
+               if (major_collector.is_parallel && queue == &workers_distribute_gray_queue)
                        return;
 
                for (;;) {
@@ -1615,7 +1617,7 @@ drain_gray_stack (GrayQueue *queue)
                        if (!obj)
                                break;
                        DEBUG (9, fprintf (gc_debug_file, "Precise gray object scan %p (%s)\n", obj, safe_name (obj)));
-                       major.major_scan_object (obj, queue);
+                       major_collector.major_scan_object (obj, queue);
                }
        }
 }
@@ -2051,9 +2053,9 @@ alloc_nursery (void)
        g_assert (nursery_size == DEFAULT_NURSERY_SIZE);
        alloc_size = nursery_size;
 #ifdef SGEN_ALIGN_NURSERY
-       data = major.alloc_heap (alloc_size, alloc_size, DEFAULT_NURSERY_BITS);
+       data = major_collector.alloc_heap (alloc_size, alloc_size, DEFAULT_NURSERY_BITS);
 #else
-       data = major.alloc_heap (alloc_size, 0, DEFAULT_NURSERY_BITS);
+       data = major_collector.alloc_heap (alloc_size, 0, DEFAULT_NURSERY_BITS);
 #endif
        nursery_start = data;
        nursery_real_end = nursery_start + nursery_size;
@@ -2117,11 +2119,12 @@ add_nursery_frag (size_t frag_size, char* frag_start, char* frag_end)
        Fragment *fragment;
        DEBUG (4, fprintf (gc_debug_file, "Found empty fragment: %p-%p, size: %zd\n", frag_start, frag_end, frag_size));
        binary_protocol_empty (frag_start, frag_size);
-       /* memsetting just the first chunk start is bound to provide better cache locality */
-       if (nursery_clear_policy == CLEAR_AT_GC)
-               memset (frag_start, 0, frag_size);
        /* Not worth dealing with smaller fragments: need to tune */
        if (frag_size >= FRAGMENT_MIN_SIZE) {
+               /* memsetting just the first chunk start is bound to provide better cache locality */
+               if (nursery_clear_policy == CLEAR_AT_GC)
+                       memset (frag_start, 0, frag_size);
+
                fragment = alloc_fragment ();
                fragment->fragment_start = frag_start;
                fragment->fragment_limit = frag_start;
@@ -2173,7 +2176,7 @@ finish_gray_stack (char *start_addr, char *end_addr, int generation, GrayQueue *
        TV_DECLARE (btv);
        int fin_ready;
        int ephemeron_rounds = 0;
-       CopyOrMarkObjectFunc copy_func = current_collection_generation == GENERATION_NURSERY ? major.copy_object : major.copy_or_mark_object;
+       CopyOrMarkObjectFunc copy_func = current_collection_generation == GENERATION_NURSERY ? major_collector.copy_object : major_collector.copy_or_mark_object;
 
        /*
         * We copied all the reachable objects. Now it's the time to copy
@@ -2271,7 +2274,7 @@ check_scan_starts (void)
        if (!do_scan_starts_check)
                return;
        mono_sgen_check_section_scan_starts (nursery_section);
-       major.check_scan_starts ();
+       major_collector.check_scan_starts ();
 }
 
 static int last_num_pinned = 0;
@@ -2451,7 +2454,7 @@ dump_heap (const char *type, int num, const char *reason)
 
        mono_sgen_dump_section (nursery_section, "nursery");
 
-       major.dump_heap (heap_dump_file);
+       major_collector.dump_heap (heap_dump_file);
 
        fprintf (heap_dump_file, "<los>\n");
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
@@ -2467,7 +2470,7 @@ mono_sgen_register_moved_object (void *obj, void *destination)
        g_assert (mono_profiler_events & MONO_PROFILE_GC_MOVES);
 
        /* FIXME: handle this for parallel collector */
-       g_assert (!major.is_parallel);
+       g_assert (!major_collector.is_parallel);
 
        if (moved_objects_idx == MOVED_OBJECTS_NUM) {
                mono_profiler_gc_moves (moved_objects, moved_objects_idx);
@@ -2559,7 +2562,7 @@ static gboolean
 need_major_collection (void)
 {
        mword los_alloced = los_memory_usage - MIN (last_los_memory_usage, los_memory_usage);
-       return minor_collection_sections_alloced * major.section_size + los_alloced > minor_collection_allowance;
+       return minor_collection_sections_alloced * major_collector.section_size + los_alloced > minor_collection_allowance;
 }
 
 /*
@@ -2593,7 +2596,7 @@ collect_nursery (size_t requested_size)
 
        /* world must be stopped already */
        TV_GETTIME (all_atv);
-       TV_GETTIME (atv);
+       atv = all_atv;
 
        /* Pinning depends on this */
        clear_nursery_fragments (orig_nursery_next);
@@ -2606,7 +2609,7 @@ collect_nursery (size_t requested_size)
 
        nursery_section->next_data = nursery_next;
 
-       major.start_nursery_collection ();
+       major_collector.start_nursery_collection ();
 
        gray_object_queue_init (&gray_queue, mono_sgen_get_unmanaged_allocator ());
 
@@ -2643,8 +2646,8 @@ collect_nursery (size_t requested_size)
        DEBUG (2, fprintf (gc_debug_file, "Old generation scan: %d usecs\n", TV_ELAPSED (atv, btv)));
 
        if (use_cardtable) {
+               atv = btv;
                card_tables_collect_starts (TRUE);
-               TV_GETTIME (atv);
                scan_from_card_tables (nursery_start, nursery_next, &gray_queue);
                TV_GETTIME (btv);
                time_minor_scan_card_table += TV_ELAPSED_MS (atv, btv);
@@ -2655,8 +2658,8 @@ collect_nursery (size_t requested_size)
        TV_GETTIME (atv);
        time_minor_scan_pinned += TV_ELAPSED_MS (btv, atv);
        /* registered roots, this includes static fields */
-       scan_from_registered_roots (major.copy_object, nursery_start, nursery_next, ROOT_TYPE_NORMAL, &gray_queue);
-       scan_from_registered_roots (major.copy_object, nursery_start, nursery_next, ROOT_TYPE_WBARRIER, &gray_queue);
+       scan_from_registered_roots (major_collector.copy_object, nursery_start, nursery_next, ROOT_TYPE_NORMAL, &gray_queue);
+       scan_from_registered_roots (major_collector.copy_object, nursery_start, nursery_next, ROOT_TYPE_WBARRIER, &gray_queue);
        TV_GETTIME (btv);
        time_minor_scan_registered_roots += TV_ELAPSED_MS (atv, btv);
        /* thread data */
@@ -2681,7 +2684,7 @@ collect_nursery (size_t requested_size)
        if (consistency_check_at_minor_collection)
                check_major_refs ();
 
-       major.finish_nursery_collection ();
+       major_collector.finish_nursery_collection ();
 
        TV_GETTIME (all_btv);
        mono_stats.minor_gc_time_usecs += TV_ELAPSED (all_atv, all_btv);
@@ -2725,7 +2728,7 @@ major_do_collection (const char *reason)
         */
        char *heap_start = NULL;
        char *heap_end = (char*)-1;
-       int old_num_major_sections = major.get_num_major_sections ();
+       int old_num_major_sections = major_collector.get_num_major_sections ();
        int num_major_sections, num_major_sections_saved, save_target, allowance_target;
        mword los_memory_saved, los_memory_alloced, old_los_memory_usage;
 
@@ -2742,7 +2745,7 @@ major_do_collection (const char *reason)
        binary_protocol_collection (GENERATION_OLD);
        check_scan_starts ();
        gray_object_queue_init (&gray_queue, mono_sgen_get_unmanaged_allocator ());
-       if (major.is_parallel)
+       if (major_collector.is_parallel)
                gray_object_queue_init (&workers_distribute_gray_queue, mono_sgen_get_unmanaged_allocator ());
 
        degraded_mode = 0;
@@ -2752,7 +2755,7 @@ major_do_collection (const char *reason)
 
        /* world must be stopped already */
        TV_GETTIME (all_atv);
-       TV_GETTIME (atv);
+       atv = all_atv;
 
        /* Pinning depends on this */
        clear_nursery_fragments (nursery_next);
@@ -2794,7 +2797,7 @@ major_do_collection (const char *reason)
        DEBUG (6, fprintf (gc_debug_file, "Pinning from sections\n"));
        /* first pass for the sections */
        mono_sgen_find_section_pin_queue_start_end (nursery_section);
-       major.find_pin_queue_start_ends (WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       major_collector.find_pin_queue_start_ends (WORKERS_DISTRIBUTE_GRAY_QUEUE);
        /* identify possible pointers to the insize of large objects */
        DEBUG (6, fprintf (gc_debug_file, "Pinning from large objects\n"));
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next) {
@@ -2810,14 +2813,14 @@ major_do_collection (const char *reason)
        }
        /* second pass for the sections */
        mono_sgen_pin_objects_in_section (nursery_section, WORKERS_DISTRIBUTE_GRAY_QUEUE);
-       major.pin_objects (WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       major_collector.pin_objects (WORKERS_DISTRIBUTE_GRAY_QUEUE);
 
        TV_GETTIME (btv);
        time_major_pinning += TV_ELAPSED_MS (atv, btv);
        DEBUG (2, fprintf (gc_debug_file, "Finding pinned pointers: %d in %d usecs\n", next_pin_slot, TV_ELAPSED (atv, btv)));
        DEBUG (4, fprintf (gc_debug_file, "Start scan with %d pinned objects\n", next_pin_slot));
 
-       major.init_to_space ();
+       major_collector.init_to_space ();
 
        workers_start_all_workers (1);
 
@@ -2825,8 +2828,8 @@ major_do_collection (const char *reason)
        time_major_scan_pinned += TV_ELAPSED_MS (btv, atv);
 
        /* registered roots, this includes static fields */
-       scan_from_registered_roots (major.copy_or_mark_object, heap_start, heap_end, ROOT_TYPE_NORMAL, WORKERS_DISTRIBUTE_GRAY_QUEUE);
-       scan_from_registered_roots (major.copy_or_mark_object, heap_start, heap_end, ROOT_TYPE_WBARRIER, WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       scan_from_registered_roots (major_collector.copy_or_mark_object, heap_start, heap_end, ROOT_TYPE_NORMAL, WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       scan_from_registered_roots (major_collector.copy_or_mark_object, heap_start, heap_end, ROOT_TYPE_WBARRIER, WORKERS_DISTRIBUTE_GRAY_QUEUE);
        TV_GETTIME (btv);
        time_major_scan_registered_roots += TV_ELAPSED_MS (atv, btv);
 
@@ -2841,8 +2844,8 @@ major_do_collection (const char *reason)
        time_major_scan_alloc_pinned += TV_ELAPSED_MS (atv, btv);
 
        /* scan the list of objects ready for finalization */
-       scan_finalizer_entries (major.copy_or_mark_object, fin_ready_list, WORKERS_DISTRIBUTE_GRAY_QUEUE);
-       scan_finalizer_entries (major.copy_or_mark_object, critical_fin_list, WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       scan_finalizer_entries (major_collector.copy_or_mark_object, fin_ready_list, WORKERS_DISTRIBUTE_GRAY_QUEUE);
+       scan_finalizer_entries (major_collector.copy_or_mark_object, critical_fin_list, WORKERS_DISTRIBUTE_GRAY_QUEUE);
        TV_GETTIME (atv);
        time_major_scan_finalized += TV_ELAPSED_MS (btv, atv);
        DEBUG (2, fprintf (gc_debug_file, "Root scan: %d usecs\n", TV_ELAPSED (btv, atv)));
@@ -2850,7 +2853,7 @@ major_do_collection (const char *reason)
        TV_GETTIME (btv);
        time_major_scan_big_objects += TV_ELAPSED_MS (atv, btv);
 
-       if (major.is_parallel) {
+       if (major_collector.is_parallel) {
                while (!gray_object_queue_is_empty (WORKERS_DISTRIBUTE_GRAY_QUEUE)) {
                        workers_distribute_gray_queue_sections ();
                        usleep (2000);
@@ -2859,7 +2862,7 @@ major_do_collection (const char *reason)
        workers_change_num_working (-1);
        workers_join ();
 
-       if (major.is_parallel)
+       if (major_collector.is_parallel)
                g_assert (gray_object_queue_is_empty (&gray_queue));
 
        /* all the objects in the heap */
@@ -2896,7 +2899,7 @@ major_do_collection (const char *reason)
        TV_GETTIME (atv);
        time_major_los_sweep += TV_ELAPSED_MS (btv, atv);
 
-       major.sweep ();
+       major_collector.sweep ();
 
        TV_GETTIME (btv);
        time_major_sweep += TV_ELAPSED_MS (atv, btv);
@@ -2926,12 +2929,12 @@ major_do_collection (const char *reason)
 
        g_assert (gray_object_queue_is_empty (&gray_queue));
 
-       num_major_sections = major.get_num_major_sections ();
+       num_major_sections = major_collector.get_num_major_sections ();
 
        num_major_sections_saved = MAX (old_num_major_sections - num_major_sections, 0);
        los_memory_saved = MAX (old_los_memory_usage - los_memory_usage, 1);
 
-       save_target = ((num_major_sections * major.section_size) + los_memory_saved) / 2;
+       save_target = ((num_major_sections * major_collector.section_size) + los_memory_saved) / 2;
        /*
         * We aim to allow the allocation of as many sections as is
         * necessary to reclaim save_target sections in the next
@@ -2947,14 +2950,14 @@ major_do_collection (const char *reason)
         *
         * hence:
         */
-       allowance_target = (mword)((double)save_target * (double)(minor_collection_sections_alloced * major.section_size + los_memory_alloced) / (double)(num_major_sections_saved * major.section_size + los_memory_saved));
+       allowance_target = (mword)((double)save_target * (double)(minor_collection_sections_alloced * major_collector.section_size + los_memory_alloced) / (double)(num_major_sections_saved * major_collector.section_size + los_memory_saved));
 
-       minor_collection_allowance = MAX (MIN (allowance_target, num_major_sections * major.section_size + los_memory_usage), MIN_MINOR_COLLECTION_ALLOWANCE);
+       minor_collection_allowance = MAX (MIN (allowance_target, num_major_sections * major_collector.section_size + los_memory_usage), MIN_MINOR_COLLECTION_ALLOWANCE);
 
        minor_collection_sections_alloced = 0;
        last_los_memory_usage = los_memory_usage;
 
-       major.finish_major_collection ();
+       major_collector.finish_major_collection ();
 
        check_scan_starts ();
 
@@ -3026,7 +3029,7 @@ report_internal_mem_usage (void)
        printf ("Internal memory usage:\n");
        mono_sgen_report_internal_mem_usage ();
        printf ("Pinned memory usage:\n");
-       major.report_pinned_memory_usage ();
+       major_collector.report_pinned_memory_usage ();
 }
 
 /*
@@ -3172,7 +3175,7 @@ alloc_degraded (MonoVTable *vtable, size_t size)
        }
 
        degraded_mode += size;
-       return major.alloc_degraded (vtable, size);
+       return major_collector.alloc_degraded (vtable, size);
 }
 
 /*
@@ -3512,7 +3515,7 @@ mono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size)
                p = alloc_large_inner (vtable, size);
        } else {
                DEBUG (9, g_assert (vtable->klass->inited));
-               p = major.alloc_small_pinned_obj (size, vtable->klass->has_references);
+               p = major_collector.alloc_small_pinned_obj (size, vtable->klass->has_references);
        }
        DEBUG (6, fprintf (gc_debug_file, "Allocated pinned object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
        binary_protocol_alloc_pinned (p, vtable, size);
@@ -3609,7 +3612,7 @@ finalize_in_range (CopyOrMarkObjectFunc copy_func, char *start, char *end, int g
        for (i = 0; i < finalizable_hash_size; ++i) {
                prev = NULL;
                for (entry = finalizable_hash [i]; entry;) {
-                       if ((char*)entry->object >= start && (char*)entry->object < end && !major.is_object_live (entry->object)) {
+                       if ((char*)entry->object >= start && (char*)entry->object < end && !major_collector.is_object_live (entry->object)) {
                                gboolean is_fin_ready = object_is_fin_ready (entry->object);
                                char *copy = entry->object;
                                copy_func ((void**)&copy, queue);
@@ -3676,7 +3679,7 @@ object_is_reachable (char *object, char *start, char *end)
        /*This happens for non nursery objects during minor collections. We just treat all objects as alive.*/
        if (object < start || object >= end)
                return TRUE;
-       return !object_is_fin_ready (object) || major.is_object_live (object);
+       return !object_is_fin_ready (object) || major_collector.is_object_live (object);
 }
 
 /* LOCKING: requires that the GC lock is held */
@@ -3853,7 +3856,7 @@ null_link_in_range (CopyOrMarkObjectFunc copy_func, char *start, char *end, int
                prev = NULL;
                for (entry = disappearing_link_hash [i]; entry;) {
                        char *object = DISLINK_OBJECT (entry);
-                       if (object >= start && object < end && !major.is_object_live (object)) {
+                       if (object >= start && object < end && !major_collector.is_object_live (object)) {
                                gboolean track = DISLINK_TRACK (entry);
                                if (!track && object_is_fin_ready (object)) {
                                        void **p = entry->link;
@@ -4586,12 +4589,11 @@ suspend_handler (int sig, siginfo_t *siginfo, void *context)
        int old_errno = errno;
        gpointer regs [ARCH_NUM_REGS];
        gpointer stack_start;
-       ucontext_t *ctx = (ucontext_t*)context;
 
        id = pthread_self ();
        info = mono_sgen_thread_info_lookup (id);
        info->stopped_domain = mono_domain_get ();
-       info->stopped_ip = (gpointer) ARCH_SIGCTX_IP (ctx);
+       info->stopped_ip = (gpointer) ARCH_SIGCTX_IP (context);
        stop_count = global_stop_count;
        /* duplicate signal */
        if (0 && info->stop_count == stop_count) {
@@ -4602,13 +4604,13 @@ suspend_handler (int sig, siginfo_t *siginfo, void *context)
        /* update the remset info in the thread data structure */
        info->remset = remembered_set;
 #endif
-       stack_start = (char*) ARCH_SIGCTX_SP (ctx) - REDZONE_SIZE;
+       stack_start = (char*) ARCH_SIGCTX_SP (context) - REDZONE_SIZE;
        /* If stack_start is not within the limits, then don't set it
           in info and we will be restarted. */
        if (stack_start >= info->stack_start_limit && info->stack_start <= info->stack_end) {
                info->stack_start = stack_start;
 
-               ARCH_COPY_SIGCTX_REGS (regs, ctx);
+               ARCH_COPY_SIGCTX_REGS (regs, context);
                info->stopped_regs = regs;
        } else {
                g_assert (!info->stack_start);
@@ -4616,7 +4618,7 @@ suspend_handler (int sig, siginfo_t *siginfo, void *context)
 
        /* Notify the JIT */
        if (gc_callbacks.thread_suspend_func)
-               gc_callbacks.thread_suspend_func (info->runtime_data, ctx);
+               gc_callbacks.thread_suspend_func (info->runtime_data, context);
 
        DEBUG (4, fprintf (gc_debug_file, "Posting suspend_ack_semaphore for suspend from %p %p\n", info, (gpointer)ARCH_GET_THREAD ()));
        /* notify the waiting thread */
@@ -4745,9 +4747,9 @@ mono_gc_scan_object (void *obj)
 {
        g_assert_not_reached ();
        if (current_collection_generation == GENERATION_NURSERY)
-               major.copy_object (&obj, &gray_queue);
+               major_collector.copy_object (&obj, &gray_queue);
        else
-               major.copy_or_mark_object (&obj, &gray_queue);
+               major_collector.copy_or_mark_object (&obj, &gray_queue);
        return obj;
 }
 
@@ -4836,7 +4838,7 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                //__builtin_prefetch (ptr);
                if (((void*)ptr < start_nursery || (void*)ptr >= end_nursery)) {
                        gpointer old = *ptr;
-                       major.copy_object (ptr, queue);
+                       major_collector.copy_object (ptr, queue);
                        DEBUG (9, fprintf (gc_debug_file, "Overwrote remset at %p with %p\n", ptr, *ptr));
                        if (old)
                                binary_protocol_ptr_update (ptr, old, *ptr, (gpointer)LOAD_VTABLE (*ptr), safe_object_get_size (*ptr));
@@ -4858,7 +4860,7 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                        return p + 2;
                count = p [1];
                while (count-- > 0) {
-                       major.copy_object (ptr, queue);
+                       major_collector.copy_object (ptr, queue);
                        DEBUG (9, fprintf (gc_debug_file, "Overwrote remset at %p with %p (count: %d)\n", ptr, *ptr, (int)count));
                        if (!global && *ptr >= start_nursery && *ptr < end_nursery)
                                mono_sgen_add_to_global_remset (ptr);
@@ -4869,7 +4871,7 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                ptr = (void**)(*p & ~REMSET_TYPE_MASK);
                if (((void*)ptr >= start_nursery && (void*)ptr < end_nursery))
                        return p + 1;
-               major.minor_scan_object ((char*)ptr, queue);
+               major_collector.minor_scan_object ((char*)ptr, queue);
                return p + 1;
        case REMSET_VTYPE: {
                ptr = (void**)(*p & ~REMSET_TYPE_MASK);
@@ -4878,7 +4880,7 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                desc = p [1];
                count = p [2];
                while (count-- > 0)
-                       ptr = (void**) major.minor_scan_vtype ((char*)ptr, desc, start_nursery, end_nursery, queue);
+                       ptr = (void**) major_collector.minor_scan_vtype ((char*)ptr, desc, start_nursery, end_nursery, queue);
                return p + 3;
        }
        default:
@@ -5614,7 +5616,7 @@ find_object_for_ptr (char *ptr)
         * be called from gdb, so we don't care.
         */
        found_obj = NULL;
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)find_object_for_ptr_callback, ptr);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)find_object_for_ptr_callback, ptr);
        return found_obj;
 }
 
@@ -5834,9 +5836,9 @@ describe_ptr (char *ptr)
        if (ptr_in_nursery (ptr)) {
                printf ("Pointer inside nursery.\n");
        } else {
-               if (major.ptr_is_in_non_pinned_space (ptr)) {
+               if (major_collector.ptr_is_in_non_pinned_space (ptr)) {
                        printf ("Pointer inside oldspace.\n");
-               } else if (major.obj_is_from_pinned_alloc (ptr)) {
+               } else if (major_collector.obj_is_from_pinned_alloc (ptr)) {
                        printf ("Pointer is inside a pinned chunk.\n");
                } else {
                        printf ("Pointer unknown.\n");
@@ -6041,7 +6043,7 @@ check_consistency (void)
        DEBUG (1, fprintf (gc_debug_file, "Begin heap consistency check...\n"));
 
        // Check that oldspace->newspace pointers are registered with the collector
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)check_consistency_callback, NULL);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)check_consistency_callback, NULL);
 
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
                check_consistency_callback (bigobj->data, bigobj->size, NULL);
@@ -6073,7 +6075,7 @@ check_major_refs (void)
 {
        LOSObject *bigobj;
 
-       major.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)check_major_refs_callback, NULL);
+       major_collector.iterate_objects (TRUE, TRUE, (IterateObjectCallbackFunc)check_major_refs_callback, NULL);
 
        for (bigobj = los_object_list; bigobj; bigobj = bigobj->next)
                check_major_refs_callback (bigobj->data, bigobj->size, NULL);
@@ -6143,7 +6145,7 @@ mono_gc_get_used_size (void)
        LOCK_GC;
        tot = los_memory_usage;
        tot += nursery_section->next_data - nursery_section->data;
-       tot += major.get_used_size ();
+       tot += major_collector.get_used_size ();
        /* FIXME: account for pinned objects */
        UNLOCK_GC;
        return tot;
@@ -6354,9 +6356,13 @@ mono_gc_base_init (void)
 {
        char *env;
        char **opts, **ptr;
-       char *major_collector = NULL;
+       char *major_collector_opt = NULL;
        struct sigaction sinfo;
 
+       /* the gc_initialized guard seems to imply this method is
+          idempotent, but LOCK_INIT(gc_mutex) might not be.  It's
+          defined in sgen-gc.h as nothing, so there's no danger at
+          present. */
        LOCK_INIT (gc_mutex);
        LOCK_GC;
        if (gc_initialized) {
@@ -6375,7 +6381,7 @@ mono_gc_base_init (void)
                        char *opt = *ptr;
                        if (g_str_has_prefix (opt, "major=")) {
                                opt = strchr (opt, '=') + 1;
-                               major_collector = g_strdup (opt);
+                               major_collector_opt = g_strdup (opt);
                        }
                }
        } else {
@@ -6395,25 +6401,25 @@ mono_gc_base_init (void)
        mono_sgen_register_fixed_internal_mem_type (INTERNAL_MEM_STORE_REMSET, sizeof (GenericStoreRememberedSet));
        mono_sgen_register_fixed_internal_mem_type (INTERNAL_MEM_EPHEMERON_LINK, sizeof (EphemeronLinkNode));
 
-       if (!major_collector || !strcmp (major_collector, "marksweep")) {
-               mono_sgen_marksweep_init (&major);
-       } else if (!major_collector || !strcmp (major_collector, "marksweep-fixed")) {
-               mono_sgen_marksweep_fixed_init (&major);
-       } else if (!major_collector || !strcmp (major_collector, "marksweep-par")) {
-               mono_sgen_marksweep_par_init (&major);
+       if (!major_collector_opt || !strcmp (major_collector_opt, "marksweep")) {
+               mono_sgen_marksweep_init (&major_collector);
+       } else if (!major_collector_opt || !strcmp (major_collector_opt, "marksweep-fixed")) {
+               mono_sgen_marksweep_fixed_init (&major_collector);
+       } else if (!major_collector_opt || !strcmp (major_collector_opt, "marksweep-par")) {
+               mono_sgen_marksweep_par_init (&major_collector);
                workers_init (mono_cpu_count ());
-       } else if (!major_collector || !strcmp (major_collector, "marksweep-fixed-par")) {
-               mono_sgen_marksweep_fixed_par_init (&major);
+       } else if (!major_collector_opt || !strcmp (major_collector_opt, "marksweep-fixed-par")) {
+               mono_sgen_marksweep_fixed_par_init (&major_collector);
                workers_init (mono_cpu_count ());
-       } else if (!strcmp (major_collector, "copying")) {
-               mono_sgen_copying_init (&major);
+       } else if (!strcmp (major_collector_opt, "copying")) {
+               mono_sgen_copying_init (&major_collector);
        } else {
-               fprintf (stderr, "Unknown major collector `%s'.\n", major_collector);
+               fprintf (stderr, "Unknown major collector `%s'.\n", major_collector_opt);
                exit (1);
        }
 
 #ifdef SGEN_HAVE_CARDTABLE
-       use_cardtable = major.supports_cardtable;
+       use_cardtable = major_collector.supports_cardtable;
 #else
        use_cardtable = FALSE;
 #endif
@@ -6429,7 +6435,7 @@ mono_gc_base_init (void)
                                        use_cardtable = FALSE;
                                } else if (strcmp (opt, "cardtable") == 0) {
                                        if (!use_cardtable) {
-                                               if (major.supports_cardtable)
+                                               if (major_collector.supports_cardtable)
                                                        fprintf (stderr, "The cardtable write barrier is not supported on this platform.\n");
                                                else
                                                        fprintf (stderr, "The major collector does not support the cardtable write barrier.\n");
@@ -6461,21 +6467,21 @@ mono_gc_base_init (void)
                                continue;
                        }
 #endif
-                       if (!(major.handle_gc_param && major.handle_gc_param (opt))) {
+                       if (!(major_collector.handle_gc_param && major_collector.handle_gc_param (opt))) {
                                fprintf (stderr, "MONO_GC_PARAMS must be a comma-delimited list of one or more of the following:\n");
                                fprintf (stderr, "  nursery-size=N (where N is an integer, possibly with a k, m or a g suffix)\n");
                                fprintf (stderr, "  major=COLLECTOR (where COLLECTOR is `marksweep', `marksweep-par' or `copying')\n");
                                fprintf (stderr, "  wbarrier=WBARRIER (where WBARRIER is `remset' or `cardtable')\n");
-                               if (major.print_gc_param_usage)
-                                       major.print_gc_param_usage ();
+                               if (major_collector.print_gc_param_usage)
+                                       major_collector.print_gc_param_usage ();
                                exit (1);
                        }
                }
                g_strfreev (opts);
        }
 
-       if (major_collector)
-               g_free (major_collector);
+       if (major_collector_opt)
+               g_free (major_collector_opt);
 
        nursery_size = DEFAULT_NURSERY_SIZE;
        minor_collection_allowance = MIN_MINOR_COLLECTION_ALLOWANCE;
index d41bf3271a529d459d73c625b14aff04f6a0ff81..5e99839fdaeae6de33212011802bc51669921c0a 100644 (file)
@@ -185,6 +185,8 @@ const static int restart_signal_num = SIGXCPU;
  * Recursion is not allowed for the thread lock.
  */
 #define LOCK_DECLARE(name) pthread_mutex_t name = PTHREAD_MUTEX_INITIALIZER
+/* if changing LOCK_INIT to something that isn't idempotent, look at
+   its use in mono_gc_base_init in sgen-gc.c */
 #define LOCK_INIT(name)
 #define LOCK_GC pthread_mutex_lock (&gc_mutex)
 #define UNLOCK_GC pthread_mutex_unlock (&gc_mutex)
index e4fffc9228699da9666ba753f936adfe1c21b276..3fa2f5ad2475319663672df37c6608a7d7d9075c 100644 (file)
@@ -1250,6 +1250,49 @@ major_iterate_live_block_ranges (sgen_cardtable_block_callback callback)
        } END_FOREACH_BLOCK;
 }
 
+#define CARD_WORDS_PER_BLOCK (CARDS_PER_BLOCK / SIZEOF_VOID_P)
+/*
+ * MS blocks are 16K aligned.
+ * Cardtables are 4K aligned, at least.
+ * This means that the cardtable of a given block is 32 bytes aligned.
+ */
+static guint8*
+initial_skip_card (guint8 *card_data)
+{
+       mword *cards = (mword*)card_data;
+       mword card;
+       int i;
+       for (i = 0; i < CARD_WORDS_PER_BLOCK; ++i) {
+               card = cards [i];
+               if (card)
+                       break;
+       }
+
+       if (i == CARD_WORDS_PER_BLOCK)
+               return card_data + CARDS_PER_BLOCK;
+
+#if defined(__i386__) && defined(__GNUC__)
+       return card_data + i * 4 +  (__builtin_ffs (card) - 1) / 8;
+#elif defined(__x86_64__) && defined(__GNUC__)
+       return card_data + i * 8 +  (__builtin_ffsll (card) - 1) / 8;
+#else
+       for (i = i * SIZEOF_VOID_P; i < CARDS_PER_BLOCK; ++i) {
+               if (card_data [i])
+                       return &card_data [i];
+       }
+       return card_data;
+#endif
+}
+
+
+static guint8*
+skip_card (guint8 *card_data, guint8 *card_data_end)
+{
+       while (card_data < card_data_end && !*card_data)
+               ++card_data;
+       return card_data;
+}
+
 #define MS_BLOCK_OBJ_INDEX_FAST(o,b,os)        (((char*)(o) - ((b) + MS_BLOCK_SKIP)) / (os))
 #define MS_BLOCK_OBJ_FAST(b,os,i)                      ((b) + MS_BLOCK_SKIP + (os) * (i))
 #define MS_OBJ_ALLOCED_FAST(o,b)               (*(void**)(o) && (*(char**)(o) < (b) || *(char**)(o) >= (b) + MS_BLOCK_SIZE))
@@ -1260,23 +1303,34 @@ major_scan_card_table (SgenGrayQueue *queue)
        MSBlockInfo *block;
 
        FOREACH_BLOCK (block) {
-               int i;
                int block_obj_size;
-               char *start, *block_start;
+               char *block_start;
 
                if (!block->has_references)
                        continue;
 
                block_obj_size = block->obj_size;
-               start = block_start = block->block;
+               block_start = block->block;
 
                if (block_obj_size >= CARD_SIZE_IN_BYTES) {
-                       guint8 cards [CARDS_PER_BLOCK];
-                       char *obj = (char*)MS_BLOCK_OBJ_FAST (block_start, block_obj_size, 0);
-                       char *end = start + MS_BLOCK_SIZE;
-                       char *base = sgen_card_table_align_pointer (obj);
+                       guint8 *cards;
+#ifndef SGEN_HAVE_OVERLAPPING_CARDS
+                       guint8 cards_data [CARDS_PER_BLOCK];
+#endif
+                       char *obj, *end, *base;
+
+                       /*We can avoid the extra copy since the remark cardtable was cleaned before */
+#ifdef SGEN_HAVE_OVERLAPPING_CARDS
+                       cards = sgen_card_table_get_card_scan_address ((mword)block_start);
+#else
+                       cards = cards_data;
+                       if (!sgen_card_table_get_card_data (cards_data, (mword)block_start, CARDS_PER_BLOCK))
+                               continue;
+#endif
 
-                       sgen_card_table_get_card_data (cards, (mword)start, CARDS_PER_BLOCK);
+                       obj = (char*)MS_BLOCK_OBJ_FAST (block_start, block_obj_size, 0);
+                       end = block_start + MS_BLOCK_SIZE;
+                       base = sgen_card_table_align_pointer (obj);
 
                        while (obj < end) {
                                if (MS_OBJ_ALLOCED_FAST (obj, block_start)) {
@@ -1286,15 +1340,31 @@ major_scan_card_table (SgenGrayQueue *queue)
                                obj += block_obj_size;
                        }
                } else {
-                       for (i = 0; i < CARDS_PER_BLOCK; ++i, start += CARD_SIZE_IN_BYTES) {
+                       guint8 *card_data, *card_base;
+                       guint8 *card_data_end;
+
+                       /*
+                        * This is safe in face of card aliasing for the following reason:
+                        *
+                        * Major blocks are 16k aligned, or 32 cards aligned.
+                        * Cards aliasing happens in powers of two, so as long as major blocks are aligned to their
+                        * sizes, they won't overflow the cardtable overlap modulus.
+                        */
+                       card_data = card_base = sgen_card_table_get_card_scan_address ((mword)block_start);
+                       card_data_end = card_data + CARDS_PER_BLOCK;
+
+                       for (card_data = initial_skip_card (card_data); card_data < card_data_end; ++card_data) { //card_data = skip_card (card_data + 1, card_data_end)) {
                                int index;
-                               char *obj, *end;
+                               int idx = card_data - card_base;
+                               char *start = (char*)(block_start + idx * CARD_SIZE_IN_BYTES);
+                               char *end = start + CARD_SIZE_IN_BYTES;
+                               char *obj;
 
-                               if (!sgen_card_table_card_begin_scanning ((mword)start))
+                               if (!*card_data)
                                        continue;
+                               sgen_card_table_prepare_card_for_scanning (card_data);
 
-                               end = start + CARD_SIZE_IN_BYTES;
-                               if (i == 0)
+                               if (idx == 0)
                                        index = 0;
                                else
                                        index = MS_BLOCK_OBJ_INDEX_FAST (start, block_start, block_obj_size);
@@ -1404,6 +1474,11 @@ mono_sgen_marksweep_init
 
        FILL_COLLECTOR_COPY_OBJECT (collector);
        FILL_COLLECTOR_SCAN_OBJECT (collector);
+
+
+       /*cardtable requires major pages to be 8 cards aligned*/
+       g_assert ((MS_BLOCK_SIZE % (8 * CARD_SIZE_IN_BYTES)) == 0);
+
 }
 
 #endif
index 1c56fbaa4f3c27d0361447efb73d59b094c43151..bdc6242ca75bd271a29cc31e3e400943f8ba73ea 100644 (file)
@@ -40,7 +40,7 @@ static int workers_num_working;
 
 static GrayQueue workers_distribute_gray_queue;
 
-#define WORKERS_DISTRIBUTE_GRAY_QUEUE (major.is_parallel ? &workers_distribute_gray_queue : &gray_queue)
+#define WORKERS_DISTRIBUTE_GRAY_QUEUE (major_collector.is_parallel ? &workers_distribute_gray_queue : &gray_queue)
 
 /*
  * Must be a power of 2.  It seems that larger values don't help much.
@@ -148,7 +148,7 @@ workers_change_num_working (int delta)
 {
        int old, new;
 
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return -1;
 
        do {
@@ -209,7 +209,7 @@ workers_thread_func (void *data_untyped)
 static void
 workers_distribute_gray_queue_sections (void)
 {
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return;
 
        workers_gray_queue_share_redirect (&workers_distribute_gray_queue);
@@ -220,7 +220,7 @@ workers_init (int num_workers)
 {
        int i;
 
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return;
 
        //g_print ("initing %d workers\n", num_workers);
@@ -274,7 +274,7 @@ workers_start_all_workers (int num_additional_workers)
 {
        int i;
 
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return;
 
        g_assert (workers_num_working == 0);
@@ -289,7 +289,7 @@ workers_join (void)
 {
        int i;
 
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return;
 
        //g_print ("joining\n");
@@ -313,7 +313,7 @@ mono_sgen_is_worker_thread (pthread_t thread)
 {
        int i;
 
-       if (!major.is_parallel)
+       if (!major_collector.is_parallel)
                return FALSE;
 
        for (i = 0; i < workers_num; ++i) {
index d983e646ea86dd6d3344b09d260b050923cee9ce..2a6659997a466004724e04089f60058483a452db 100644 (file)
@@ -52,12 +52,16 @@ typedef LPTHREAD_START_ROUTINE WapiThreadStart;
 
 typedef struct _MonoInternalThread MonoInternalThread;
 
+typedef void (*MonoThreadCleanupFunc) (MonoInternalThread* thread);
+
 gpointer mono_create_thread (WapiSecurityAttributes *security,
                                                         guint32 stacksize, WapiThreadStart start,
                                                         gpointer param, guint32 create, gsize *tid) MONO_INTERNAL;
 
 MonoInternalThread* mono_thread_create_internal (MonoDomain *domain, gpointer func, gpointer arg, gboolean threadpool_thread) MONO_INTERNAL;
 
+void mono_threads_install_cleanup (MonoThreadCleanupFunc func) MONO_INTERNAL;
+
 void ves_icall_System_Threading_Thread_ConstructInternalThread (MonoThread *this) MONO_INTERNAL;
 HANDLE ves_icall_System_Threading_Thread_Thread_internal(MonoThread *this_obj, MonoObject *start) MONO_INTERNAL;
 void ves_icall_System_Threading_InternalThread_Thread_free_internal(MonoInternalThread *this_obj, HANDLE thread) MONO_INTERNAL;
index edbc22173be928392253ec9ece0e6c9570f8cd70..de5e7d7166f71cb495664f018ed56603302a43a3 100644 (file)
@@ -556,6 +556,9 @@ static void thread_cleanup (MonoInternalThread *thread)
                        mono_array_set (thread->cached_culture_info, MonoObject*, i, NULL);
        }
 
+       if (mono_thread_cleanup_fn)
+               mono_thread_cleanup_fn (thread);
+
        /* if the thread is not in the hash it has been removed already */
        if (!handle_remove (thread))
                return;
@@ -578,17 +581,6 @@ static void thread_cleanup (MonoInternalThread *thread)
        mono_free_static_data (thread->static_data, TRUE);
        thread->static_data = NULL;
 
-       /*
-        * FIXME: The check for shutting_down here is a kludge and
-        * should be removed.  The reason we need it here is because
-        * mono_thread_manage() does not wait for finalizer threads,
-        * so we might still be at this point in a finalizer thread
-        * after the main thread has cleared the root domain, so
-        * thread could have been zeroed out.
-        */
-       if (mono_thread_cleanup_fn && !shutting_down)
-               mono_thread_cleanup_fn (thread->root_domain_thread);
-
        small_id_free (thread->small_id);
        thread->small_id = -2;
 }
@@ -2995,8 +2987,10 @@ mono_threads_is_shutting_down (void)
 
 void mono_thread_manage (void)
 {
-       struct wait_data *wait=g_new0 (struct wait_data, 1);
+       struct wait_data wait_data;
+       struct wait_data *wait = &wait_data;
 
+       memset (wait, 0, sizeof (struct wait_data));
        /* join each thread that's still running */
        THREAD_DEBUG (g_message ("%s: Joining each running thread...", __func__));
        
@@ -3004,7 +2998,6 @@ void mono_thread_manage (void)
        if(threads==NULL) {
                THREAD_DEBUG (g_message("%s: No threads", __func__));
                mono_threads_unlock ();
-               g_free (wait);
                return;
        }
        mono_threads_unlock ();
@@ -3021,6 +3014,8 @@ void mono_thread_manage (void)
        
                ResetEvent (background_change_event);
                wait->num=0;
+               /*We must zero all InternalThread pointers to avoid making the GC unhappy.*/
+               memset (wait->threads, 0, MAXIMUM_WAIT_OBJECTS * SIZEOF_VOID_P);
                mono_g_hash_table_foreach (threads, build_wait_tids, wait);
                mono_threads_unlock ();
                if(wait->num>0) {
@@ -3047,6 +3042,8 @@ void mono_thread_manage (void)
                mono_threads_lock ();
 
                wait->num = 0;
+               /*We must zero all InternalThread pointers to avoid making the GC unhappy.*/
+               memset (wait->threads, 0, MAXIMUM_WAIT_OBJECTS * SIZEOF_VOID_P);
                mono_g_hash_table_foreach_remove (threads, remove_and_abort_threads, wait);
 
                mono_threads_unlock ();
@@ -3066,8 +3063,6 @@ void mono_thread_manage (void)
 #ifndef HOST_WIN32
        sched_yield ();
 #endif
-
-       g_free (wait);
 }
 
 static void terminate_thread (gpointer key, gpointer value, gpointer user)
@@ -3128,13 +3123,15 @@ collect_threads_for_suspend (gpointer key, gpointer value, gpointer user_data)
  */
 void mono_thread_suspend_all_other_threads (void)
 {
-       struct wait_data *wait = g_new0 (struct wait_data, 1);
+       struct wait_data wait_data;
+       struct wait_data *wait = &wait_data;
        int i;
        gsize self = GetCurrentThreadId ();
        gpointer *events;
        guint32 eventidx = 0;
        gboolean starting, finished;
 
+       memset (wait, 0, sizeof (struct wait_data));
        /*
         * The other threads could be in an arbitrary state at this point, i.e.
         * they could be starting up, shutting down etc. This means that there could be
@@ -3161,6 +3158,8 @@ void mono_thread_suspend_all_other_threads (void)
                 * threads while threads_mutex is held.
                 */
                wait->num = 0;
+               /*We must zero all InternalThread pointers to avoid making the GC unhappy.*/
+               memset (wait->threads, 0, MAXIMUM_WAIT_OBJECTS * SIZEOF_VOID_P);
                mono_threads_lock ();
                mono_g_hash_table_foreach (threads, collect_threads_for_suspend, wait);
                mono_threads_unlock ();
@@ -3257,8 +3256,6 @@ void mono_thread_suspend_all_other_threads (void)
 
                g_free (events);
        }
-
-       g_free (wait);
 }
 
 static void
@@ -3287,9 +3284,12 @@ collect_threads (gpointer key, gpointer value, gpointer user_data)
 void
 mono_threads_request_thread_dump (void)
 {
-       struct wait_data *wait = g_new0 (struct wait_data, 1);
+       struct wait_data wait_data;
+       struct wait_data *wait = &wait_data;
        int i;
 
+       memset (wait, 0, sizeof (struct wait_data));
+
        /* 
         * Make a copy of the hashtable since we can't do anything with
         * threads while threads_mutex is held.
index cd084ae50ce8e517ab39b61f586e3fc2d356c507..67001bed4cf11618e6e3aaaf30e9203361621b46 100644 (file)
@@ -17,8 +17,6 @@
 
 MONO_BEGIN_DECLS
 
-typedef void (*MonoThreadCleanupFunc) (MonoThread* thread);
-
 /* This callback should return TRUE if the runtime must wait for the thread, FALSE otherwise */
 typedef mono_bool (*MonoThreadManageCallback) (MonoThread* thread);
 
@@ -41,7 +39,6 @@ extern MonoThread *mono_thread_attach (MonoDomain *domain);
 extern void mono_thread_detach (MonoThread *thread);
 extern void mono_thread_exit (void);
 
-void     mono_threads_install_cleanup   (MonoThreadCleanupFunc func);
 void     mono_thread_set_manage_callback (MonoThread *thread, MonoThreadManageCallback func);
 
 extern void mono_threads_set_default_stacksize (uint32_t stacksize);
index e344637b2cde3e759d37fc603f045623496a4634..fab21288a592e4d00dfb6d4ab314fe1a2f637081 100644 (file)
@@ -4663,10 +4663,11 @@ mono_method_verify (MonoMethod *method, int level)
        g_assert (bb);
 
        while (ip < end && ctx.valid) {
+               int op_size;
                ip_offset = ip - code_start;
                {
                        const unsigned char *ip_copy = ip;
-                       int size, op;
+                       int op;
 
                        if (ip_offset > bb->end) {
                                ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", bb->end, ip_offset));
@@ -4676,29 +4677,22 @@ mono_method_verify (MonoMethod *method, int level)
                        if (ip_offset == bb->end)
                                bb = bb->next;
        
-                       size = mono_opcode_value_and_size (&ip_copy, end, &op);
-                       if (size == -1) {
+                       op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
+                       if (op_size == -1) {
                                ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Invalid instruction %x at 0x%04x", *ip, ip_offset));
                                goto cleanup;
                        }
 
-                       if (ADD_IS_GREATER_OR_OVF (ip_offset, size, bb->end)) {
+                       if (ADD_IS_GREATER_OR_OVF (ip_offset, op_size, bb->end)) {
                                ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset));
                                goto cleanup;
                        }
 
                        /*Last Instruction*/
-                       if (ip_offset + size == bb->end && mono_opcode_is_prefix (op)) {
+                       if (ip_offset + op_size == bb->end && mono_opcode_is_prefix (op)) {
                                ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Branch or EH block targets between prefix '%s' and instruction at 0x%04x", mono_opcode_name (op), ip_offset));
                                goto cleanup;
                        }
-
-                       if (bb->dead) {
-                               /*FIXME remove this once we move all bad branch checking code to use BB only*/
-                               ctx.code [ip_offset].flags |= IL_CODE_FLAG_SEEN;
-                               ip += size;
-                               continue;
-                       }
                }
 
                ctx.ip_offset = ip_offset = ip - code_start;
@@ -4740,6 +4734,14 @@ mono_method_verify (MonoMethod *method, int level)
                        }
                }
 
+               /*This must be done after fallthru detection otherwise it won't happen.*/
+               if (bb->dead) {
+                       /*FIXME remove this once we move all bad branch checking code to use BB only*/
+                       ctx.code [ip_offset].flags |= IL_CODE_FLAG_SEEN;
+                       ip += op_size;
+                       continue;
+               }
+
                if (!ctx.valid)
                        break;
 
index 5da9a678d006ed8155f6d9a59cbd6d818fd7b6a2..401b29de1f08c51226514b1fd5bc77f6217fdcdc 100755 (executable)
@@ -2797,6 +2797,12 @@ Wed Jan 13 15:54:53 CET 2010 Paolo Molaro <lupus@ximian.com>
        * tramp-amd64.c (mono_arch_nullify_class_init_trampoline): Fix the LLVM support
        by merging the LLVM and !MAP_32BIT cases.
 
+2009-12-14  Geoff Norton  <gnorton@novell.com>
+
+       * debugger-agent.c: The end_runtime_invoke guard isn't working on 
+       AMD64 as __builtin_frame_address (1) returns NULL.  Disable the 
+       behaviour by default, and make it runtime configurable.
+       
 2009-12-13 Jonathan Chambers <joncham@gmail.com>
 
        * debugger-agent.c (mono_debugger_agent_thread_interrupt): Handle a NULL
index 5bf3fe4375599a09afafd222a11c99213cf3cd1e..1873e6db1f1946228675ecf5ae5ecd01aeec1f9b 100644 (file)
@@ -24,6 +24,13 @@ sgen_libs = \
        $(monodir)/mono/utils/libmonoutils.la \
        $(GLIB_LIBS)
 
+moon_libs = \
+       $(monodir)/mono/metadata/libmonoruntimemoon.la  \
+       $(monodir)/mono/io-layer/libwapi.la     \
+       $(monodir)/mono/utils/libmonoutils.la \
+       $(GLIB_LIBS) \
+       $(libgc_libs)
+
 static_libs=   \
        $(monodir)/mono/metadata/libmonoruntime-static.la       \
        $(monodir)/mono/io-layer/libwapi.la     \
@@ -95,7 +102,11 @@ endif
 
 noinst_PROGRAMS = genmdesc
 
-lib_LTLIBRARIES = libmono-2.0.la $(sgen_libraries)
+if SHARED_MONO
+shared_libraries = libmono-2.0.la
+endif
+
+lib_LTLIBRARIES = $(shared_libraries) $(sgen_libraries)
 noinst_LTLIBRARIES = libmono-static.la $(sgen_static_libraries)
 
 if MOONLIGHT
@@ -489,7 +500,8 @@ libmonosgen_2_0_la_CFLAGS = $(AM_CFLAGS) $(SGEN_DEFINES)
 
 if MOONLIGHT
 libmono_moon_la_SOURCES = $(libmono_2_0_la_SOURCES)
-libmono_moon_la_CFLAGS = $(AM_CFLAGS) $(BOEHM_DEFINES) $(LIBGC_CFLAGS)
+libmono_moon_la_CFLAGS = $(AM_CFLAGS) $(MOONLIGHT_DEFINES)
+libmono_moon_la_LIBADD = $(moon_libs) $(LIBMONO_DTRACE_OBJECT)
 endif
 
 libmono_static_la_SOURCES = $(libmono_2_0_la_SOURCES)
@@ -517,10 +529,6 @@ libmono_2_0_la_LIBADD = \
 libmonosgen_2_0_la_LIBADD = \
        $(sgen_libs) $(LIBMONO_DTRACE_OBJECT)
 
-if MOONLIGHT
-libmono_moon_la_LIBADD = $(libmono_2_0_la_LIBADD)
-endif
-
 basic-simd.exe: basic-simd.cs
        $(MCS) -out:$@ $< -r:TestDriver.dll -r:Mono.Simd.dll
 
index 381fd0d76deaac365144fbc097b44ef898274d31..a7141a166991881c4675d567fceeb06786d5124a 100644 (file)
@@ -161,6 +161,7 @@ storei8_membase_imm: dest:b
 storei8_membase_reg: dest:b src1:i 
 storer4_membase_reg: dest:b src1:f len:7
 storer8_membase_reg: dest:b src1:f len:7
+store_mem_imm: len:12
 load_membase: dest:i src1:b len:7
 loadi1_membase: dest:y src1:b len:7
 loadu1_membase: dest:y src1:b len:7
@@ -303,7 +304,7 @@ atomic_exchange_i4: src1:b src2:i dest:a len:24
 atomic_cas_i4: src1:b src2:i src3:a dest:a len:24
 memory_barrier: len:16
 
-card_table_wbarrier: src1:a src2:i clob:d len:28
+card_table_wbarrier: src1:a src2:i clob:d len:34
 
 relaxed_nop: len:2
 hard_nop: len:1
index 0556e17c51fe0aaee96e8bd4d0291464e234e160..e9b1078bc3810f1d8c58ae2956455abde696a132 100644 (file)
@@ -103,6 +103,7 @@ typedef struct {
        GSList *onthrow;
        int timeout;
        char *launch;
+       gboolean embedding;
 } AgentConfig;
 
 typedef struct
@@ -232,7 +233,7 @@ typedef struct {
 #define HEADER_LENGTH 11
 
 #define MAJOR_VERSION 2
-#define MINOR_VERSION 1
+#define MINOR_VERSION 2
 
 typedef enum {
        CMD_SET_VM = 1,
@@ -534,6 +535,8 @@ static HANDLE debugger_thread_handle;
 
 static int log_level;
 
+static gboolean embedding;
+
 static FILE *log_file;
 
 /* Classes whose class load event has been sent */
@@ -582,9 +585,9 @@ static void runtime_initialized (MonoProfiler *prof);
 
 static void runtime_shutdown (MonoProfiler *prof);
 
-static void thread_startup (MonoProfiler *prof, intptr_t tid);
+static void thread_startup (MonoProfiler *prof, uintptr_t tid);
 
-static void thread_end (MonoProfiler *prof, intptr_t tid);
+static void thread_end (MonoProfiler *prof, uintptr_t tid);
 
 static void appdomain_load (MonoProfiler *prof, MonoDomain *domain, int result);
 
@@ -727,6 +730,8 @@ mono_debugger_agent_parse_options (char *options)
                        agent_config.timeout = atoi (arg + 8);
                } else if (strncmp (arg, "launch=", 7) == 0) {
                        agent_config.launch = g_strdup (arg + 7);
+               } else if (strncmp (arg, "embedding=", 10) == 0) {
+                       agent_config.embedding = atoi (arg + 10) == 1;
                } else {
                        print_usage ();
                        exit (1);
@@ -794,6 +799,8 @@ mono_debugger_agent_init (void)
 
        log_level = agent_config.log_level;
 
+       embedding = agent_config.embedding;
+
        if (agent_config.log_file) {
                log_file = fopen (agent_config.log_file, "w+");
                if (!log_file) {
@@ -2833,7 +2840,7 @@ runtime_shutdown (MonoProfiler *prof)
 }
 
 static void
-thread_startup (MonoProfiler *prof, intptr_t tid)
+thread_startup (MonoProfiler *prof, uintptr_t tid)
 {
        MonoInternalThread *thread = mono_thread_internal_current ();
        MonoInternalThread *old_thread;
@@ -2895,7 +2902,7 @@ thread_startup (MonoProfiler *prof, intptr_t tid)
 }
 
 static void
-thread_end (MonoProfiler *prof, intptr_t tid)
+thread_end (MonoProfiler *prof, uintptr_t tid)
 {
        MonoInternalThread *thread;
        DebuggerTlsData *tls = NULL;
@@ -3000,7 +3007,7 @@ end_runtime_invoke (MonoProfiler *prof, MonoMethod *method)
        gpointer stackptr = __builtin_frame_address (1);
 #endif
 
-       if (ss_req == NULL || stackptr != ss_invoke_addr || ss_req->thread != mono_thread_internal_current ())
+       if (!embedding || ss_req == NULL || stackptr != ss_invoke_addr || ss_req->thread != mono_thread_internal_current ())
                return;
 
        /*
index fa38cb7a04d370ce1fafb2e95ca72e842b766b9a..de8050e4f2c213a362649c51de3a54ad777d83f9 100644 (file)
@@ -1698,12 +1698,6 @@ mono_main (int argc, char* argv[])
        }
 #endif
 
-       /*
-        * This must be called before mono_debug_init(), because the
-        * latter registers GC roots.
-        */
-       mono_gc_base_init ();
-
        if (action == DO_DEBUGGER) {
                enable_debugging = TRUE;
 
index a7abb8871295253d2edf10a64cafa3fd6f66739d..c531a777677913e1a66a7f0cb4f09d8f3213022b 100644 (file)
@@ -615,12 +615,18 @@ mono_arch_get_argument_info (MonoMethodSignature *csig, int param_count, MonoJit
 
        arg_info [0].offset = offset;
 
+       if (cinfo->vtype_retaddr && cinfo->vret_arg_index == 0) {
+               args_size += sizeof (gpointer);
+               offset += 4;
+       }
+
        if (csig->hasthis) {
                args_size += sizeof (gpointer);
                offset += 4;
        }
 
-       if (MONO_TYPE_ISSTRUCT (csig->ret) && (cinfo->ret.storage == ArgOnStack)) {
+       if (cinfo->vtype_retaddr && cinfo->vret_arg_index == 1 && csig->hasthis) {
+               /* Emitted after this */
                args_size += sizeof (gpointer);
                offset += 4;
        }
@@ -641,6 +647,12 @@ mono_arch_get_argument_info (MonoMethodSignature *csig, int param_count, MonoJit
                offset += pad;
                arg_info [k + 1].offset = offset;
                offset += size;
+
+               if (k == 0 && cinfo->vtype_retaddr && cinfo->vret_arg_index == 1 && !csig->hasthis) {
+                       /* Emitted after the first arg */
+                       args_size += sizeof (gpointer);
+                       offset += 4;
+               }
        }
 
        if (mono_do_x86_stack_align && !CALLCONV_IS_STDCALL (csig))
@@ -4042,6 +4054,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        br = code; x86_branch8 (code, X86_CC_NE, -1, FALSE);
                        x86_mov_reg_reg (code, X86_EDX, ptr, 4);
                        x86_shift_reg_imm (code, X86_SHR, X86_EDX, card_table_shift);
+                       if (card_table_mask)
+                               x86_alu_reg_imm (code, X86_AND, X86_EDX, (int)card_table_mask);
                        x86_mov_membase_imm (code, X86_EDX, card_table, 1, 1);
                        x86_patch (br, code);
                        break;
index cbe3d979c8095648745add866e2b80c8d38a4eaf..04e15736b7d72ec39715b36b8bb9a191cd29477e 100644 (file)
@@ -2414,6 +2414,24 @@ mono_set_lmf (MonoLMF *lmf)
        (*mono_get_lmf_addr ()) = lmf;
 }
 
+static void
+mono_set_jit_tls (MonoJitTlsData *jit_tls)
+{
+       TlsSetValue (mono_jit_tls_id, jit_tls);
+
+#ifdef HAVE_KW_THREAD
+       mono_jit_tls = jit_tls;
+#endif
+}
+
+static void
+mono_set_lmf_addr (gpointer lmf_addr)
+{
+#ifdef HAVE_KW_THREAD
+       mono_lmf_addr = lmf_addr;
+#endif
+}
+
 /* Called by native->managed wrappers */
 void
 mono_jit_thread_attach (MonoDomain *domain)
@@ -2471,15 +2489,11 @@ setup_jit_tls_data (gpointer stack_start, gpointer abort_func)
 
        jit_tls = g_new0 (MonoJitTlsData, 1);
 
-       TlsSetValue (mono_jit_tls_id, jit_tls);
-
-#ifdef HAVE_KW_THREAD
-       mono_jit_tls = jit_tls;
-#endif
-
        jit_tls->abort_func = abort_func;
        jit_tls->end_of_stack = stack_start;
 
+       mono_set_jit_tls (jit_tls);
+
        lmf = g_new0 (MonoLMF, 1);
 #ifdef MONO_ARCH_INIT_TOP_LMF_ENTRY
        MONO_ARCH_INIT_TOP_LMF_ENTRY (lmf);
@@ -2492,11 +2506,9 @@ setup_jit_tls_data (gpointer stack_start, gpointer abort_func)
 #if defined(HAVE_KW_THREAD) && defined(MONO_ARCH_ENABLE_MONO_LMF_VAR)
        /* jit_tls->lmf is unused */
        mono_lmf = lmf;
-       mono_lmf_addr = &mono_lmf;
+       mono_set_lmf_addr (&mono_lmf);
 #else
-#if defined(HAVE_KW_THREAD)
-       mono_lmf_addr = &jit_tls->lmf;  
-#endif
+       mono_set_lmf_addr (&jit_tls->lmf);
 
        jit_tls->lmf = lmf;
 #endif
@@ -2543,10 +2555,9 @@ mono_thread_attach_cb (intptr_t tid, gpointer stack_start)
 }
 
 static void
-mini_thread_cleanup (MonoThread *thread)
+mini_thread_cleanup (MonoInternalThread *thread)
 {
-       MonoInternalThread *internal = thread->internal_thread;
-       MonoJitTlsData *jit_tls = internal->jit_data;
+       MonoJitTlsData *jit_tls = thread->jit_data;
 
        if (jit_tls) {
                mono_debugger_thread_cleanup (jit_tls);
@@ -2555,7 +2566,7 @@ mini_thread_cleanup (MonoThread *thread)
                mono_free_altstack (jit_tls);
                g_free (jit_tls->first_lmf);
                g_free (jit_tls);
-               internal->jit_data = NULL;
+               thread->jit_data = NULL;
 
                /* We can't clean up tls information if we are on another thread, it will clean up the wrong stuff
                 * It would be nice to issue a warning when this happens outside of the shutdown sequence. but it's
@@ -2563,16 +2574,10 @@ mini_thread_cleanup (MonoThread *thread)
                 *
                 * The current offender is mono_thread_manage which cleanup threads from the outside.
                 */
-               if (internal == mono_thread_internal_current ()) {
-                       TlsSetValue (mono_jit_tls_id, NULL);
-
-#ifdef HAVE_KW_THREAD
-                       mono_jit_tls = NULL;
-                       mono_lmf_addr = NULL;
-#if defined(MONO_ARCH_ENABLE_MONO_LMF_VAR)
-                       mono_lmf = NULL;
-#endif
-#endif         
+               if (thread == mono_thread_internal_current ()) {
+                       mono_set_lmf (NULL);
+                       mono_set_jit_tls (NULL);
+                       mono_set_lmf_addr (NULL);
                }
        }
 }
index 9ed3cb8cde298fd011036322b3b09cf45922b004..7ad574b82f449b5df390133858b53a87b79ff53c 100644 (file)
@@ -4463,7 +4463,7 @@ method_free (MonoProfiler *profiler, MonoMethod *method) {
 }
 
 static void
-thread_start (MonoProfiler *profiler, intptr_t tid) {
+thread_start (MonoProfiler *profiler, uintptr_t tid) {
        ProfilerPerThreadData *data;
        ProfilerEventData *event;
        GET_PROFILER_THREAD_DATA (data);
@@ -4472,7 +4472,7 @@ thread_start (MonoProfiler *profiler, intptr_t tid) {
        COMMIT_RESERVED_EVENTS (data);
 }
 static void
-thread_end (MonoProfiler *profiler, intptr_t tid) {
+thread_end (MonoProfiler *profiler, uintptr_t tid) {
        ProfilerPerThreadData *data;
        ProfilerEventData *event;
        GET_PROFILER_THREAD_DATA (data);
index 771ad6a586e21761fdffd699b8a4b9e890a04ee3..13771f240c2ca6c7fdb4a9531eae5facec2b33c1 100644 (file)
@@ -5,3 +5,4 @@
 /load-missing.il -crlf
 /mutexes.cs -crlf
 /thread4.cs -crlf
+/qt-instance.il -crlf
index d2fed7cfe7378d8e10bb74ff4a0753df69f9fe7a..47a3df84d878f1fe7fc84ac5958f688891a19bc4 100644 (file)
@@ -1,3 +1,10 @@
 /make_type_visibility_test.sh -crlf
 /unverifiable_ldobj_with_generic_type_definition.il -crlf
 /unverifiable_throw_with_unboxed_generic_argument.il -crlf
+/invalid_argument_type.il -crlf
+/invalid_ldtoken_field.il -crlf
+/invalid_ldtoken_method.il -crlf
+/invalid_ldtoken_type.il -crlf
+/invalid_ldtoken_type_2.il -crlf
+/invalid_ldtoken_type_3.il -crlf
+/invalid_local_variable.il -crlf
index f359d4ad65399f57ac6089982ed9503139b722ef..de2651016b77fa760d9c786a2ca3b318a2804418 100644 (file)
@@ -1,31 +1,59 @@
-.assembly 'invalid_fallout_of_finally_block'
+.assembly extern mscorlib
 {
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly 'bug'
+{
+  .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.
+
   .hash algorithm 0x00008004
   .ver  0:0:0:0
 }
+.module bug.exe // GUID = {7CDDF4B6-7581-4902-9709-6155199DC325}
 
-.method public static int32 Main() cil managed
+
+.class private auto ansi beforefieldinit Program extends [mscorlib]System.Object
 {
-       .entrypoint
-       .maxstack 8
-       .locals init (int32 V0)
+       .method public static hidebysig default void __Main ()  cil managed 
+    {
+       //.entrypoint
+       .maxstack 2
+       ret
+       }
 
-BB_00:
-               newobj instance void class [mscorlib]System.Exception::.ctor()
-               throw
-               leave END
-BB_01:
 
-BB_02:
+       .method public static default void Main ()  cil managed 
+    {
+               .entrypoint
+               .maxstack 2
+               .locals init (int32 loc0)
+        
                nop
                nop
-BB_03:
-
+               ldc.i4.0
+               stloc.0
+               
+               .try {
+                       nop
+                       ldc.i4.0
+                       brfalse ELSE
+                       leave END
+ELSE:
+                       nop
+                       leave END
+               } finally {
+                       nop
+                       //endfinally
+               }
+END0:
+               endfinally
+               nop
 END:
-       ldc.i4.0
-       ret
-
-.try BB_00 to BB_01 finally handler BB_02 to BB_03
-
+               ret 
+    }
 
 }
+
index 72e86e420f9a681367ec870f70c43c532e62c518..d9209c410dc6b3c5fc8b640fa6aacfd8447fa740 100644 (file)
@@ -67,7 +67,6 @@ monoutils_sources = \
        mono-codeman.h  \
        mono-counters.h \
        mono-digest.h   \
-       mono-embed.h    \
        mono-error.h    \
        mono-math.h     \
        mono-membar.h   \
@@ -97,9 +96,10 @@ endif
 libmonoutils_la_SOURCES = $(monoutils_sources) $(arch_sources)
 libmonoutilsincludedir = $(includedir)/mono-$(API_VER)/mono/utils
 
-libmonoutilsinclude_HEADERS = \
-       mono-logger.h   \
-       mono-error.h    \
-       mono-publib.h
+libmonoutilsinclude_HEADERS =  \
+       mono-logger.h           \
+       mono-error.h            \
+       mono-publib.h           \
+       mono-dl-fallback.h
 
-EXTRA_DIST = ChangeLog
+EXTRA_DIST = ChangeLog mono-embed.h mono-embed.c
diff --git a/mono/utils/mono-dl-fallback.h b/mono/utils/mono-dl-fallback.h
new file mode 100644 (file)
index 0000000..06945ae
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __MONO_UTILS_DL_FALLBACK_H__
+#define __MONO_UTILS_DL_FALLBACK_H__
+
+#include <mono/utils/mono-publib.h>
+
+MONO_BEGIN_DECLS
+
+enum {
+       MONO_DL_LAZY  = 1,
+       MONO_DL_LOCAL = 2,
+       MONO_DL_MASK  = 3
+};
+
+/*
+ * This is the dynamic loader fallback API
+ */
+typedef struct MonoDlFallbackHandler MonoDlFallbackHandler;
+
+/*
+ * The "err" variable contents must be allocated using g_malloc or g_strdup
+ */
+typedef void* (*MonoDlFallbackLoad) (const char *name, int flags, char **err, void *user_data);
+typedef void* (*MonoDlFallbackSymbol) (void *handle, const char *name, char **err, void *user_data);
+typedef void* (*MonoDlFallbackClose) (void *handle, void *user_data);
+
+MonoDlFallbackHandler *mono_dl_fallback_register (MonoDlFallbackLoad load_func, MonoDlFallbackSymbol symbol_func,
+                                                 MonoDlFallbackClose close_func, void *user_data);
+
+void                   mono_dl_fallback_unregister (MonoDlFallbackHandler *handler);
+
+MONO_END_DECLS
+
+#endif /* __MONO_UTILS_DL_FALLBACK_H__ */
+
index 6a233c75acbafe5cee88dc4f26edbd23500f31ef..4d4b95048452f941aeb85ad585e3bc56d782da0e 100644 (file)
@@ -29,11 +29,6 @@ static const char suffixes [][8] = {
        ".so",
        ".bundle"
 };
-#elif EMBEDDED_PINVOKE
-#define SOPREFIX ""
-static const char suffixes [][1] = {
-       ""
-};
 #else
 #define SOPREFIX "lib"
 static const char suffixes [][4] = {
@@ -80,15 +75,6 @@ convert_flags (int flags)
        return lflags;
 }
 
-#elif EMBEDDED_PINVOKE
-#define SO_HANDLE_TYPE void*
-void *LL_SO_OPEN   (const char *file, int flags);
-int   LL_SO_CLOSE  (void *handle);
-#define LL_SO_SYMBOL(module,symbol) _LL_SO_SYMBOL((module)->handle, (symbol))
-void *_LL_SO_SYMBOL (void *handle, const char *symbol);
-char *LL_SO_ERROR();
-#define LL_SO_TRFLAGS(flags)      0
-
 #else
 /* no dynamic loader supported */
 #define SO_HANDLE_TYPE void*
@@ -100,9 +86,21 @@ char *LL_SO_ERROR();
 
 #endif
 
+static GSList *fallback_handlers;
+
+struct MonoDlFallbackHandler {
+       MonoDlFallbackLoad load_func;
+       MonoDlFallbackSymbol symbol_func;
+       MonoDlFallbackClose close_func;
+       void *user_data;
+};
+       
 struct _MonoDl {
        SO_HANDLE_TYPE handle;
        int main_module;
+
+       /* If not NULL, use the methods in MonoDlFallbackHandler instead of the LL_* methods */
+       MonoDlFallbackHandler *dl_fallback;
 };
 
 #ifdef TARGET_WIN32
@@ -314,6 +312,7 @@ mono_dl_open (const char *name, int flags, char **error_msg)
 {
        MonoDl *module;
        void *lib;
+       MonoDlFallbackHandler *dl_fallback = NULL;
        int lflags = LL_SO_TRFLAGS (flags);
 
        if (error_msg)
@@ -328,6 +327,22 @@ mono_dl_open (const char *name, int flags, char **error_msg)
        module->main_module = name == NULL? TRUE: FALSE;
        lib = LL_SO_OPEN (name, lflags);
        if (!lib) {
+               GSList *node;
+               for (node = fallback_handlers; node != NULL; node = node->next){
+                       MonoDlFallbackHandler *handler = (MonoDlFallbackHandler *) node->data;
+                       *error_msg = NULL;
+                       
+                       lib = handler->load_func (name, lflags, error_msg, handler->user_data);
+                       if (*error_msg != NULL)
+                               g_free (*error_msg);
+                       
+                       if (lib != NULL){
+                               dl_fallback = handler;
+                               break;
+                       }
+               }
+       }
+       if (!lib && !dl_fallback) {
                char *lname;
                char *llname;
                const char *suff;
@@ -358,6 +373,7 @@ mono_dl_open (const char *name, int flags, char **error_msg)
                }
        }
        module->handle = lib;
+       module->dl_fallback = dl_fallback;
        return module;
 }
 
@@ -376,18 +392,24 @@ char*
 mono_dl_symbol (MonoDl *module, const char *name, void **symbol)
 {
        void *sym;
+       char *err = NULL;
 
+       if (module->dl_fallback) {
+               sym = module->dl_fallback->symbol_func (module->handle, name, &err, module->dl_fallback->user_data);
+       } else {
 #if MONO_DL_NEED_USCORE
-       {
-               char *usname = malloc (strlen (name) + 2);
-               *usname = '_';
-               strcpy (usname + 1, name);
-               sym = LL_SO_SYMBOL (module, usname);
-               free (usname);
-       }
+               {
+                       char *usname = malloc (strlen (name) + 2);
+                       *usname = '_';
+                       strcpy (usname + 1, name);
+                       sym = LL_SO_SYMBOL (module, usname);
+                       free (usname);
+               }
 #else
-       sym = LL_SO_SYMBOL (module, name);
+               sym = LL_SO_SYMBOL (module, name);
 #endif
+       }
+
        if (sym) {
                if (symbol)
                        *symbol = sym;
@@ -395,7 +417,7 @@ mono_dl_symbol (MonoDl *module, const char *name, void **symbol)
        }
        if (symbol)
                *symbol = NULL;
-       return LL_SO_ERROR ();
+       return (module->dl_fallback != NULL) ? err :  LL_SO_ERROR ();
 }
 
 /**
@@ -409,7 +431,14 @@ mono_dl_symbol (MonoDl *module, const char *name, void **symbol)
 void
 mono_dl_close (MonoDl *module)
 {
-       LL_SO_CLOSE (module);
+       MonoDlFallbackHandler *dl_fallback = module->dl_fallback;
+       
+       if (dl_fallback){
+               if (dl_fallback->close_func != NULL)
+                       dl_fallback->close_func (module->handle, dl_fallback->user_data);
+       } else
+               LL_SO_CLOSE (module);
+       
        free (module);
 }
 
@@ -485,92 +514,34 @@ mono_dl_build_path (const char *directory, const char *name, void **iter)
        return res;
 }
 
-#if EMBEDDED_PINVOKE
-static GHashTable *mono_dls;
-static char *ll_last_error = "";
-
-/**
- * mono_dl_register_library:
- * @name: Library name, this is the name used by the DllImport as the external library name
- * @mappings: the mappings to register for P/Invoke.
- *
- * This function is only available on builds that define
- * EMBEDDED_PINVOKE, this is available for systems that do not provide
- * a dynamic linker but still want to use DllImport to easily invoke
- * code from the managed side into the unmanaged world.
- *
- * Mappings is a pointer to the first element of an array of
- * MonoDlMapping values.  The list must be terminated with both 
- * the name and addr fields set to NULL.
- *
- * This is typically used like this:
- * MonoDlMapping sample_library_mappings [] = {
- *   { "CallMe", CallMe },
- *   { NULL, NULL }
- * };
- *
- * ...
- * main ()
- * {
- *    ...
- *    mono_dl_register_library ("sample", sample_library_mappings);
- *    ...
- * }
- *
- * Then the C# code can use this P/Invoke signature:
- *
- *     [DllImport ("sample")]
- *     extern static int CallMe (int f);
- */
-void
-mono_dl_register_library (const char *name, MonoDlMapping *mappings)
+MonoDlFallbackHandler *
+mono_dl_fallback_register (MonoDlFallbackLoad load_func, MonoDlFallbackSymbol symbol_func, MonoDlFallbackClose close_func, void *user_data)
 {
-       if (mono_dls == NULL)
-               mono_dls = g_hash_table_new (g_str_hash, g_str_equal);
+       MonoDlFallbackHandler *handler;
        
-       printf ("Inserting: 0x%p\n", mappings);
-       g_hash_table_insert (mono_dls, g_strdup (name), mappings);
-}
+       g_return_val_if_fail (load_func != NULL, NULL);
+       g_return_val_if_fail (symbol_func != NULL, NULL);
 
-void *
-LL_SO_OPEN (const char *file, int flag)
-{
-       void *mappings;
+       handler = g_new (MonoDlFallbackHandler, 1);
+       handler->load_func = load_func;
+       handler->symbol_func = symbol_func;
+       handler->close_func = close_func;
+       handler->user_data = user_data;
+
+       fallback_handlers = g_slist_prepend (fallback_handlers, handler);
        
-       if (mono_dls == NULL){
-               ll_last_error = "Library not registered";
-               return NULL;
-       }
-               
-       mappings = g_hash_table_lookup (mono_dls, file);
-       ll_last_error = mappings == NULL ? "File not registered" : "";
-       return mappings;
+       return handler;
 }
 
-int LL_SO_CLOSE (void *handle)
+void
+mono_dl_fallback_unregister (MonoDlFallbackHandler *handler)
 {
-       // No-op
-       return 0;
-}
+       GSList *found;
 
-void *
-_LL_SO_SYMBOL (void *handle, const char *symbol)
-{
-       MonoDlMapping *mappings = (MonoDlMapping *) handle;
-       
-       for (;mappings->name; mappings++){
-               if (strcmp (symbol, mappings->name) == 0){
-                       ll_last_error = "";
-                       return mappings->addr;
-               }
-       }
-       ll_last_error = "Symbol not found";
-       return NULL;
-}
+       found = g_slist_find (fallback_handlers, handler);
+       if (found == NULL)
+               return;
 
-char *
-LL_SO_ERROR (void)
-{
-       return g_strdup (ll_last_error);
+       g_slist_remove (fallback_handlers, handler);
+       g_free (handler);
 }
-#endif
index 87db045981249e2c50c2f353d2c0ecf62e488b42..819fcf625b9f8a1262b43cd07ead5070e901db54 100644 (file)
@@ -2,12 +2,7 @@
 #define __MONO_UTILS_DL_H__
 
 #include "mono/utils/mono-compiler.h"
-
-enum {
-       MONO_DL_LAZY  = 1,
-       MONO_DL_LOCAL = 2,
-       MONO_DL_MASK  = 3
-};
+#include "mono/utils/mono-dl-fallback.h"
 
 typedef struct _MonoDl MonoDl;
 
@@ -17,6 +12,5 @@ void        mono_dl_close      (MonoDl *module) MONO_INTERNAL;
 
 char*       mono_dl_build_path (const char *directory, const char *name, void **iter) MONO_INTERNAL;
 
-
 #endif /* __MONO_UTILS_DL_H__ */
 
diff --git a/mono/utils/mono-embed.c b/mono/utils/mono-embed.c
new file mode 100644 (file)
index 0000000..3bb1ac6
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * mono-embed.c: Example code APIs to register a libraries using
+ * mono_dl_fallback_register.  Real implementations should instead
+ * use a binary search for implementing the dl_mapping_open and
+ * dl_mapping_symbol methods here.
+ *
+ * Author:
+ *    Mono Team (http://www.mono-project.com)
+ *
+ * Copyright 2001-2004 Ximian, Inc.
+ * Copyright 2004-2010 Novell, Inc.
+ *
+ */
+#include "config.h"
+#include "mono/utils/mono-dl.h"
+#include "mono/utils/mono-embed.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <glib.h>
+
+static GHashTable *mono_dls;
+
+static void *
+dl_mapping_open (const char *file, int flags, char **err, void *user_data)
+{
+       MonoDlMapping *mappings;
+       
+       if (mono_dls == NULL){
+               *err = g_strdup ("Library not registered");
+               return NULL;
+       }
+               
+       mappings = (MonoDlMapping *) g_hash_table_lookup (mono_dls, file);
+       *err = g_strdup (mappings == NULL ? "File not registered" : "");
+       return mappings;
+}
+
+static void *
+dl_mapping_symbol (void *handle, const char *symbol, char **err, void *user_data)
+{
+       MonoDlMapping *mappings = (MonoDlMapping *) handle;
+       
+       for (;mappings->name; mappings++){
+               if (strcmp (symbol, mappings->name) == 0){
+                       *err = g_strdup ("");
+                       return mappings->addr;
+               }
+       }
+       *err = g_strdup ("Symbol not found");
+       return NULL;
+}
+
+/**
+ * mono_dl_register_library:
+u * @name: Library name, this is the name used by the DllImport as the external library name
+ * @mappings: the mappings to register for P/Invoke.
+ *
+ * The mappings registered using this function are used as fallbacks if the dynamic linker 
+ * fails, or if the platform doesn't have a dynamic linker.
+ *
+ * Mappings is a pointer to the first element of an array of
+ * MonoDlMapping values.  The list must be terminated with both 
+ * the name and addr fields set to NULL.
+ *
+ * This is typically used like this:
+ * MonoDlMapping sample_library_mappings [] = {
+ *   { "CallMe", CallMe },
+ *   { NULL, NULL }
+ * };
+ *
+ * ...
+ * main ()
+ * {
+ *    ...
+ *    mono_dl_register_library ("sample", sample_library_mappings);
+ *    ...
+ * }
+ *
+ * Then the C# code can use this P/Invoke signature:
+ *
+ *     [DllImport ("sample")]
+ *     extern static int CallMe (int f);
+ */
+void
+mono_dl_register_library (const char *name, MonoDlMapping *mappings)
+{
+       if (mono_dls == NULL){
+               mono_dls = g_hash_table_new (g_str_hash, g_str_equal);
+               mono_dl_fallback_register (dl_mapping_open, dl_mapping_symbol, NULL, NULL);
+       }
+       
+       g_hash_table_insert (mono_dls, g_strdup (name), mappings);
+}
+
index 826d47136ac757b64e227dff635608a4c006a17a..2a8a697a1e7109c41c255299545d7cb3464dd642 100755 (executable)
@@ -1,10 +1,12 @@
 #ifndef __MONO_EMBED_H__
 #define __MONO_EMBED_H__
 
+#include <mono/utils/mono-publib.h>
+
+MONO_BEGIN_DECLS
+
 /* 
- * These are only used and available on embedded systems, the
- * EMBEDDED_PINVOKE configuration option must be set, and it
- * overrides any platform symbol loading functionality 
+ * This is a fallback for platform symbol loading functionality.
  */
 typedef struct {
        const char *name;       
@@ -13,4 +15,6 @@ typedef struct {
 
 void mono_dl_register_library (const char *name, MonoDlMapping *mappings);
 
+MONO_END_DECLS
+
 #endif /* __MONO_EMBED_H__ */
index 5c8a57a450a18a26fabc1fa62ad82fd927b5388c..a794a288e7f89183e375bdb7ca6f17c324c1d96f 100644 (file)
        #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_EDI])
        #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_EIP])
 #elif defined(__OpenBSD__)
-       #define UCONTEXT_REG_EAX(ctx) ((ctx)->sc_eax)
-       #define UCONTEXT_REG_EBX(ctx) ((ctx)->sc_ebx)
-       #define UCONTEXT_REG_ECX(ctx) ((ctx)->sc_ecx)
-       #define UCONTEXT_REG_EDX(ctx) ((ctx)->sc_edx)
-       #define UCONTEXT_REG_EBP(ctx) ((ctx)->sc_ebp)
-       #define UCONTEXT_REG_ESP(ctx) ((ctx)->sc_esp)
-       #define UCONTEXT_REG_ESI(ctx) ((ctx)->sc_esi)
-       #define UCONTEXT_REG_EDI(ctx) ((ctx)->sc_edi)
-       #define UCONTEXT_REG_EIP(ctx) ((ctx)->sc_eip)
+    #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->sc_eax)
+       #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->sc_ebx)
+       #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->sc_ecx)
+       #define UCONTEXT_REG_EDX(ctx) (((ucontext_t*)(ctx))->sc_edx)
+       #define UCONTEXT_REG_EBP(ctx) (((ucontext_t*)(ctx))->sc_ebp)
+       #define UCONTEXT_REG_ESP(ctx) (((ucontext_t*)(ctx))->sc_esp)
+       #define UCONTEXT_REG_ESI(ctx) (((ucontext_t*)(ctx))->sc_esi)
+       #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->sc_edi)
+       #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->sc_eip)
 #else
        #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EAX])
        #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EBX])
 #define UCONTEXT_GREGS(ctx)    ((guint64*)&(((ucontext_t*)(ctx))->uc_mcontext))
 #elif defined(__OpenBSD__)
     /* OpenBSD/amd64 has no gregs array, ucontext_t == sigcontext */
-       #define UCONTEXT_REG_RAX(ctx) ((ctx)->sc_rax)
-       #define UCONTEXT_REG_RBX(ctx) ((ctx)->sc_rbx)
-       #define UCONTEXT_REG_RCX(ctx) ((ctx)->sc_rcx)
-       #define UCONTEXT_REG_RDX(ctx) ((ctx)->sc_rdx)
-       #define UCONTEXT_REG_RBP(ctx) ((ctx)->sc_rbp)
-       #define UCONTEXT_REG_RSP(ctx) ((ctx)->sc_rsp)
-       #define UCONTEXT_REG_RSI(ctx) ((ctx)->sc_rsi)
-       #define UCONTEXT_REG_RDI(ctx) ((ctx)->sc_rdi)
-       #define UCONTEXT_REG_RIP(ctx) ((ctx)->sc_rip)
-       #define UCONTEXT_REG_R8(ctx) ((ctx)->sc_r8)
-       #define UCONTEXT_REG_R9(ctx) ((ctx)->sc_r9)
-       #define UCONTEXT_REG_R10(ctx) ((ctx)->sc_r10)
-       #define UCONTEXT_REG_R11(ctx) ((ctx)->sc_r11)
-       #define UCONTEXT_REG_R12(ctx) ((ctx)->sc_r12)
-       #define UCONTEXT_REG_R13(ctx) ((ctx)->sc_r13)
-       #define UCONTEXT_REG_R14(ctx) ((ctx)->sc_r14)
-       #define UCONTEXT_REG_R15(ctx) ((ctx)->sc_r15)
+       #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->sc_rax)
+       #define UCONTEXT_REG_RBX(ctx) (((ucontext_t*)(ctx))->sc_rbx)
+       #define UCONTEXT_REG_RCX(ctx) (((ucontext_t*)(ctx))->sc_rcx)
+       #define UCONTEXT_REG_RDX(ctx) (((ucontext_t*)(ctx))->sc_rdx)
+       #define UCONTEXT_REG_RBP(ctx) (((ucontext_t*)(ctx))->sc_rbp)
+       #define UCONTEXT_REG_RSP(ctx) (((ucontext_t*)(ctx))->sc_rsp)
+       #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->sc_rsi)
+       #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->sc_rdi)
+       #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->sc_rip)
+       #define UCONTEXT_REG_R8(ctx) (((ucontext_t*)(ctx))->sc_r8)
+       #define UCONTEXT_REG_R9(ctx) (((ucontext_t*)(ctx))->sc_r9)
+       #define UCONTEXT_REG_R10(ctx) (((ucontext_t*)(ctx))->sc_r10)
+       #define UCONTEXT_REG_R11(ctx) (((ucontext_t*)(ctx))->sc_r11)
+       #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->sc_r12)
+       #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->sc_r13)
+       #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->sc_r14)
+       #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->sc_r15)
 #else
 #define UCONTEXT_GREGS(ctx)    ((guint64*)&(((ucontext_t*)(ctx))->uc_mcontext.gregs))
 #endif
diff --git a/msvc/eglib.vcxproj b/msvc/eglib.vcxproj
new file mode 100644 (file)
index 0000000..b4b4dd6
--- /dev/null
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{158073ED-99AE-4196-9EDC-DDB2344F8466}</ProjectGuid>\r
+    <RootNamespace>eglib</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>copy ..\eglib\winconfig.h ..\eglib\config.h</Command>\r
+    </PreBuildEvent>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_LIB;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>true</TreatWarningAsError>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>copy ..\eglib\winconfig.h ..\eglib\config.h</Command>\r
+    </PreBuildEvent>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_LIB;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>true</TreatWarningAsError>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <PreBuildEvent>\r
+      <Command>copy ..\eglib\winconfig.h ..\eglib\config.h</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_LIB;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <PreBuildEvent>\r
+      <Command>copy ..\eglib\winconfig.h ..\eglib\config.h</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_LIB;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">\r
+    <ClCompile />\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_eglib|Win32'">\r
+    <ClCompile />\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\eglib\src\garray.c" />\r
+    <ClCompile Include="..\eglib\src\gdate-win32.c" />\r
+    <ClCompile Include="..\eglib\src\gdir-win32.c" />\r
+    <ClCompile Include="..\eglib\src\gerror.c" />\r
+    <ClCompile Include="..\eglib\src\gfile-posix.c" />\r
+    <ClCompile Include="..\eglib\src\gfile-win32.c" />\r
+    <ClCompile Include="..\eglib\src\gfile.c" />\r
+    <ClCompile Include="..\eglib\src\ghashtable.c" />\r
+    <ClCompile Include="..\eglib\src\glist.c" />\r
+    <ClCompile Include="..\eglib\src\gmarkup.c" />\r
+    <ClCompile Include="..\eglib\src\gmem.c" />\r
+    <ClCompile Include="..\eglib\src\gmisc-win32.c" />\r
+    <ClCompile Include="..\eglib\src\gmodule-win32.c" />\r
+    <ClCompile Include="..\eglib\src\goutput.c" />\r
+    <ClCompile Include="..\eglib\src\gpath.c" />\r
+    <ClCompile Include="..\eglib\src\gpattern.c" />\r
+    <ClCompile Include="..\eglib\src\gptrarray.c" />\r
+    <ClCompile Include="..\eglib\src\gqueue.c" />\r
+    <ClCompile Include="..\eglib\src\gshell.c" />\r
+    <ClCompile Include="..\eglib\src\gslist.c" />\r
+    <ClCompile Include="..\eglib\src\gspawn.c" />\r
+    <ClCompile Include="..\eglib\src\gstr.c" />\r
+    <ClCompile Include="..\eglib\src\gstring.c" />\r
+    <ClCompile Include="..\eglib\src\gtimer-win32.c" />\r
+    <ClCompile Include="..\eglib\src\gunicode.c" />\r
+    <ClCompile Include="..\eglib\src\gutf8.c" />\r
+    <ClCompile Include="..\eglib\src\vasprintf.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\eglib\src\glib.h" />\r
+    <ClInclude Include="..\eglib\src\gmodule.h" />\r
+    <ClInclude Include="..\eglib\src\sort.frag.h" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/genmdesc.vcxproj b/msvc/genmdesc.vcxproj
new file mode 100644 (file)
index 0000000..0be8482
--- /dev/null
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{B7098DFA-31E6-4006-8A15-1C9A4E925149}</ProjectGuid>\r
+    <RootNamespace>genmdesc</RootNamespace>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>winsetup.bat</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)genmdesc.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <PostBuildEvent>\r
+      <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command>\r
+    </PostBuildEvent>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <PreBuildEvent>\r
+      <Command>winsetup.bat</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>.\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)genmdesc.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+    <PostBuildEvent>\r
+      <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command>\r
+    </PostBuildEvent>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>winsetup.bat</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)genmdesc.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ProgramDatabaseFile>.\Release/genmdesc.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <PostBuildEvent>\r
+      <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command>\r
+    </PostBuildEvent>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <PreBuildEvent>\r
+      <Command>winsetup.bat</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>.\Release/genmdesc.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)genmdesc.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ProgramDatabaseFile>.\Release/genmdesc.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+    <PostBuildEvent>\r
+      <Command>runmdesc.bat "$(TargetPath)" $(Platform)</Command>\r
+    </PostBuildEvent>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\mini\genmdesc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\helpers.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\monobitset.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\opcodes.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="eglib.vcxproj">\r
+      <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/libgc.vcxproj b/msvc/libgc.vcxproj
new file mode 100644 (file)
index 0000000..aaace84
--- /dev/null
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{EB56000B-C80B-4E8B-908D-D84D31B517D3}</ProjectGuid>\r
+    <RootNamespace>libgc</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/lib\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ProgramDataBaseFileName>$(OutDir)vc80.pdb</ProgramDataBaseFileName>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)libgc.lib</OutputFile>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ProgramDataBaseFileName>$(OutDir)vc80.pdb</ProgramDataBaseFileName>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)libgc.lib</OutputFile>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ProgramDataBaseFileName>$(OutDir)vc80.pdb</ProgramDataBaseFileName>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4311;4312;4996;4005;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)libgc.lib</OutputFile>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ProgramDataBaseFileName>$(OutDir)vc80.pdb</ProgramDataBaseFileName>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)libgc.lib</OutputFile>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\libgc\allchblk.c" />\r
+    <ClCompile Include="..\libgc\alloc.c" />\r
+    <ClCompile Include="..\libgc\blacklst.c" />\r
+    <ClCompile Include="..\libgc\dbg_mlc.c" />\r
+    <ClCompile Include="..\libgc\dyn_load.c" />\r
+    <ClCompile Include="..\libgc\finalize.c" />\r
+    <ClCompile Include="..\libgc\gcj_mlc.c" />\r
+    <ClCompile Include="..\libgc\headers.c" />\r
+    <ClCompile Include="..\libgc\mach_dep.c" />\r
+    <ClCompile Include="..\libgc\malloc.c" />\r
+    <ClCompile Include="..\libgc\mallocx.c" />\r
+    <ClCompile Include="..\libgc\mark.c" />\r
+    <ClCompile Include="..\libgc\mark_rts.c" />\r
+    <ClCompile Include="..\libgc\misc.c" />\r
+    <ClCompile Include="..\libgc\new_hblk.c" />\r
+    <ClCompile Include="..\libgc\obj_map.c" />\r
+    <ClCompile Include="..\libgc\os_dep.c" />\r
+    <ClCompile Include="..\libgc\ptr_chck.c" />\r
+    <ClCompile Include="..\libgc\reclaim.c" />\r
+    <ClCompile Include="..\libgc\stubborn.c" />\r
+    <ClCompile Include="..\libgc\typd_mlc.c" />\r
+    <ClCompile Include="..\libgc\win32_threads.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\libgc\include\gc.h" />\r
+    <ClInclude Include="..\libgc\include\private\gc_hdrs.h" />\r
+    <ClInclude Include="..\libgc\include\private\gc_locks.h" />\r
+    <ClInclude Include="..\libgc\include\gc_mark.h" />\r
+    <ClInclude Include="..\libgc\include\private\gc_pmark.h" />\r
+    <ClInclude Include="..\libgc\include\private\gc_priv.h" />\r
+    <ClInclude Include="..\libgc\include\private\gcconfig.h" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/libmono.vcxproj b/msvc/libmono.vcxproj
new file mode 100644 (file)
index 0000000..6ec4fd5
--- /dev/null
@@ -0,0 +1,1855 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{CB0D9E92-293C-439C-9AC7-C5F59B6E0771}</ProjectGuid>\r
+    <RootNamespace>libmono</RootNamespace>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>echo #define FULL_VERSION "Visual Studio built mono" &gt; ..\mono\mini\version.h</Command>\r
+    </PreBuildEvent>\r
+    <ClCompile>\r
+      <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>\r
+      <Optimization>Disabled</Optimization>\r
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <PrecompiledHeaderOutputFile>\r
+      </PrecompiledHeaderOutputFile>\r
+      <BrowseInformation>true</BrowseInformation>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;mswsock.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)mono.dll</OutputFile>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ModuleDefinitionFile>mono.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <PreBuildEvent>\r
+      <Command>echo #define FULL_VERSION "Visual Studio built mono" &gt; ..\mono\mini\version.h</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>\r
+      <Optimization>Disabled</Optimization>\r
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <PrecompiledHeaderOutputFile>\r
+      </PrecompiledHeaderOutputFile>\r
+      <BrowseInformation>true</BrowseInformation>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;mswsock.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ModuleDefinitionFile>mono.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)libmono.pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <PreBuildEvent>\r
+      <Command>echo #define FULL_VERSION "Visual Studio built mono" &gt; ..\mono\mini\version.h</Command>\r
+    </PreBuildEvent>\r
+    <ClCompile>\r
+      <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>\r
+      <Optimization>MinSpace</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <PrecompiledHeaderOutputFile>.\Release/libmono.pch</PrecompiledHeaderOutputFile>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;mswsock.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)mono.dll</OutputFile>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ModuleDefinitionFile>mono.def</ModuleDefinitionFile>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <PreBuildEvent>\r
+      <Command>echo #define FULL_VERSION "Visual Studio built mono" &gt; ..\mono\mini\version.h</Command>\r
+    </PreBuildEvent>\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>\r
+      <Optimization>MinSpace</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <PrecompiledHeaderOutputFile>.\Release/libmono.pch</PrecompiledHeaderOutputFile>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)mono.dll</OutputFile>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ModuleDefinitionFile>mono.def</ModuleDefinitionFile>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\config.h" />\r
+    <ClInclude Include="..\mono\io-layer\io-layer.h" />\r
+    <ClInclude Include="..\mono\utils\dlmalloc.h" />\r
+    <ClInclude Include="..\mono\utils\mono-codeman.h" />\r
+    <ClInclude Include="..\mono\utils\mono-compiler.h" />\r
+    <ClInclude Include="..\mono\utils\mono-counters.h" />\r
+    <ClInclude Include="..\mono\utils\mono-digest.h" />\r
+    <ClInclude Include="..\mono\utils\mono-dl.h" />\r
+    <ClInclude Include="..\mono\utils\mono-error-internals.h" />\r
+    <ClInclude Include="..\mono\utils\mono-error.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-hash.h" />\r
+    <ClInclude Include="..\mono\utils\mono-internal-hash.h" />\r
+    <ClInclude Include="..\mono\utils\mono-io-portability.h" />\r
+    <ClInclude Include="..\mono\utils\mono-logger.h" />\r
+    <ClInclude Include="..\mono\utils\mono-math.h" />\r
+    <ClInclude Include="..\mono\utils\mono-membar.h" />\r
+    <ClInclude Include="..\mono\utils\mono-mmap.h" />\r
+    <ClInclude Include="..\mono\utils\mono-networkinterfaces.h" />\r
+    <ClInclude Include="..\mono\utils\mono-path.h" />\r
+    <ClInclude Include="..\mono\utils\mono-poll.h" />\r
+    <ClInclude Include="..\mono\utils\mono-proclib.h" />\r
+    <ClInclude Include="..\mono\utils\mono-property-hash.h" />\r
+    <ClInclude Include="..\mono\utils\mono-semaphore.h" />\r
+    <ClInclude Include="..\mono\utils\mono-stdlib.h" />\r
+    <ClInclude Include="..\mono\utils\mono-time.h" />\r
+    <ClInclude Include="..\mono\utils\mono-uri.h" />\r
+    <ClInclude Include="..\mono\utils\mono-value-hash.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-wsq.h" />\r
+    <ClInclude Include="..\mono\utils\monobitset.h" />\r
+    <ClInclude Include="..\mono\metadata\runtime.h" />\r
+    <ClInclude Include="..\mono\utils\strenc.h" />\r
+    <ClInclude Include="..\mono\utils\strtod.h" />\r
+    <ClInclude Include="..\mono\metadata\appdomain.h" />\r
+    <ClInclude Include="..\mono\metadata\attach.h" />\r
+    <ClInclude Include="..\mono\metadata\char-conversions.h" />\r
+    <ClInclude Include="..\mono\metadata\cil-coff.h" />\r
+    <ClInclude Include="..\mono\metadata\class-internals.h" />\r
+    <ClInclude Include="..\mono\metadata\cominterop.h" />\r
+    <ClInclude Include="..\mono\metadata\console-io.h" />\r
+    <ClInclude Include="..\mono\metadata\coree.h" />\r
+    <ClInclude Include="..\mono\metadata\culture-info-tables.h" />\r
+    <ClInclude Include="..\mono\metadata\culture-info.h" />\r
+    <ClInclude Include="..\mono\metadata\debug-mono-symfile.h" />\r
+    <ClInclude Include="..\mono\metadata\decimal.h" />\r
+    <ClInclude Include="..\mono\metadata\domain-internals.h" />\r
+    <ClInclude Include="..\mono\metadata\environment.h" />\r
+    <ClInclude Include="..\mono\metadata\exception.h" />\r
+    <ClInclude Include="..\mono\metadata\file-io.h" />\r
+    <ClInclude Include="..\mono\metadata\filewatcher.h" />\r
+    <ClInclude Include="..\mono\metadata\gc-internal.h" />\r
+    <ClInclude Include="..\mono\metadata\locales.h" />\r
+    <ClInclude Include="..\mono\metadata\marshal.h" />\r
+    <ClInclude Include="..\mono\metadata\metadata-internals.h" />\r
+    <ClInclude Include="..\mono\metadata\method-builder.h" />\r
+    <ClInclude Include="..\mono\metadata\monitor.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-basic-block.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-debug-debugger.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-debug.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-mlist.h" />\r
+    <ClInclude Include="..\mono\metadata\mono-perfcounters.h" />\r
+    <ClInclude Include="..\mono\metadata\object-internals.h" />\r
+    <ClInclude Include="..\mono\metadata\process.h" />\r
+    <ClInclude Include="..\mono\metadata\profiler-private.h" />\r
+    <ClInclude Include="..\mono\metadata\rand.h" />\r
+    <ClInclude Include="..\mono\metadata\security-core-clr.h" />\r
+    <ClInclude Include="..\mono\metadata\security-manager.h" />\r
+    <ClInclude Include="..\mono\metadata\security.h" />\r
+    <ClInclude Include="..\mono\metadata\socket-io.h" />\r
+    <ClInclude Include="..\mono\metadata\string-icalls.h" />\r
+    <ClInclude Include="..\mono\metadata\sysmath.h" />\r
+    <ClInclude Include="..\mono\metadata\tabledefs.h" />\r
+    <ClInclude Include="..\mono\metadata\threadpool.h" />\r
+    <ClInclude Include="..\mono\metadata\threads-types.h" />\r
+    <ClInclude Include="..\mono\os\gc_wrapper.h" />\r
+    <ClInclude Include="..\mono\mini\abcremoval.h" />\r
+    <ClInclude Include="..\mono\mini\cpu-pentium.h" />\r
+    <ClInclude Include="..\mono\mini\debugger-agent.h" />\r
+    <ClInclude Include="..\mono\mini\declsec.h" />\r
+    <ClInclude Include="..\mono\mini\dwarfwriter.h" />\r
+    <ClInclude Include="..\mono\mini\image-writer.h" />\r
+    <ClInclude Include="..\mono\mini\ir-emit.h" />\r
+    <ClInclude Include="..\mono\mini\jit-icalls.h" />\r
+    <ClInclude Include="..\mono\mini\mini-arch.h" />\r
+    <ClInclude Include="..\mono\mini\mini-gc.h" />\r
+    <ClInclude Include="..\mono\mini\mini-ops.h" />\r
+    <ClInclude Include="..\mono\mini\mini.h" />\r
+    <ClInclude Include="..\mono\mini\regalloc.h" />\r
+    <ClInclude Include="..\mono\mini\ssapre.h" />\r
+    <ClInclude Include="..\mono\mini\trace.h" />\r
+    <CustomBuildStep Include="..\mono\mini\mini-x86.h">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
+    </CustomBuildStep>\r
+    <CustomBuildStep Include="..\mono\mini\mini-amd64.h">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+    </CustomBuildStep>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\utils\dlmalloc.c" />\r
+    <ClCompile Include="..\mono\utils\mono-codeman.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-counters.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-dl.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-error.c" />\r
+    <ClCompile Include="..\mono\utils\mono-filemap.c" />\r
+    <ClCompile Include="..\mono\metadata\mono-hash.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-internal-hash.c" />\r
+    <ClCompile Include="..\mono\utils\mono-io-portability.c" />\r
+    <ClCompile Include="..\mono\utils\mono-logger.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-math.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-md5.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-mmap.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-networkinterfaces.c" />\r
+    <ClCompile Include="..\mono\utils\mono-path.c" />\r
+    <ClCompile Include="..\mono\utils\mono-poll.c" />\r
+    <ClCompile Include="..\mono\utils\mono-proclib.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-property-hash.c" />\r
+    <ClCompile Include="..\mono\utils\mono-publib.c" />\r
+    <ClCompile Include="..\mono\utils\mono-semaphore.c" />\r
+    <ClCompile Include="..\mono\utils\mono-sha1.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-stdlib.c" />\r
+    <ClCompile Include="..\mono\utils\mono-time.c" />\r
+    <ClCompile Include="..\mono\utils\mono-uri.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\mono-value-hash.c" />\r
+    <ClCompile Include="..\mono\metadata\mono-wsq.c" />\r
+    <ClCompile Include="..\mono\utils\monobitset.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\runtime.c" />\r
+    <ClCompile Include="..\mono\utils\strenc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\utils\strtod.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\appdomain.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\assembly.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\attach.c" />\r
+    <ClCompile Include="..\mono\metadata\boehm-gc.c" />\r
+    <ClCompile Include="..\mono\metadata\class.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\cominterop.c" />\r
+    <ClCompile Include="..\mono\metadata\console-win32.c" />\r
+    <ClCompile Include="..\mono\metadata\coree.c" />\r
+    <ClCompile Include="..\mono\metadata\debug-helpers.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\debug-mono-symfile.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\decimal.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\domain.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\environment.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\exception.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\file-io.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\filewatcher.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\gc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\icall.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\image.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\loader.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\locales.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\marshal.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mempool.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\metadata-verify.c" />\r
+    <ClCompile Include="..\mono\metadata\metadata.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\method-builder.c" />\r
+    <ClCompile Include="..\mono\metadata\monitor.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mono-basic-block.c" />\r
+    <ClCompile Include="..\mono\metadata\mono-config.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mono-debug-debugger.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mono-debug.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mono-endian.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\mono-mlist.c" />\r
+    <ClCompile Include="..\mono\metadata\mono-perfcounters.c" />\r
+    <ClCompile Include="..\mono\metadata\object.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\opcodes.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\process.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\profiler.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\rand.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\reflection.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\security-core-clr.c" />\r
+    <ClCompile Include="..\mono\metadata\security-manager.c" />\r
+    <ClCompile Include="..\mono\metadata\security.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\socket-io.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\string-icalls.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\sysmath.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\threadpool.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\threads.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\metadata\verify.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\abcremoval.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\aot-compiler.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\aot-runtime.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\branch-opts.c" />\r
+    <ClCompile Include="..\mono\mini\cfold.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\debug-mini.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\debugger-agent.c" />\r
+    <ClCompile Include="..\mono\mini\declsec.c" />\r
+    <ClCompile Include="..\mono\mini\decompose.c" />\r
+    <ClCompile Include="..\mono\mini\dominators.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\driver.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\dwarfwriter.c" />\r
+    <ClCompile Include="..\mono\mini\graph.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\helpers.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\image-writer.c" />\r
+    <ClCompile Include="..\mono\mini\jit-icalls.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\linear-scan.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\liveness.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\local-propagation.c" />\r
+    <ClCompile Include="..\mono\mini\method-to-ir.c" />\r
+    <ClCompile Include="..\mono\mini\mini-codegen.c" />\r
+    <ClCompile Include="..\mono\mini\mini-exceptions.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\mini-gc.c" />\r
+    <ClCompile Include="..\mono\mini\mini-generic-sharing.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\mini-trampolines.c" />\r
+    <ClCompile Include="..\mono\mini\mini-windows.c" />\r
+    <ClCompile Include="..\mono\mini\mini.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\regalloc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\regalloc2.c" />\r
+    <ClCompile Include="..\mono\mini\simd-intrinsics.c" />\r
+    <ClCompile Include="..\mono\mini\ssa.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\ssapre.c" />\r
+    <ClCompile Include="..\mono\mini\trace.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\unwind.c" />\r
+    <ClCompile Include="..\mono\mini\wapihandles.c" />\r
+    <ClCompile Include="..\mono\mini\xdebug.c" />\r
+    <ClCompile Include="..\mono\mini\exceptions-x86.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\mini-x86.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\tramp-x86.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+      </PrecompiledHeader>\r
+      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\exceptions-amd64.c">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\mini-amd64.c">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+    </ClCompile>\r
+    <ClCompile Include="..\mono\mini\tramp-amd64.c">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="eglib.vcxproj">\r
+      <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+    <ProjectReference Include="genmdesc.vcxproj">\r
+      <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+    <ProjectReference Include="libgc.vcxproj">\r
+      <Project>{eb56000b-c80b-4e8b-908d-d84d31b517d3}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/libtest.vcxproj b/msvc/libtest.vcxproj
new file mode 100644 (file)
index 0000000..bdf764e
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}</ProjectGuid>\r
+    <RootNamespace>libtest</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\eglib\src;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\eglib\src;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\eglib\src;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\eglib\src;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTEST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>eglib.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\tests\libtest.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="eglib.vcxproj">\r
+      <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
index cda193c8fb20302eeb8474c5b96ee14d06cd94c8..bb5647d429698641687db61b94d0d02d2dec0c06 100644 (file)
@@ -1,5 +1,5 @@
 ; file generated by create-windef.pl
-LIBRARY mono.dll
+LIBRARY libmono.dll
 EXPORTS
 MonoFixupCorEE
 mono_add_internal_call
@@ -229,6 +229,8 @@ mono_declsec_get_inheritdemands_class
 mono_declsec_get_inheritdemands_method
 mono_declsec_get_linkdemands
 mono_declsec_get_method_action
+mono_dl_fallback_register
+mono_dl_fallback_unregister
 mono_digest_get_public_token
 mono_disasm_code
 mono_disasm_code_one
index cc2314a9575e78d8611129c282aaf066f0bc7677..4f2e811a9e3d7af6e29fb88f82c1d2d271e6d9b3 100644 (file)
@@ -1,6 +1,6 @@
 \r
-Microsoft Visual Studio Solution File, Format Version 10.00\r
-# Visual Studio 2008\r
+Microsoft Visual Studio Solution File, Format Version 11.00\r
+# Visual Studio 2010\r
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Embedded Samples", "Embedded Samples", "{5FE09AA5-C3C9-45EA-A323-36A11B653CEC}"\r
 EndProject\r
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{EE2CC761-9652-44AC-9204-7EB31194CAA6}"\r
@@ -9,281 +9,170 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{
 EndProject\r
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{ECA11C76-E192-4F67-A8FA-28B637D9716F}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmdesc", "genmdesc.vcproj", "{B7098DFA-31E6-4006-8A15-1C9A4E925149}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmdesc", "genmdesc.vcxproj", "{B7098DFA-31E6-4006-8A15-1C9A4E925149}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono", "libmono.vcproj", "{CB0D9E92-293C-439C-9AC7-C5F59B6E0771}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {B7098DFA-31E6-4006-8A15-1C9A4E925149}\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {EB56000B-C80B-4E8B-908D-D84D31B517D3}\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmono", "libmono.vcxproj", "{CB0D9E92-293C-439C-9AC7-C5F59B6E0771}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-invoke", "test-invoke.vcproj", "{C5639B3F-288A-4A4B-A4A5-C0D85834221D}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-invoke", "test-invoke.vcxproj", "{C5639B3F-288A-4A4B-A4A5-C0D85834221D}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "teste", "teste.vcproj", "{6FDE4E5E-57D0-432F-A987-6C226A7827E4}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "teste", "teste.vcxproj", "{6FDE4E5E-57D0-432F-A987-6C226A7827E4}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono", "mono.vcproj", "{A0EDDCD9-940F-432C-A28F-7EF322437D79}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466}\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono", "mono.vcxproj", "{A0EDDCD9-940F-432C-A28F-7EF322437D79}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcproj", "{EB56000B-C80B-4E8B-908D-D84D31B517D3}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcxproj", "{EB56000B-C80B-4E8B-908D-D84D31B517D3}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodis", "monodis.vcproj", "{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodis", "monodis.vcxproj", "{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pedump", "pedump.vcproj", "{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pedump", "pedump.vcxproj", "{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodiet", "monodiet.vcproj", "{8F90007F-8019-4191-8808-891E4762D958}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodiet", "monodiet.vcxproj", "{8F90007F-8019-4191-8808-891E4762D958}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monograph", "monograph.vcproj", "{CA2A69D6-3B9D-45A5-8BF7-4E242E683122}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monograph", "monograph.vcxproj", "{CA2A69D6-3B9D-45A5-8BF7-4E242E683122}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-metadata", "test-metadata.vcproj", "{C2EB666E-9146-4B7A-85F6-25F9EA313770}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-metadata", "test-metadata.vcxproj", "{C2EB666E-9146-4B7A-85F6-25F9EA313770}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eglib", "eglib.vcproj", "{158073ED-99AE-4196-9EDC-DDB2344F8466}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eglib", "eglib.vcxproj", "{158073ED-99AE-4196-9EDC-DDB2344F8466}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_eglib", "test_eglib.vcproj", "{80A0620A-3478-4E1A-AA7C-0D2387B892AB}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_eglib", "test_eglib.vcxproj", "{80A0620A-3478-4E1A-AA7C-0D2387B892AB}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest", "libtest.vcproj", "{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466} = {158073ED-99AE-4196-9EDC-DDB2344F8466}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest", "libtest.vcxproj", "{5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monoposixhelper", "monoposixhelper.vcproj", "{33014734-0F46-4099-9A21-0C989E428681}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {B7098DFA-31E6-4006-8A15-1C9A4E925149}\r
-       EndProjectSection\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monoposixhelper", "monoposixhelper.vcxproj", "{33014734-0F46-4099-9A21-0C989E428681}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jay2008", "..\..\mcs\jay\jay2008.vcproj", "{5D485D32-3B9F-4287-AB24-C8DA5B89F537}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-logging", "profiler-logging.vcxproj", "{86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-logging", "profiler-logging.vcproj", "{86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-cov", "profiler-cov.vcxproj", "{83D4D926-2983-4770-BA92-EB9CB8828C95}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "profiler-cov", "profiler-cov.vcproj", "{83D4D926-2983-4770-BA92-EB9CB8828C95}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jay", "..\mcs\jay\jay.vcxproj", "{5D485D32-3B9F-4287-AB24-C8DA5B89F537}"\r
 EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug_eglib|Win32 = Debug_eglib|Win32\r
-               Debug_eglib|x64 = Debug_eglib|x64\r
                Debug|Win32 = Debug|Win32\r
                Debug|x64 = Debug|x64\r
-               Release_eglib|Win32 = Release_eglib|Win32\r
-               Release_eglib|x64 = Release_eglib|x64\r
                Release|Win32 = Release|Win32\r
                Release|x64 = Release|x64\r
        EndGlobalSection\r
        GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
                {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Win32.Build.0 = Debug|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.ActiveCfg = Debug|x64\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|x64.Build.0 = Debug|x64\r
                {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.ActiveCfg = Release|Win32\r
                {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.Build.0 = Release|Win32\r
-               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.ActiveCfg = Release|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.ActiveCfg = Release|x64\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|x64.Build.0 = Release|x64\r
                {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|x64.ActiveCfg = Debug|x64\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|x64.Build.0 = Debug|x64\r
                {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Win32.ActiveCfg = Release|Win32\r
                {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Win32.Build.0 = Release|Win32\r
-               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|x64.ActiveCfg = Release|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|x64.ActiveCfg = Release|x64\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|x64.Build.0 = Release|x64\r
                {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.ActiveCfg = Debug|x64\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|x64.Build.0 = Debug|x64\r
                {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.ActiveCfg = Release|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.ActiveCfg = Release|x64\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|x64.Build.0 = Release|x64\r
                {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.ActiveCfg = Debug|x64\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|x64.Build.0 = Debug|x64\r
                {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.ActiveCfg = Release|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.ActiveCfg = Release|x64\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|x64.Build.0 = Release|x64\r
                {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Win32.Build.0 = Debug|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.ActiveCfg = Debug|x64\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|x64.Build.0 = Debug|x64\r
                {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.ActiveCfg = Release|Win32\r
                {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.Build.0 = Release|Win32\r
-               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.ActiveCfg = Release|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.ActiveCfg = Release|x64\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|x64.Build.0 = Release|x64\r
                {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Win32.Build.0 = Debug|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.ActiveCfg = Debug|x64\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|x64.Build.0 = Debug|x64\r
                {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.ActiveCfg = Release|Win32\r
                {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.Build.0 = Release|Win32\r
-               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.ActiveCfg = Release|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.ActiveCfg = Release|x64\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|x64.Build.0 = Release|x64\r
                {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.ActiveCfg = Debug|x64\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|x64.Build.0 = Debug|x64\r
                {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.ActiveCfg = Release|Win32\r
-               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.ActiveCfg = Release|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.ActiveCfg = Release|x64\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|x64.Build.0 = Release|x64\r
                {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.ActiveCfg = Debug|x64\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|x64.Build.0 = Debug|x64\r
                {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.ActiveCfg = Release|Win32\r
-               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.ActiveCfg = Release|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.ActiveCfg = Release|x64\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|x64.Build.0 = Release|x64\r
                {8F90007F-8019-4191-8808-891E4762D958}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|x64.ActiveCfg = Debug|x64\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|x64.Build.0 = Debug|x64\r
                {8F90007F-8019-4191-8808-891E4762D958}.Release|Win32.ActiveCfg = Release|Win32\r
-               {8F90007F-8019-4191-8808-891E4762D958}.Release|x64.ActiveCfg = Release|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|x64.ActiveCfg = Release|x64\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|x64.Build.0 = Release|x64\r
                {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|x64.ActiveCfg = Debug|x64\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|x64.Build.0 = Debug|x64\r
                {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|x64.ActiveCfg = Release|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug_eglib|x64.ActiveCfg = Debug_eglib|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|x64.ActiveCfg = Release|x64\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|x64.Build.0 = Release|x64\r
                {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.ActiveCfg = Debug|x64\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|x64.Build.0 = Debug|x64\r
                {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.ActiveCfg = Release|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.ActiveCfg = Release|x64\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|x64.Build.0 = Release|x64\r
                {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.ActiveCfg = Debug|x64\r
+               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Debug|x64.Build.0 = Debug|x64\r
                {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|Win32.ActiveCfg = Release|Win32\r
-               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.ActiveCfg = Release|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.ActiveCfg = Release|x64\r
+               {158073ED-99AE-4196-9EDC-DDB2344F8466}.Release|x64.Build.0 = Release|x64\r
                {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.ActiveCfg = Debug|x64\r
+               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Debug|x64.Build.0 = Debug|x64\r
                {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|Win32.ActiveCfg = Release|Win32\r
-               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.ActiveCfg = Release|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.ActiveCfg = Release|x64\r
+               {80A0620A-3478-4E1A-AA7C-0D2387B892AB}.Release|x64.Build.0 = Release|x64\r
                {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.ActiveCfg = Debug|x64\r
+               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Debug|x64.Build.0 = Debug|x64\r
                {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.ActiveCfg = Release|Win32\r
                {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|Win32.Build.0 = Release|Win32\r
-               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.ActiveCfg = Release|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Debug_eglib|Win32.Build.0 = Debug_eglib|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Debug_eglib|x64.ActiveCfg = Debug_eglib|x64\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Debug_eglib|x64.Build.0 = Debug_eglib|x64\r
+               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.ActiveCfg = Release|x64\r
+               {5A435710-E6D2-4DD4-9B3F-A7239A32C6F4}.Release|x64.Build.0 = Release|x64\r
                {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {33014734-0F46-4099-9A21-0C989E428681}.Debug|Win32.Build.0 = Debug|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Release_eglib|Win32.ActiveCfg = Release_eglib|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Release_eglib|Win32.Build.0 = Release_eglib|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Release_eglib|x64.ActiveCfg = Release_eglib|Win32\r
+               {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.ActiveCfg = Debug|x64\r
+               {33014734-0F46-4099-9A21-0C989E428681}.Debug|x64.Build.0 = Debug|x64\r
                {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.ActiveCfg = Release|Win32\r
                {33014734-0F46-4099-9A21-0C989E428681}.Release|Win32.Build.0 = Release|Win32\r
-               {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.ActiveCfg = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug_eglib|Win32.ActiveCfg = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug_eglib|Win32.Build.0 = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug_eglib|x64.ActiveCfg = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug_eglib|x64.Build.0 = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.Build.0 = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release_eglib|Win32.ActiveCfg = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release_eglib|Win32.Build.0 = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release_eglib|x64.ActiveCfg = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.ActiveCfg = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.Build.0 = Release|Win32\r
-               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|x64.ActiveCfg = Release|Win32\r
-               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Debug_eglib|x64.ActiveCfg = Debug|Win32\r
+               {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.ActiveCfg = Release|x64\r
+               {33014734-0F46-4099-9A21-0C989E428681}.Release|x64.Build.0 = Release|x64\r
                {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Release_eglib|Win32.ActiveCfg = Release|Win32\r
-               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Release_eglib|x64.ActiveCfg = Release|Win32\r
+               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Debug|x64.Build.0 = Debug|Win32\r
                {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Release|Win32.ActiveCfg = Release|Win32\r
                {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Release|x64.ActiveCfg = Release|Win32\r
-               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Debug_eglib|Win32.ActiveCfg = Debug_eglib|Win32\r
-               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Debug_eglib|x64.ActiveCfg = Debug|Win32\r
+               {86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}.Release|x64.Build.0 = Release|Win32\r
                {83D4D926-2983-4770-BA92-EB9CB8828C95}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {83D4D926-2983-4770-BA92-EB9CB8828C95}.Debug|x64.ActiveCfg = Debug|Win32\r
-               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Release_eglib|Win32.ActiveCfg = Release|Win32\r
-               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Release_eglib|x64.ActiveCfg = Release|Win32\r
+               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Debug|x64.Build.0 = Debug|Win32\r
                {83D4D926-2983-4770-BA92-EB9CB8828C95}.Release|Win32.ActiveCfg = Release|Win32\r
                {83D4D926-2983-4770-BA92-EB9CB8828C95}.Release|x64.ActiveCfg = Release|Win32\r
+               {83D4D926-2983-4770-BA92-EB9CB8828C95}.Release|x64.Build.0 = Release|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|Win32.Build.0 = Debug|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Debug|x64.ActiveCfg = Debug|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.ActiveCfg = Release|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|Win32.Build.0 = Release|Win32\r
+               {5D485D32-3B9F-4287-AB24-C8DA5B89F537}.Release|x64.ActiveCfg = Release|Win32\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
diff --git a/msvc/mono.vcxproj b/msvc/mono.vcxproj
new file mode 100644 (file)
index 0000000..f024f6e
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{A0EDDCD9-940F-432C-A28F-7EF322437D79}</ProjectGuid>\r
+    <RootNamespace>mono</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>libmono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).exe.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <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=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>libmono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>libmono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;_CONSOLE;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>libmono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\mini\main.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="eglib.vcxproj">\r
+      <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/monodiet.vcxproj b/msvc/monodiet.vcxproj
new file mode 100644 (file)
index 0000000..b7ec16d
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{8F90007F-8019-4191-8808-891E4762D958}</ProjectGuid>\r
+    <RootNamespace>monodiet</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\libgc\include;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\mono\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;__WIN32__;HAVE_CONFIG_H;__i386__;TARGET_X86;HOST_WIN32;TARGET_WIN32;GC_NOT_DLL;GC_GCJ_SUPPORT;GC_WIN32_THREADS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)monodiet/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)monodiet/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)monodiet/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;mono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\libgc\include;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\mono\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)monodiet/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)monodiet/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)monodiet/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\metadata\monodiet.c" />\r
+    <ClCompile Include="..\mono\metadata\opcodes.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/monodis.vcxproj b/msvc/monodis.vcxproj
new file mode 100644 (file)
index 0000000..02c88b3
--- /dev/null
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}</ProjectGuid>\r
+    <RootNamespace>dis</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;mono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\dis\declsec.c" />\r
+    <ClCompile Include="..\mono\dis\dis-cil.c" />\r
+    <ClCompile Include="..\mono\dis\dump.c" />\r
+    <ClCompile Include="..\mono\dis\get.c" />\r
+    <ClCompile Include="..\mono\dis\main.c" />\r
+    <ClCompile Include="..\mono\metadata\opcodes.c" />\r
+    <ClCompile Include="..\mono\dis\util.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\mono\dis\declsec.h" />\r
+    <ClInclude Include="..\mono\dis\dis-cil.h" />\r
+    <ClInclude Include="..\mono\dis\dump.h" />\r
+    <ClInclude Include="..\mono\dis\get.h" />\r
+    <ClInclude Include="..\mono\dis\meta.h" />\r
+    <ClInclude Include="..\mono\dis\push-pop.h" />\r
+    <ClInclude Include="..\mono\dis\util.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/monograph.vcxproj b/msvc/monograph.vcxproj
new file mode 100644 (file)
index 0000000..91caf87
--- /dev/null
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{CA2A69D6-3B9D-45A5-8BF7-4E242E683122}</ProjectGuid>\r
+    <RootNamespace>monograph</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;mono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\VSDependancies\include\glib-2.0;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\VSDependancies\lib\glib-2.0\include;..\mono\;..\mono\jit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\monograph\monograph.c" />\r
+    <ClCompile Include="..\mono\metadata\opcodes.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/monoposixhelper.vcxproj b/msvc/monoposixhelper.vcxproj
new file mode 100644 (file)
index 0000000..06fbf4c
--- /dev/null
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{33014734-0F46-4099-9A21-0C989E428681}</ProjectGuid>\r
+    <RootNamespace>monoposixhelper</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\mono\eglib\src;..\..\mono;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__i386__;TARGET_X86;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Link>\r
+      <AdditionalDependencies>$(TargetDir)..\lib\eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)MonoPosixHelper.dll</OutputFile>\r
+      <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/MonoPosixHelper.lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\mono\eglib\src;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Link>\r
+      <OutputFile>$(OutDir)MonoPosixHelper.dll</OutputFile>\r
+      <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/MonoPosixHelper.lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\mono\eglib\src;..\..\mono;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Link>\r
+      <AdditionalDependencies>$(TargetDir)..\lib\eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)MonoPosixHelper.dll</OutputFile>\r
+      <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/MonoPosixHelper.lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\mono\eglib\src;..\..\mono;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <Link>\r
+      <OutputFile>$(OutDir)MonoPosixHelper.dll</OutputFile>\r
+      <ModuleDefinitionFile>monoposixhelper.def</ModuleDefinitionFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <ImportLibrary>$(Platform)_$(Configuration)/lib/MonoPosixHelper.lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\support\adler32.c" />\r
+    <ClCompile Include="..\support\compress.c" />\r
+    <ClCompile Include="..\support\crc32.c" />\r
+    <ClCompile Include="..\support\deflate.c" />\r
+    <ClCompile Include="..\support\errno.c" />\r
+    <ClCompile Include="..\support\gzio.c" />\r
+    <ClCompile Include="..\support\infback.c" />\r
+    <ClCompile Include="..\support\inffast.c" />\r
+    <ClCompile Include="..\support\inflate.c" />\r
+    <ClCompile Include="..\support\inftrees.c" />\r
+    <ClCompile Include="..\support\map.c" />\r
+    <ClCompile Include="..\support\signal.c" />\r
+    <ClCompile Include="..\support\stdio.c" />\r
+    <ClCompile Include="..\support\stdlib.c" />\r
+    <ClCompile Include="..\support\string.c" />\r
+    <ClCompile Include="..\support\trees.c" />\r
+    <ClCompile Include="..\support\uncompr.c" />\r
+    <ClCompile Include="..\support\zlib-helper.c" />\r
+    <ClCompile Include="..\support\zutil.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\support\inffast.h" />\r
+    <ClInclude Include="..\support\crc32.h" />\r
+    <ClInclude Include="..\support\deflate.h" />\r
+    <ClInclude Include="..\support\inffixed.h" />\r
+    <ClInclude Include="..\support\inflate.h" />\r
+    <ClInclude Include="..\support\inftrees.h" />\r
+    <ClInclude Include="..\support\map.h" />\r
+    <ClInclude Include="..\support\mph.h" />\r
+    <ClInclude Include="..\support\trees.h" />\r
+    <ClInclude Include="..\support\zconf.h" />\r
+    <ClInclude Include="..\support\zutil.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="monoposixhelper.def" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="genmdesc.vcxproj">\r
+      <Project>{b7098dfa-31e6-4006-8a15-1c9a4e925149}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/pedump.vcxproj b/msvc/pedump.vcxproj
new file mode 100644 (file)
index 0000000..2c6e291
--- /dev/null
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}</ProjectGuid>\r
+    <RootNamespace>pedump</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\libgc\include;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\mono\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;GC_NOT_DLL;GC_GCJ_SUPPORT;GC_WIN32_THREADS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)pedump/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)pedump/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)pedump/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;ws2_32.lib;gthread-2.0.lib;libgc.lib;mono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;ws2_32.lib;gthread-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\;..\libgc\include;..\VSDependancies\include\glib-2.0\glib;..\VSDependancies\include;..\mono\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;HOST_WIN32;TARGET_WIN32;__i386__;TARGET_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)pedump/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)pedump/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)pedump/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+      <DisableSpecificWarnings>4018;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;ws2_32.lib;gthread-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;ws2_32.lib;gthread-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\utils\strtod.c" />\r
+    <ClCompile Include="..\mono\metadata\appdomain.c" />\r
+    <ClCompile Include="..\mono\metadata\assembly.c" />\r
+    <ClCompile Include="..\mono\metadata\boehm-gc.c" />\r
+    <ClCompile Include="..\mono\metadata\class.c" />\r
+    <ClCompile Include="..\mono\metadata\console-win32.c" />\r
+    <ClCompile Include="..\mono\metadata\decimal.c" />\r
+    <ClCompile Include="..\mono\metadata\domain.c" />\r
+    <ClCompile Include="..\mono\metadata\environment.c" />\r
+    <ClCompile Include="..\mono\metadata\file-io.c" />\r
+    <ClCompile Include="..\mono\metadata\filewatcher.c" />\r
+    <ClCompile Include="..\mono\metadata\gc.c" />\r
+    <ClCompile Include="..\mono\metadata\icall.c" />\r
+    <ClCompile Include="..\mono\metadata\image.c" />\r
+    <ClCompile Include="..\mono\metadata\loader.c" />\r
+    <ClCompile Include="..\mono\metadata\locales.c" />\r
+    <ClCompile Include="..\mono\metadata\marshal.c" />\r
+    <ClCompile Include="..\mono\metadata\metadata.c" />\r
+    <ClCompile Include="..\mono\metadata\monitor.c" />\r
+    <ClCompile Include="..\mono\metadata\mono-config.c" />\r
+    <ClCompile Include="..\mono\utils\mono-dl.c" />\r
+    <ClCompile Include="..\mono\metadata\object.c" />\r
+    <ClCompile Include="..\mono\metadata\pedump.c" />\r
+    <ClCompile Include="..\mono\metadata\process.c" />\r
+    <ClCompile Include="..\mono\metadata\profiler.c" />\r
+    <ClCompile Include="..\mono\metadata\rand.c" />\r
+    <ClCompile Include="..\mono\metadata\rawbuffer.c" />\r
+    <ClCompile Include="..\mono\metadata\reflection.c" />\r
+    <ClCompile Include="..\mono\metadata\security-manager.c" />\r
+    <ClCompile Include="..\mono\metadata\security.c" />\r
+    <ClCompile Include="..\mono\metadata\socket-io.c" />\r
+    <ClCompile Include="..\mono\metadata\string-icalls.c" />\r
+    <ClCompile Include="..\mono\metadata\sysmath.c" />\r
+    <ClCompile Include="..\mono\metadata\threadpool.c" />\r
+    <ClCompile Include="..\mono\metadata\threads.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/profiler-cov.vcxproj b/msvc/profiler-cov.vcxproj
new file mode 100644 (file)
index 0000000..8bf8678
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug_eglib|Win32">\r
+      <Configuration>Debug_eglib</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{83D4D926-2983-4770-BA92-EB9CB8828C95}</ProjectGuid>\r
+    <RootNamespace>profilercov</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PROFILERCOV_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PROFILERCOV_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PROFILERCOV_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <AdditionalDependencies>mono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\profiler\mono-cov.c" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/profiler-logging.vcxproj b/msvc/profiler-logging.vcxproj
new file mode 100644 (file)
index 0000000..cd0bed6
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug_eglib|Win32">\r
+      <Configuration>Debug_eglib</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{86663B87-4CD2-42B6-8D8E-C79DA1CCDEE6}</ProjectGuid>\r
+    <RootNamespace>profilerlogging</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PROFILERLOGGING_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PROFILERLOGGING_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_eglib|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+      <ShowIncludes>true</ShowIncludes>\r
+    </ClCompile>\r
+    <Link>\r
+      <AdditionalDependencies>mono.lib;version.lib;libgc.lib;eglib.lib;ws2_32.lib;Psapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Windows</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\mono\profiler\mono-profiler-logging.c" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/test-invoke.vcxproj b/msvc/test-invoke.vcxproj
new file mode 100644 (file)
index 0000000..475b32b
--- /dev/null
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{C5639B3F-288A-4A4B-A4A5-C0D85834221D}</ProjectGuid>\r
+    <RootNamespace>testinvoke</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\libgc\include;..\..\VSDependancies\include\glib-2.0;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\lib\glib-2.0\include;..\..\VSDependancies\include;..\..\;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)invoke/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)invoke/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)invoke/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\libgc\include;..\..\VSDependancies\include\glib-2.0;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\lib\glib-2.0\include;..\..\VSDependancies\include;..\..\;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)invoke/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)invoke/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)invoke/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\samples\embed\test-invoke.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/test-metadata.vcxproj b/msvc/test-metadata.vcxproj
new file mode 100644 (file)
index 0000000..f28c1e3
--- /dev/null
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{C2EB666E-9146-4B7A-85F6-25F9EA313770}</ProjectGuid>\r
+    <RootNamespace>testmetadata</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\include;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)metadata/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)metadata/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)metadata/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\include;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)metadata/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)metadata/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)metadata/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\samples\embed\test-metadata.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/test_eglib.vcxproj b/msvc/test_eglib.vcxproj
new file mode 100644 (file)
index 0000000..8695a92
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{80A0620A-3478-4E1A-AA7C-0D2387B892AB}</ProjectGuid>\r
+    <RootNamespace>test_eglib</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib/test;../eglib;../msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_FORTIFY_SOURCE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>false</TreatWarningAsError>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>Ws2_32.lib;Psapi.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <OptimizeReferences>false</OptimizeReferences>\r
+      <EnableCOMDATFolding>false</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib/test;../eglib;../msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_FORTIFY_SOURCE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>false</TreatWarningAsError>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>Ws2_32.lib;Psapi.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib/test;../eglib;../msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_FORTIFY_SOURCE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>false</TreatWarningAsError>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>Ws2_32.lib;Psapi.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <OptimizeReferences>false</OptimizeReferences>\r
+      <EnableCOMDATFolding>false</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <AdditionalIncludeDirectories>../eglib/src;../eglib/test;../eglib;../msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_FORTIFY_SOURCE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level4</WarningLevel>\r
+      <TreatWarningAsError>false</TreatWarningAsError>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>Ws2_32.lib;Psapi.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\eglib\test\array.c" />\r
+    <ClCompile Include="..\eglib\test\dir.c" />\r
+    <ClCompile Include="..\eglib\test\driver.c" />\r
+    <ClCompile Include="..\eglib\test\endian.c" />\r
+    <ClCompile Include="..\eglib\test\fake.c" />\r
+    <ClCompile Include="..\eglib\test\file.c" />\r
+    <ClCompile Include="getopt.c" />\r
+    <ClCompile Include="getopt_long.c" />\r
+    <ClCompile Include="..\eglib\test\hashtable.c" />\r
+    <ClCompile Include="..\eglib\test\list.c" />\r
+    <ClCompile Include="..\eglib\test\markup.c" />\r
+    <ClCompile Include="..\eglib\test\memory.c" />\r
+    <ClCompile Include="..\eglib\test\module.c" />\r
+    <ClCompile Include="..\eglib\test\path.c" />\r
+    <ClCompile Include="..\eglib\test\pattern.c" />\r
+    <ClCompile Include="..\eglib\test\ptrarray.c" />\r
+    <ClCompile Include="..\eglib\test\queue.c" />\r
+    <ClCompile Include="..\eglib\test\shell.c" />\r
+    <ClCompile Include="..\eglib\test\sizes.c" />\r
+    <ClCompile Include="..\eglib\test\slist.c" />\r
+    <ClCompile Include="..\eglib\test\spawn.c" />\r
+    <ClCompile Include="..\eglib\test\string-util.c" />\r
+    <ClCompile Include="..\eglib\test\string.c" />\r
+    <ClCompile Include="..\eglib\test\test.c" />\r
+    <ClCompile Include="..\eglib\test\timer.c" />\r
+    <ClCompile Include="..\eglib\test\unicode.c" />\r
+    <ClCompile Include="..\eglib\test\utf8.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="getopt.h" />\r
+    <ClInclude Include="getopt_long.h" />\r
+    <ClInclude Include="..\eglib\src\glib.h" />\r
+    <ClInclude Include="..\eglib\test\test.h" />\r
+    <ClInclude Include="..\eglib\test\tests.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="eglib.vcxproj">\r
+      <Project>{158073ed-99ae-4196-9edc-ddb2344f8466}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/msvc/teste.vcxproj b/msvc/teste.vcxproj
new file mode 100644 (file)
index 0000000..4125f75
--- /dev/null
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{6FDE4E5E-57D0-432F-A987-6C226A7827E4}</ProjectGuid>\r
+    <RootNamespace>teste</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/bin\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)_$(Configuration)/obj/$(ProjectName)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\libgc\include;..\..\VSDependancies\include\glib-2.0;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\lib\glib-2.0\include;..\..\VSDependancies\include;..\..\;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)e/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)e/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)e/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\libgc\include;..\..\VSDependancies\include\glib-2.0;..\..\VSDependancies\include\glib-2.0\glib;..\..\VSDependancies\lib\glib-2.0\include;..\..\VSDependancies\include;..\..\;C:\cygwin\opt\mono\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <ObjectFileName>$(IntDir)e/</ObjectFileName>\r
+      <ProgramDataBaseFileName>$(IntDir)e/vc80.pdb</ProgramDataBaseFileName>\r
+      <XMLDocumentationFileName>$(IntDir)e/</XMLDocumentationFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <CompileAs>CompileAsC</CompileAs>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalDependencies>glib-2.0.lib;gmodule-2.0.lib;ws2_32.lib;gthread-2.0.lib;gobject-2.0.lib;libmono.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MinSpace</Optimization>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <BufferSecurityCheck>true</BufferSecurityCheck>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ProjectReference>\r
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>\r
+    </ProjectReference>\r
+    <Link>\r
+      <AdditionalLibraryDirectories>$(Platform)_$(Configuration)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\samples\embed\teste.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="libmono.vcxproj">\r
+      <Project>{cb0d9e92-293c-439c-9ac7-c5f59b6e0771}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
index 24f9210dd845dda9e018b5de5276a1e1fbdd30bf..a143f9480e8a0220d264cc66324d47220aeaca2e 100644 (file)
@@ -42,6 +42,10 @@ build_profiles += net_4_0
 #test_profiles += net_4_0
 endif
 
+if INSTALL_MONODROID
+build_profiles += monodroid
+endif
+
 if INSTALL_MONOTOUCH
 build_profiles += monotouch
 endif
index 5c00b0dd13987a8acaff167b2c53d90a2c22d078..35a9ea068d1a25cb132e1b69668d5276c6b6ec8e 100644 (file)
@@ -42,6 +42,7 @@
 /mkbundle1
 /mkbundle2
 /mod
+/mono-abi-info
 /mono-api-diff
 /mono-api-info
 /mono-api-info1
index 8f5e8f8b504d4282815302f242315fcd1eee35a8..e95e2a76c7d3f12623f06cc5094a68a2469b5df1 100644 (file)
@@ -56,6 +56,7 @@ scripts_2_0 = \
        csharp2$(SCRIPT_SUFFIX)                 \
        gacutil2$(SCRIPT_SUFFIX)                \
        gmcs$(SCRIPT_SUFFIX)                    \
+       mdoc$(SCRIPT_SUFFIX)                    \
        monop2$(SCRIPT_SUFFIX)                  \
        resgen2$(SCRIPT_SUFFIX)                 \
        wsdl2$(SCRIPT_SUFFIX)
@@ -68,7 +69,6 @@ scripts_4_0 = \
        installvst$(SCRIPT_SUFFIX)              \
        genxs$(SCRIPT_SUFFIX)                   \
        macpack$(SCRIPT_SUFFIX)                 \
-       mdoc$(SCRIPT_SUFFIX)                    \
        mono-cil-strip$(SCRIPT_SUFFIX)          \
        prj2make$(SCRIPT_SUFFIX)                \
        soapsuds$(SCRIPT_SUFFIX)                \
@@ -244,7 +244,7 @@ $(scripts_4_0): $(SCRIPT_IN) Makefile
        mv -f $@.tmp $@
 
 $(scripts_mono_configuration_crypto): mono-configuration-crypto.in
-       $(REWRITE2)  -e "s,@exe_name@,mono-configuration-crypto,g" $(srcdir)/mono-configuration-crypto.in > $@.tmp
+       $(REWRITE4)  -e "s,@exe_name@,mono-configuration-crypto,g" $(srcdir)/mono-configuration-crypto.in > $@.tmp
        mv -f $@.tmp $@
 
 $(MDOC_SUBCOMMANDS): Makefile