Standardized Mainsoft ConstraintCollection tests.
authorEyal Alalouf <eyala@mainsoft.com>
Sun, 29 May 2005 10:35:17 +0000 (10:35 -0000)
committerEyal Alalouf <eyala@mainsoft.com>
Sun, 29 May 2005 10:35:17 +0000 (10:35 -0000)
svn path=/trunk/mcs/; revision=45156

362 files changed:
ChangeLog
README.vsnet [new file with mode: 0644]
configure.in
genmdesc.vcproj [new file with mode: 0644]
libgc/ChangeLog
libgc/libgc.vcproj [new file with mode: 0644]
libmono.vcproj [new file with mode: 0644]
mcs/class/I18N/CJK/Gb2312Convert.cs
mcs/class/I18N/CJK/JISConvert.cs
mcs/class/I18N/Common/Manager.cs
mcs/class/IBM.Data.DB2/IBM.Data.DB2/DB2Environment.cs
mcs/class/Managed.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/SWF.csproj
mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources
mcs/class/Managed.Windows.Forms/System.Windows.Forms/AxHost.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Clipboard.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ComboBox.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataFormats.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGrid.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridBoolColumn.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridColumnStyle.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridDrawingLogic.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridPreferredColumnWidthTypeConverter.cs [new file with mode: 0644]
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridTableStyle.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridTextBox.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridTextBoxColumn.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataObject.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DateTimePicker.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ErrorProvider.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/FileDialog.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/FolderBrowserDialog.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/FontDialog.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Form.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/GroupBox.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Help.cs [new file with mode: 0644]
mcs/class/Managed.Windows.Forms/System.Windows.Forms/HelpProvider.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ImageList.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Label.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/LinkArea.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListBox.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/MdiClient.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Menu.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/MonthCalendar.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/NotifyIcon.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/OpenFileDialog.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Panel.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/PictureBox.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/SaveFileDialog.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ScrollableControl.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/SelectionRangeConverter.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Splitter.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/StatusBar.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabPage.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolBar.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolBarButton.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TrackBar.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/UserControl.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIOSX.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIWin32.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs
mcs/class/Microsoft.VisualBasic/Microsoft.VisualBasic.CompilerServices/ChangeLog
mcs/class/Microsoft.VisualBasic/Microsoft.VisualBasic.CompilerServices/ObjectType.cs
mcs/class/Microsoft.VisualBasic/Microsoft.VisualBasic.CompilerServices/VBBinder.cs
mcs/class/Microsoft.VisualBasic/Microsoft.VisualBasic/ChangeLog
mcs/class/Microsoft.VisualBasic/Microsoft.VisualBasic/Conversion.cs
mcs/class/Mono.Cairo/Mono.Cairo/Surface.cs
mcs/class/Mono.CompilerServices.SymbolWriter/ChangeLog
mcs/class/Mono.CompilerServices.SymbolWriter/Mono.CompilerServices.SymbolWriter.dll.sources
mcs/class/Mono.CompilerServices.SymbolWriter/SymbolWriterImpl.cs [new file with mode: 0644]
mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog [new file with mode: 0644]
mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs
mcs/class/Mono.Security/Mono.Security.Cryptography/KeyPairPersistence.cs
mcs/class/System.Data/ChangeLog
mcs/class/System.Data/System.Data.Common/ChangeLog
mcs/class/System.Data/System.Data.Common/DataContainer.cs
mcs/class/System.Data/System.Data.Common/DbException.cs [new file with mode: 0644]
mcs/class/System.Data/System.Data.Odbc/OdbcConnectionFactory.cs
mcs/class/System.Data/System.Data.Odbc/OdbcFactory.cs
mcs/class/System.Data/System.Data.Odbc/OdbcTypeConverter.cs
mcs/class/System.Data/System.Data.SqlClient/ChangeLog
mcs/class/System.Data/System.Data.SqlClient/SqlBulkCopyColumnMapping.cs
mcs/class/System.Data/System.Data.SqlClient/SqlBulkCopyOptions.cs
mcs/class/System.Data/System.Data.SqlClient/SqlClientMetaDataCollectionNames.cs [new file with mode: 0644]
mcs/class/System.Data/System.Data.SqlClient/SqlConnectionFactory.cs
mcs/class/System.Data/System.Data.SqlClient/SqlException.cs
mcs/class/System.Data/System.Data.SqlClient/SqlNotificationTransports.cs
mcs/class/System.Data/System.Data.SqlClient/SqlParameter.cs
mcs/class/System.Data/System.Data.SqlClient/SqlParameterCollection.cs
mcs/class/System.Data/System.Data.dll.sources
mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataRow.cs
mcs/class/System.Data/System.Data/DataTable.cs
mcs/class/System.Data/System.Data/ISafeDataRecord.cs
mcs/class/System.Data/System.Data_test.dll.sources
mcs/class/System.Data/Test/ChangeLog
mcs/class/System.Data/Test/System.Data.Test.Utils/ChangeLog [new file with mode: 0644]
mcs/class/System.Data/Test/System.Data.Test.Utils/DataProvider.cs [new file with mode: 0644]
mcs/class/System.Data/Test/System.Data/ChangeLog
mcs/class/System.Data/Test/System.Data/ConstraintCollectionTest2.cs [new file with mode: 0644]
mcs/class/System.Data/Test/System.Data/DataTableLoadRowTest.cs
mcs/class/System.Drawing/System.Drawing/ChangeLog
mcs/class/System.Drawing/System.Drawing/ComIStreamMarshaler.cs
mcs/class/System.Drawing/System.Drawing/Image.cs
mcs/class/System.Web.Services/System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs
mcs/class/System.Web/ChangeLog
mcs/class/System.Web/System.Web.Configuration/WebConfigurationSettings.cs
mcs/class/System.Web/System.Web.Configuration/WebControlsSectionHandler.cs
mcs/class/System.Web/System.Web.SessionState/ChangeLog
mcs/class/System.Web/System.Web.SessionState/HttpSessionState.cs
mcs/class/System.Web/System.Web.SessionState/RemoteStateServer.cs
mcs/class/System.Web/System.Web.SessionState/SessionInProcHandler.cs
mcs/class/System.Web/System.Web.SessionState/SessionSQLServerHandler.cs
mcs/class/System.Web/System.Web.SessionState/SessionStateServerHandler.cs
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/CollectionDataSource.cs
mcs/class/System.Web/System.Web.UI.WebControls/CommandField.cs
mcs/class/System.Web/System.Web.UI.WebControls/DataGridItem.cs
mcs/class/System.Web/System.Web.UI.WebControls/DataListItem.cs
mcs/class/System.Web/System.Web.UI.WebControls/DetailsView.cs
mcs/class/System.Web/System.Web.UI.WebControls/FontUnitConverter.cs
mcs/class/System.Web/System.Web.UI.WebControls/FormView.cs
mcs/class/System.Web/System.Web.UI.WebControls/GridViewRow.cs
mcs/class/System.Web/System.Web.UI.WebControls/HierarchicalDataBoundControl.cs
mcs/class/System.Web/System.Web.UI.WebControls/MenuItemTemplateContainer.cs
mcs/class/System.Web/System.Web.UI.WebControls/PagedDataSource.cs
mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItem.cs
mcs/class/System.Web/System.Web.UI.WebControls/SiteMapDataSource.cs
mcs/class/System.Web/System.Web.UI.WebControls/SiteMapDataSourceView.cs
mcs/class/System.Web/System.Web.UI.WebControls/SiteMapHierarchicalDataSourceView.cs
mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItem.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/SiteMapPath.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceView.cs
mcs/class/System.Web/System.Web.UI.WebControls/TreeView.cs
mcs/class/System.Web/System.Web.UI.WebControls/XmlDataSourceView.cs
mcs/class/System.Web/System.Web.UI/AttributeCollection.cs
mcs/class/System.Web/System.Web.UI/ChangeLog
mcs/class/System.Web/System.Web.UI/Control.cs
mcs/class/System.Web/System.Web.UI/DataSourceView.cs
mcs/class/System.Web/System.Web.UI/HierarchicalDataSourceControl.cs
mcs/class/System.Web/System.Web.UI/IDataItemContainer.cs
mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web.dll.sources
mcs/class/System.Web/System.Web/CapabilitiesLoader.cs
mcs/class/System.Web/System.Web/ChangeLog
mcs/class/System.Web/System.Web/MimeTypes.cs
mcs/class/System.Web/System.Web/SiteMap.cs
mcs/class/System.Web/System.Web/SiteMapNode.cs
mcs/class/System.Web/System.Web/SiteMapNodeCollection.cs
mcs/class/System.Web/System.Web/SiteMapProvider.cs
mcs/class/System.Web/System.Web/SiteMapProviderCollection.cs
mcs/class/System.Web/System.Web/StaticSiteMapProvider.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web/XmlSiteMapProvider.cs
mcs/class/System.XML/ChangeLog
mcs/class/System.XML/Makefile
mcs/class/System.XML/Test/System.Xml/ChangeLog
mcs/class/System.XML/Test/System.Xml/W3C/ChangeLog [new file with mode: 0644]
mcs/class/System.XML/Test/System.Xml/W3C/README [new file with mode: 0644]
mcs/class/System/ChangeLog
mcs/class/System/System.ComponentModel/CategoryAttribute.cs
mcs/class/System/System.ComponentModel/LicenseManager.cs
mcs/class/System/System.Configuration/ConfigurationSettings.cs
mcs/class/System/System.IO/ChangeLog
mcs/class/System/System.IO/DefaultWatcher.cs
mcs/class/System/System.IO/FAMWatcher.cs
mcs/class/System/System.IO/FileSystemWatcher.cs
mcs/class/System/System.IO/KeventWatcher.cs
mcs/class/System/System.IO/WindowsWatcher.cs
mcs/class/System/System.Net/DigestClient.cs
mcs/class/System/System.Net/GlobalProxySelection.cs
mcs/class/System/System.Text.RegularExpressions/ChangeLog
mcs/class/System/System.Text.RegularExpressions/regex.cs
mcs/class/System/System.Text.RegularExpressions/replace.cs
mcs/class/System/System.Timers/ChangeLog
mcs/class/System/System.Timers/Timer.cs
mcs/class/System/System_test.dll.sources
mcs/class/System/Test/System.ComponentModel/LicenseManagerTests.cs
mcs/class/System/Test/System.Text.RegularExpressions/ChangeLog
mcs/class/System/Test/System.Text.RegularExpressions/RegexReplace.cs
mcs/class/System/Test/System.Timers/ChangeLog [new file with mode: 0644]
mcs/class/System/Test/System.Timers/TimerTest.cs [new file with mode: 0644]
mcs/class/corlib/ChangeLog
mcs/class/corlib/Mono.Security.Cryptography/ChangeLog
mcs/class/corlib/Mono.Security.Cryptography/KeyPairPersistence.cs
mcs/class/corlib/System.Collections.Generic/ChangeLog
mcs/class/corlib/System.Collections.Generic/Dictionary.cs
mcs/class/corlib/System.Collections.Generic/IDictionary.cs
mcs/class/corlib/System.Collections/ChangeLog
mcs/class/corlib/System.Collections/Queue.cs
mcs/class/corlib/System.Diagnostics/ChangeLog
mcs/class/corlib/System.Diagnostics/StackTrace.cs
mcs/class/corlib/System.IO/ChangeLog
mcs/class/corlib/System.IO/File.cs
mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/ConstructorBuilder.cs
mcs/class/corlib/System.Reflection.Emit/CustomAttributeBuilder.cs
mcs/class/corlib/System.Reflection.Emit/GenericTypeParameterBuilder.cs
mcs/class/corlib/System.Reflection.Emit/ILGenerator.cs
mcs/class/corlib/System.Reflection.Emit/LocalBuilder.cs
mcs/class/corlib/System.Reflection.Emit/MethodBuilder.cs
mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs
mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs
mcs/class/corlib/System.Reflection/Assembly.cs
mcs/class/corlib/System.Reflection/Binder.cs
mcs/class/corlib/System.Reflection/ChangeLog
mcs/class/corlib/System.Runtime.Hosting/ActivationArguments.cs [new file with mode: 0644]
mcs/class/corlib/System.Runtime.Hosting/ApplicationActivator.cs [new file with mode: 0644]
mcs/class/corlib/System.Runtime.Hosting/ChangeLog [new file with mode: 0644]
mcs/class/corlib/System.Runtime.Remoting.Services/ChangeLog
mcs/class/corlib/System.Runtime.Remoting.Services/TrackingServices.cs
mcs/class/corlib/System.Runtime.Remoting/ChangeLog
mcs/class/corlib/System.Runtime.Remoting/InternalRemotingServices.cs
mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ChangeLog
mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/CodeGenerator.cs
mcs/class/corlib/System.Security.Policy/ChangeLog
mcs/class/corlib/System.Security.Policy/DefaultPolicies.cs [new file with mode: 0644]
mcs/class/corlib/System.Security.Policy/PolicyLevel.cs
mcs/class/corlib/System.Security/ChangeLog
mcs/class/corlib/System.Security/CodeAccessPermission.cs
mcs/class/corlib/System.Security/HostSecurityManager.cs
mcs/class/corlib/System.Security/PermissionBuilder.cs [new file with mode: 0644]
mcs/class/corlib/System.Security/PermissionSet.cs
mcs/class/corlib/System.Security/SecurityContext.cs
mcs/class/corlib/System.Security/SecurityException.cs
mcs/class/corlib/System.Text/ChangeLog
mcs/class/corlib/System.Text/Encoding.cs
mcs/class/corlib/System.Text/StringBuilder.cs
mcs/class/corlib/System.Threading/ChangeLog
mcs/class/corlib/System.Threading/SynchronizationContext.cs
mcs/class/corlib/System.Threading/Thread.cs
mcs/class/corlib/System/AppDomainManager.cs
mcs/class/corlib/System/AppDomainSetup.cs
mcs/class/corlib/System/ApplicationActivator.cs [deleted file]
mcs/class/corlib/System/ChangeLog
mcs/class/corlib/System/DateTime.cs
mcs/class/corlib/System/Environment.cs
mcs/class/corlib/System/Exception.cs
mcs/class/corlib/System/MonoType.cs
mcs/class/corlib/System/String.cs
mcs/class/corlib/System/Type.cs
mcs/class/corlib/Test/System.Collections/ChangeLog
mcs/class/corlib/Test/System.Collections/QueueTest.cs
mcs/class/corlib/Test/System.Reflection.Emit/EnumBuilderTest.cs
mcs/class/corlib/Test/System.Reflection/ChangeLog
mcs/class/corlib/Test/System.Reflection/MethodInfoTest.cs
mcs/class/corlib/Test/System.Reflection/TypeDelegatorTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Policy/ChangeLog
mcs/class/corlib/Test/System.Security.Policy/PolicyLevelTest.cs
mcs/class/corlib/Test/System.Security/ChangeLog
mcs/class/corlib/Test/System.Security/HostSecurityManagerTest.cs
mcs/class/corlib/Test/System.Security/NamedPermissionSetTest.cs
mcs/class/corlib/Test/System.Security/PermissionSetCas.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security/PermissionSetTest.cs
mcs/class/corlib/Test/System.Security/SecurityContextCas.cs
mcs/class/corlib/Test/System/ChangeLog
mcs/class/corlib/Test/System/DateTimeTest.cs
mcs/class/corlib/corlib.dll.sources
mcs/class/corlib/corlib_test.dll.sources
mcs/errors/ChangeLog
mcs/errors/cs0172-2.cs [deleted file]
mcs/errors/cs0173-3.cs [new file with mode: 0644]
mcs/errors/known-issues-gmcs
mcs/mbas/ChangeLog
mcs/mbas/Test/tests/ChangeLog
mcs/mbas/Test/tests/directives/ConditionalStatementsA.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsB.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsC.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsD.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsE.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsF.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsG.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsH.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsI.vb [deleted file]
mcs/mbas/Test/tests/directives/ConditionalStatementsJ.vb [deleted file]
mcs/mbas/Test/tests/latebinding/TypeMembersT.vb
mcs/mbas/Test/tests/statements/ConditionalStatementsA.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsB.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsC.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsD.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsE.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsF.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsG.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsH.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsI.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/ConditionalStatementsJ.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/SelectCaseStatementA.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/SelectCaseStatementB.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/SelectCaseStatementC.vb [new file with mode: 0644]
mcs/mbas/Test/tests/statements/SelectCaseStatementD.vb [new file with mode: 0644]
mcs/mbas/expression.cs
mcs/mbas/mb-parser.jay
mcs/mbas/statement.cs
mcs/mbas/typemanager.cs
mcs/mcs/ChangeLog
mcs/mcs/anonymous.cs
mcs/mcs/attribute.cs
mcs/mcs/class.cs
mcs/mcs/convert.cs
mcs/mcs/cs-parser.jay
mcs/mcs/delegate.cs
mcs/mcs/ecore.cs
mcs/mcs/expression.cs
mcs/mcs/iterators.cs
mcs/mcs/parameter.cs
mcs/mcs/statement.cs
mcs/tests/ChangeLog
mcs/tests/Makefile
mcs/tests/test-386.cs [new file with mode: 0644]
mcs/tests/test-387.cs [new file with mode: 0644]
mono.sln [new file with mode: 0644]
mono.vcproj [new file with mode: 0644]
mono/arch/ChangeLog
mono/arch/ia64/ia64-codegen.h
mono/dis/ChangeLog
mono/dis/monodis.vcproj [new file with mode: 0644]
mono/io-layer/ChangeLog
mono/io-layer/io.c
mono/io-layer/processes.c
mono/metadata/ChangeLog
mono/metadata/appdomain.c
mono/metadata/culture-info-tables.h
mono/metadata/culture-info.h
mono/metadata/gc.c
mono/metadata/icall.c
mono/metadata/object-internals.h
mono/metadata/reflection.c
mono/metadata/verify.c
mono/mini/ChangeLog
mono/mini/basic-calls.cs
mono/mini/basic-long.cs
mono/mini/cpu-ia64.md
mono/mini/iltests.il
mono/mini/inssel-ia64.brg
mono/mini/jit-icalls.c
mono/mini/mini-codegen.c
mono/mini/mini-ia64.c
mono/mini/mini-ia64.h
mono/mini/mini-ops.h
mono/mini/mini.c
mono/mini/objects.cs
mono/mini/tramp-ia64.c
mono/monoburg/ChangeLog
mono/monoburg/monoburg.vcproj [new file with mode: 0644]
mono/monodiet.vcproj [new file with mode: 0644]
mono/monograph/ChangeLog
mono/monograph/monograph.vcproj [new file with mode: 0644]
mono/pedump.vcproj [new file with mode: 0644]
mono/tests/ChangeLog
mono/tests/Makefile.am
samples/embed/test-invoke.vcproj [new file with mode: 0644]
samples/embed/test-metadata.vcproj [new file with mode: 0644]
samples/embed/teste.vcproj [new file with mode: 0644]
tools/locale-builder/supp/ChangeLog
tools/locale-builder/supp/fr.xml [new file with mode: 0644]

index 499b9ff4e717715aa14db00a3bd8016ca9fb9504..61813d3457883f26fcb5890b51a0b51f7fd4e92c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com> 
+       * README.vsnet: Instructions about the VS.NET build.
+       * mono.sln: Mono solution file for VS.NET 2005.
+       * genmdesc.vcproj: Project file for genmdesc.
+       * libmono.vcproj: Project file for libmono.
+       * mono.vcproj: Project file for mono executable.
+
+2005-05-25  Ben Maurer  <bmaurer@ximian.com>
+
+       * configure.in: Do a test for libX11.so that really works :-).
+
 2005-05-22  Ben Maurer  <bmaurer@ximian.com>
 
        * configure.in: Add config stuff for libsqlite{,3} and
diff --git a/README.vsnet b/README.vsnet
new file mode 100644 (file)
index 0000000..8d9e421
--- /dev/null
@@ -0,0 +1,110 @@
+README.vsnet                                   Last updated: 2005-05-26
+
+
+SVN now includes a Visual Studio .NET 2005 (beta2) solution, mono.sln,
+and some projects files to build most of the unmanaged parts in Mono.
+
+The "mono.sln" solution file contains the VC projects files for:
+
+        * Embedded Samples
+               * test-invoke.vcproj
+               * test-metadata.vcproj
+               * teste.vcproj
+        * Libraries
+               * libgc.vcproj
+               * libmono.vcproj
+        * Tools
+               * genmdesc.vcproj
+               * monoburg.vcproj
+               * monodiet.vcproj
+               * monodis.vcproj
+               * monograph.vcproj
+               * pedump.vcproj
+        * mono.vcproj
+        
+
+REQUIREMENTS
+
+* A working cygwin (http://www.cygwin.com/) setup! This is required to:
+       * generate some files (via monoburg and genmdesc);
+       * build the class libraries; and
+       * test for regressions.
+
+* Visual Studio .NET 2005 beta2. Previous Visual Studio versions may
+work or requires, hopefully minimal, changes.
+        
+* VSDependencies.zip must be decompressed under /mono/ (otherwise you 
+will need to edit all the projects files. This file can be downloaded 
+from http://www.go-mono.com/archive/VSDependencies.zip
+
+
+LOCAL CHANGES
+
+Sadly solution/projects files aren't easy to move from computers to
+computers (well unless everyone follow the same naming convention) so
+you'll likely have to changes some options in order to compile the
+solution.
+
+        * each executed assembly (i.e. the EXE) must be able to find a
+        working mscorlib.dll (and all the other required assemblies).
+        This can be done in different ways. My preference is to use the
+        project "properties pages" in the "Configuration Properties
+        \Debugging\Environment" options and set MONO_PATH to the class
+        libraries directory build by cygwin (local) or on Linux
+        (remote).
+        
+        e.g. MONO_PATH=z:\svn\mcs\class\lib\default\
+        allows me to use the class libs build under Linux, while
+        MONO_PATH=C:\cygwin\opt\mono\lib\mono\1.0
+        use the one built from cygwin (after a make install)
+
+Some useful informations to adapt the solution/project files...
+
+        * My cygwin root dir is:       c:\cygwin\
+        * My username is:              poupou
+        * My mono install prefix is:   /opt/mono
+                
+
+BUILDING
+
+Once everything is installed (and edited) you can right-click on the
+"mono" solution (in the "Solution Explorer"), select "Clean
+Solution" (for the first time) then "Build Solution".
+
+
+KNOWN ISSUES
+
+[1] Most, BUT NOT ALL, the regressions tests pass under this build. The
+failures seems limited to some mathematical differences and to code
+relying on the stack walking functions. The hacks to replace the GCC
+functions (__builtin_frame_address and __builtin_return_address) are
+incomplete;
+
+[2] The solution doesn't provide complete (i.e. from scratch) build. It
+requires a working cygwin environment to create some files (e.g. via
+genmdesc, monoburg). This isn't so bad as without cygwin you wouldn't be
+able to test Mono properly (see REQUIREMENTS);
+
+[3] Only the Debug target is configured properly (easy to fix). Anyway
+there are other issues [1] to fix before switching to Release and IMHO
+the _biggest_ advantage to VS.NET is it's debugger/debugging tools;
+
+[4] The C compiler emits _lots_ of warning during compilation. Some
+warnings have been turned off for some projects (there was so much that
+it slowed down compilation). You can bring them back (or hide more of
+them) using the project "properties pages" windows, "Configuration
+Properties\C/C++\Advanced\Disable Specific Warnings";
+
+[5] Visual Studio 2005 should have all the latest header files required, 
+but if not (or if you're using an older version of VS) then install MS 
+Platform SDK (Windows Server 2003 is the latest) to ensure you have the 
+latest Windows header files. You can download it from:
+http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
+
+[6] Probably a lot more I didn't discover...
+
+
+MORE INFORMATIONS
+
+Please email <mono-devel-list@lists.ximian.com> if you have any problem
+and/or if there's something wrong/missing in the instructions.
index 8531d428198f1fd907093cc312863f8199e045ad..d81daa51c3faf9195f16819eaa3c25d77498c261 100644 (file)
@@ -1333,7 +1333,7 @@ LIBC="libc.so.6"
 INTL="libc.so.6"
 SQLITE="libsqlite.so.0"
 SQLITE3="libsqlite3.so.0"
-X11="libX11.so.6.2"
+X11="libX11.so"
 
 jit_wanted=false
 interp_wanted=false
@@ -1511,6 +1511,14 @@ case "$host" in
        INTL="libintl.so"
        ;;
 esac
+
+if test "x$X11" = "xlibX11.so"; then
+       AC_PATH_X
+       if test "x$no_x" != "xyes"; then
+               X11=`readlink $x_libraries/libX11.so`
+       fi
+fi
+
 AC_SUBST(libsuffix)
 
 if test "x$TARGET" != "xAMD64"; then
diff --git a/genmdesc.vcproj b/genmdesc.vcproj
new file mode 100644 (file)
index 0000000..541779d
--- /dev/null
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="genmdesc"\r
+       ProjectGUID="{B7098DFA-31E6-4006-8A15-1C9A4E925149}"\r
+       RootNamespace="genmdesc"\r
+       SignManifests="true"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="./VSDependancies/temp/genmdesc/Debug"\r
+                       IntermediateDirectory="./VSDependancies/temp/genmdesc/Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\./VSDependancies/genmdesc___Win32_Debug/genmdesc.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories=".\libgc\include;.\;&quot;.\VSDependancies\include\glib-2.0\glib&quot;;.\VSDependancies\include;.\mono\;.\mono\jit;&quot;C:\Program Files\Microsoft SDK\include&quot;"\r
+                               PreprocessorDefinitions="_DEBUG;WIN32;_CONSOLE;__WIN32__;HAVE_CONFIG_H;__i386__"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="0"\r
+                               PrecompiledHeaderFile=".\./VSDependancies/temp/genmdesc___Win32_Debug/genmdesc.pch"\r
+                               AssemblerListingLocation=".\./VSDependancies/temp/genmdesc___Win32_Debug/"\r
+                               ObjectFile=".\./VSDependancies/temp/genmdesc___Win32_Debug/"\r
+                               ProgramDataBaseFileName=".\./VSDependancies/temp/genmdesc___Win32_Debug/"\r
+                               BrowseInformation="1"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="4"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib glib-2.0.lib gmodule-2.0.lib"\r
+                               OutputFile=".\./VSDependancies/genmdesc___Win32_Debug/genmdesc.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\VSDependancies\lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile=".\./VSDependancies/genmdesc___Win32_Debug/genmdesc.pdb"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\./VSDependancies/temp/genmdesc___Win32_Debug/genmdesc.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/genmdesc.tlb"\r
+                               HeaderFileName=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\libgc\include,.\,.\VSDependancies\include\glib-2.0\glib,.\VSDependancies\include,.\mono\,.\mono\jit"\r
+                               PreprocessorDefinitions="NDEBUG;WIN32;_CONSOLE;__WIN32__;HAVE_CONFIG_H;__i386__"\r
+                               StringPooling="true"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="true"\r
+                               UsePrecompiledHeader="0"\r
+                               PrecompiledHeaderFile=".\Release/genmdesc.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib glib-2.0.lib"\r
+                               OutputFile=".\Release/genmdesc.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\VSDependancies\lib"\r
+                               ProgramDatabaseFile=".\Release/genmdesc.pdb"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Release/genmdesc.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+                       >\r
+                       <File\r
+                               RelativePath="mono\mini\genmdesc.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\helpers.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\monobitset.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\opcodes.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index 1527f25694561e5b394b5e6c7c8b764e66b9817a..a4bcb86cca13e7a8d38aa4bdebd171d3bce4d059 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * libgc.vcproj: Project file for libgc.
+
 2005-05-19  Zoltan Varga  <vargaz@freemail.hu>
 
        * configure.in: Handle i386-*-linux* as well. Fixes #74960.     
diff --git a/libgc/libgc.vcproj b/libgc/libgc.vcproj
new file mode 100644 (file)
index 0000000..3b612b2
--- /dev/null
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="libgc"\r
+       ProjectGUID="{EB56000B-C80B-4E8B-908D-D84D31B517D3}"\r
+       RootNamespace="libgc"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../VSDependancies/temp/libgc/Debug"\r
+                       IntermediateDirectory="../VSDependancies/temp/libgc/Debug"\r
+                       ConfigurationType="4"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories=".\include\"\r
+                               PreprocessorDefinitions="GC_THREADS;WIN32_THREADS;GC_WIN32_THREADS;GC_NOT_DLL;GC_GCJ_SUPPORT;WIN32;_DEBUG;_LIB;_WINDOWS;__WIN32__;__i386__;PLATFORM_WIN32;SILENT;ALL_INTERIOR_POINTERS;__STDC__"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4311;4312;4996;4005"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\libgc.lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="4"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_LIB"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\allchblk.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\alloc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\blacklst.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\dbg_mlc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\dyn_load.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\finalize.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\gcj_mlc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\headers.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mach_dep.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\malloc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mallocx.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mark.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mark_rts.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\misc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\new_hblk.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\obj_map.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\os_dep.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\ptr_chck.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\reclaim.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\stubborn.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\typd_mlc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\win32_threads.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\include\gc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\private\gc_hdrs.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\private\gc_locks.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\gc_mark.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\private\gc_pmark.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\private\gc_priv.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\private\gcconfig.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/libmono.vcproj b/libmono.vcproj
new file mode 100644 (file)
index 0000000..af44f18
--- /dev/null
@@ -0,0 +1,2200 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="libmono"\r
+       ProjectGUID="{CB0D9E92-293C-439C-9AC7-C5F59B6E0771}"\r
+       RootNamespace="libmono"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/D /NODEFAULTLIB:LIBCD&quot; &quot;"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\libgc\include,.\,.\VSDependancies\include\glib-2.0\glib,.\VSDependancies\include,.\mono\,.\mono\jit"\r
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MONO_EXPORTS;__WIN32__;HAVE_CONFIG_H;__i386__"\r
+                               StringPooling="true"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="true"\r
+                               UsePrecompiledHeader="0"\r
+                               PrecompiledHeaderFile=".\Release/libmono.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile=".\Release\libmono.lib"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\Release/libmono.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="./VSDependancies/temp/libmono/Debug"\r
+                       IntermediateDirectory="./VSDependancies/temp/libmono/Debug"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/D /NODEFAULTLIB:LIBCD&quot; &quot;"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="0"\r
+                               AdditionalIncludeDirectories=".\;.\mono\;.\libgc\include;.\VSDependancies\include\;&quot;.\VSDependancies\include\glib-2.0\glib&quot;"\r
+                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;__WIN32__;HAVE_CONFIG_H;__i386__;PLATFORM_WIN32;GC_NOT_DLL;GC_GCJ_SUPPORT;GC_WIN32_THREADS"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="0"\r
+                               PrecompiledHeaderFile=""\r
+                               AssemblerListingLocation=".\./VSDependancies/temp/libmono/"\r
+                               ObjectFile=".\./VSDependancies/temp/libmono/"\r
+                               ProgramDataBaseFileName=".\./VSDependancies/temp/libmono/vc80.pdb"\r
+                               BrowseInformation="1"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="true"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4996;4018;4244"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1033"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               AdditionalDependencies="libgc.lib"\r
+                               OutputFile=".\libmono.lib"\r
+                               AdditionalLibraryDirectories="C:\cygwin\home\poupou\svn\mono;C:\cygwin\home\poupou\svn\mono\VSDependancies\lib\"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               SuppressStartupBanner="true"\r
+                               OutputFile=".\./VSDependancies/temp/libmono___Win32_Debug/libmono.bsc"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\config.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\io-layer\io-layer.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="utils"\r
+                       >\r
+                       <File\r
+                               RelativePath="mono\utils\mono-codeman.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-codeman.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\utils\mono-compiler.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-digest.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-hash.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-hash.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-logger.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-logger.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-math.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-math.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-md5.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\utils\mono-poll.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\utils\mono-poll.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-sha1.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-uri.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\mono-uri.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\monobitset.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\monobitset.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\strenc.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\strenc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\strtod.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\utils\strtod.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="metadata"\r
+                       >\r
+                       <File\r
+                               RelativePath="mono\metadata\appdomain.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\appdomain.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\assembly.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\metadata\boehm-gc.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\char-conversions.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\cil-coff.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\class-internals.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\class.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\metadata\console-io.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\metadata\console-io.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\culture-info-tables.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\culture-info.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\debug-helpers.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\debug-mono-symfile.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\debug-mono-symfile.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\decimal.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\decimal.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\domain-internals.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\domain.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\environment.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\environment.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\exception.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\exception.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\file-io.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\file-io.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\filewatcher.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\filewatcher.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\gc-internal.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\gc.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\icall.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\image.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\loader.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\locales.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\locales.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\marshal.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\marshal.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mempool.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\metadata-internals.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\metadata.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\monitor.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\monitor.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-config.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-debug-debugger.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-debug-debugger.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-debug.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-debug.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\mono-endian.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\object-internals.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\object.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\opcodes.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\process.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\process.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\profiler-private.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\profiler.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\rand.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\rand.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\rawbuffer.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\reflection.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\metadata\security-manager.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\metadata\security-manager.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\security.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\security.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\socket-io.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\socket-io.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\string-icalls.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\string-icalls.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\sysmath.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\sysmath.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\tabledefs.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\threadpool.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\threadpool.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\threads-types.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\threads.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\unicode.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\unicode.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\metadata\verify.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="os"\r
+                       >\r
+                       <File\r
+                               RelativePath="mono\os\gc_wrapper.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\os\win32\util.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\os\util.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="mini"\r
+                       >\r
+                       <File\r
+                               RelativePath="mono\mini\abcremoval.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\abcremoval.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\aot.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\cfold.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\cpu-pentium.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\debug-mini.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\declsec.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\declsec.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\dominators.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\driver.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\exceptions-x86.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\graph.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\helpers.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\inssel.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\inssel.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\linear-scan.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\liveness.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini-arch.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini-exceptions.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini-ops.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini-x86.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini-x86.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\mini.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\regalloc.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\regalloc.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\ssa.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\ssapre-cee-ops.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\ssapre-mini-ops.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\ssapre.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\mono\mini\ssapre.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\trace.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\trace.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="mono\mini\tramp-x86.c"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               AdditionalIncludeDirectories=""\r
+                                               PreprocessorDefinitions=""\r
+                                               UsePrecompiledHeader="0"\r
+                                               BrowseInformation="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index 787c28dc511bad0f222d9907d2dc1a6dba5138c4..6b514b498cb06861a193b04867e8b56519f987b0 100644 (file)
@@ -43,12 +43,12 @@ namespace I18N.CJK
                
                // The one and only GB2312 conversion object in the system.
                private static Gb2312Convert convert;
-               
+               static readonly object lockobj = new object ();
                // Get the primary GB2312 conversion object.
                public static Gb2312Convert Convert
                {
                        get {
-                               lock (typeof (Gb2312Convert)) {
+                               lock (lockobj) {
                                        if (convert == null) {
                                                convert = new Gb2312Convert ();
                                        }
index 17191f8a15e8e58a0820c3bb00e3153873508f72..826ba536ef635b91ef33fccf189ef569a7149beb 100644 (file)
@@ -71,13 +71,13 @@ internal unsafe sealed class JISConvert
 
        // The one and only JIS conversion object in the system.
        private static JISConvert convert;
-
+       static readonly object lockobj = new object ();
        // Get the primary JIS conversion object.
        public static JISConvert Convert
                        {
                                get
                                {
-                                       lock(typeof(JISConvert))
+                                       lock(lockobj)
                                        {
                                                if(convert != null)
                                                {
index f1a11867d43d2b3544fa37c9a41a097f5e5a4dbd..50593c236a22729f92693541349cf9e17e95ed63 100644 (file)
@@ -47,6 +47,7 @@ public class Manager
        private Hashtable handlers;             // List of all handler classes.
        private Hashtable active;               // Currently active handlers.
        private Hashtable assemblies;   // Currently loaded region assemblies.
+       static readonly object lockobj = new object ();
 
        // Constructor.
        private Manager()
@@ -63,7 +64,7 @@ public class Manager
                        {
                                get
                                {
-                                       lock(typeof(Manager))
+                                       lock(lockobj)
                                        {
                                                if(manager == null)
                                                {
index 39f151146844209c78e0fc7535ef3dcd6d670cac..8a2d87e7914070c98ec8718b33f337f1e307158a 100755 (executable)
@@ -27,7 +27,8 @@ namespace IBM.Data.DB2
 \r
        internal sealed class DB2Environment : IDisposable\r
        {\r
-               private static DB2Environment environment;\r
+               volatile static DB2Environment environment;
+               static readonly object lockobj = new object ();\r
                internal Hashtable connectionPools;\r
                internal IntPtr penvHandle = IntPtr.Zero;\r
 \r
@@ -49,7 +50,7 @@ namespace IBM.Data.DB2
                        {\r
                                if(environment == null)\r
                                {\r
-                                       lock(typeof(DB2Environment))\r
+                                       lock(lockobj)\r
                                        {\r
                                                if(environment == null)\r
                                                {\r
index 6c9852d6ac98846578735c4169ce2fcde95d3e19..6c0f55125fc79b30db62bb07d7f8503c29219205 100644 (file)
@@ -1,3 +1,14 @@
+2005-05-24  Peter Bartok  <pbartok@novell.com>
+
+       * System.Windows.Forms.dll.sources: Added 
+         DataGridPreferredColumnWidthTypeConverter.cs
+       * SWF.csproj: Updated
+
+2005-05-24  Peter Bartok  <pbartok@novell.com>
+
+       * System.Windows.Forms.dll.sources: Added Help.cs
+       * SWF.csproj: Updated
+
 2005-05-18  Peter Bartok  <pbartok@novell.com>
 
        * System.Windows.Forms.dll.sources: Added Clipboard.cs
index 5684afe7ceff851f191ab83c6bd672d009d6b74f..b764d964b60b1bc207075c5909ece6a0390bf471 100644 (file)
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
+                <File
+                    RelPath = "System.Windows.Forms\DataGridPreferredColumnWidthTypeConverter.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
                 <File
                     RelPath = "System.Windows.Forms\DataGridTableStyle.cs"
                     SubType = "Code"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
+                <File
+                    RelPath = "System.Windows.Forms\Help.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
                 <File
                     RelPath = "System.Windows.Forms\HelpEventArgs.cs"
                     SubType = "Code"
index bf290687596b4248e7b8b9dd5df2a4577fb7d5c7..d809e0a114fd8a09ee9f70ac392041d20f707bf3 100644 (file)
@@ -86,6 +86,7 @@ System.Windows.Forms/DataGridCell.cs
 System.Windows.Forms/DataGridColumnStyle.cs
 System.Windows.Forms/DataGridLineStyle.cs
 System.Windows.Forms/DataGridParentRowsLabelStyle.cs
+System.Windows.Forms/DataGridPreferredColumnWidthTypeConverter.cs
 System.Windows.Forms/DataGridTableStyle.cs
 System.Windows.Forms/DataGridTextBox.cs
 System.Windows.Forms/DataGridTextBoxColumn.cs
@@ -131,6 +132,7 @@ System.Windows.Forms/GridItem.cs
 System.Windows.Forms/GridItemCollection.cs
 System.Windows.Forms/GridItemType.cs
 System.Windows.Forms/GroupBox.cs
+System.Windows.Forms/Help.cs
 System.Windows.Forms/HelpEventArgs.cs
 System.Windows.Forms/HelpEventHandler.cs
 System.Windows.Forms/HelpNavigator.cs
index 81bba213c1cfc71f27fb06108d5ef5a48f60a31d..a6422a71295a2c6e82c615d9da275f67da66bf74 100644 (file)
@@ -33,11 +33,10 @@ using System.IO;
 using System.Runtime.InteropServices;
 using System.Runtime.Serialization;
 
-
 namespace System.Windows.Forms {
        [MonoTODO("Possibly implement this for Win32; find a way for Linux and Mac")]
        [DefaultEvent("Enter")]
-       [Designer("System.Windows.Forms.Design.AxHostDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.AxHostDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DesignTimeVisible(false)]
        [ToolboxItem(false)]
        public abstract class AxHost : Control, ISupportInitialize, ICustomTypeDescriptor {
index b6888a43cb3774cb5c8e62b8ee53e7b1c3bea700..469745c94446c8358b6f0aa668522ebc6c97a912 100644 (file)
@@ -1,3 +1,58 @@
+2005-05-28  Jackson Harper  <jackson@ximian.com>
+
+       * Control.cs: Proper implementation of Product(Name/Version).
+
+2005-05-27  Jackson Harper  <jackson@ximian.com>
+
+       * DataObject.cs: Dont crash if no data is found.
+
+2005-05-26  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
+       * MdiClient.cs: Add missing Localizable attribute to BackgroundImage property 
+               as per status page, guessing it should be set to true
+
+2005-05-26  Jordi Mas i Hernandez <jordi@ximian.com>
+
+       * DataGridTextBoxColumn.cs: Draws text and basic text formatting
+       * DataGridTableStyle.cs: set proper formatting text, def header text
+       * ThemeWin32Classic.cs: new themable paramaters
+       * DataGridBoolColumn.cs: paint check box, get data, fixes
+       * DataGridDrawingLogic.cs: huge improvements in painting, fixes, new methods
+       * DataGrid.cs: fixes properties, implements vertical and horizontal scrolling
+       * DataGridColumnStyle.cs: fixes
+       * Theme.cs: new themable paramaters
+               
+2005-05-26  Peter Bartok  <pbartok@novell.com>
+
+       * ContainerControl.cs: Pass AdjustFormScrollbars() call on to base
+
+2005-05-24 Jonathan S. Chambers <jonathan.chambers@ansys.com>
+       * Control.cs: Fixed LowOrder and HighOrder to preserve sign.
+
+2005-05-24  Peter Bartok  <pbartok@novell.com>
+
+       * OpenFileDialog.cs, Form.cs, Menu.cs, GroupBox.cs, UserControl.cs,
+         Label.cs, DataGridTextBoxColumn.cs, PropertyGrid.cs, ErrorProvider.cs
+         Splitter.cs, Control.cs, FontDialog.cs, TabPage.cs, 
+         FolderBrowserDialog.cs, HelpProvider.cs, DataGridTableStyle.cs,
+         NotifyIcon.cs, FileDialog.cs, ListView.cs, SaveFileDialog.cs,
+         ToolBarButton.cs, ImageList.cs, DataGridBoolColumn.cs, Panel.cs,
+         DataGrid.cs, DataGridTextBox.cs, ListBox.cs, TrackBar.cs,
+         AxHost.cs, TabControl.cs, ScrollableControl.cs, ToolBar.cs,
+         DataGridColumnStyle.cs, PictureBox.cs, DateTimePicker.cs,
+         StatusBar.cs, MonthCalendar.cs, TreeView.cs: Added 
+         missing attributes, etc
+       * DataGridPreferredColumnWidthTypeConverter.cs: Added
+
+2005-05-24  Peter Bartok  <pbartok@novell.com>
+
+       * Help.cs: Added, implemented trivial functions, throws up MessageBox
+         when user tries to get help
+       * DataObject.cs, DataFormats.cs, LinkArea.cs, 
+         SelectionRangeConverter.cs, Clipboard.cs : Removed unused variables 
+         to suppress warnings
+       * XplatUIWin32.cs, XplatUIOSX.cs, XplatUIX11.cs: Removed unused code to 
+         avoid unreachable code warning
+
 2005-05-20  Peter Bartok  <pbartok@novell.com>
 
        * CursorConverter.cs (ConvertTo): Switched to use Cursor.GetObjectData
index 4859d133a30ff5ac9992cc0a5be333e34fc756ca..3b6fbf409b91a734daf768554aee80eaacc667fe 100644 (file)
@@ -60,7 +60,6 @@ namespace System.Windows.Forms {
                public static IDataObject GetDataObject() {
                        DataObject              clipboard;
                        IntPtr                  clipboard_handle;
-                       IntPtr                  retrieve_handle;
                        int[]                   native_formats;
                        DataFormats.Format      item_format;
                        object                  managed_clipboard_item;
index f64e266546e157ad4d8e9a998e23eaa6d92f2bd4..b371cf0bb77a653224a09f9b7fcd73a1dc53a80c 100644 (file)
@@ -40,7 +40,7 @@ namespace System.Windows.Forms
 
        [DefaultProperty("Items")]
        [DefaultEvent("SelectedIndexChanged")]
-       [Designer ("System.Windows.Forms.Design.ComboBoxDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.ComboBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class ComboBox : ListControl
        {
                private DrawMode draw_mode;
index c5d1eb5f03a57fc23054c44084b5a518e9aa4e98..55aacaa5dfd70e666ae1d5f7b176ae1293ebb6ac 100644 (file)
@@ -126,7 +126,7 @@ namespace System.Windows.Forms {
                #region Protected Instance Methods
                [EditorBrowsable (EditorBrowsableState.Advanced)]
                protected override void AdjustFormScrollbars(bool displayScrollbars) {
-                       // Internal MS
+                       base.AdjustFormScrollbars(displayScrollbars);
                }
 
                protected override void Dispose(bool disposing) {
index 09a0e302426fe3cff6cbc61811de20c42661d98e..6e68c262818f649eb48ba4a792215aa486ed227f 100644 (file)
@@ -47,7 +47,7 @@ using System.Threading;
 
 namespace System.Windows.Forms
 {
-       [Designer("System.Windows.Forms.Design.ControlDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.ControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DefaultProperty("Text")]
        [DefaultEvent("Click")]
        [DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design)]
@@ -747,11 +747,11 @@ namespace System.Windows.Forms
                }
 
                internal static int LowOrder (int param) {
-                       return (param & 0xffff);
+                       return ((int)(short)(param & 0xffff));
                }
 
                internal static int HighOrder (int param) {
-                       return (param >> 16);
+                       return ((int)(short)(param >> 16));
                }
 
                // This method exists so controls overriding OnPaintBackground can have default background painting done
@@ -1635,7 +1635,15 @@ namespace System.Windows.Forms
                [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public string ProductName {
                        get {
-                               return "Novell Mono MWF";
+                                Type t = typeof (AssemblyProductAttribute);
+                                Assembly assembly = GetType().Module.Assembly;
+                                object [] attrs = assembly.GetCustomAttributes (t, false);
+                                AssemblyProductAttribute a = null;
+                                // On MS we get a NullRefException if product attribute is not
+                                // set. 
+                               if (attrs != null && attrs.Length > 0)
+                                       a = (AssemblyProductAttribute) attrs [0];
+                               return a.Product;
                        }
                }
 
@@ -1644,7 +1652,12 @@ namespace System.Windows.Forms
                [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public string ProductVersion {
                        get {
-                               return "1.1.4322.573";
+                               Type t = typeof (AssemblyVersionAttribute);
+                               Assembly assembly = GetType().Module.Assembly;
+                               object [] attrs = assembly.GetCustomAttributes (t, false);
+                               if (attrs == null || attrs.Length < 1)
+                                       return "1.0.0.0";
+                               return ((AssemblyVersionAttribute)attrs [0]).Version;
                        }
                }
 
index 8255cdc4afda622d5fe0dfd92811f40b7797bc2a..54bc281027f1dccaa34fb0320652823b24216e36 100644 (file)
@@ -32,37 +32,30 @@ using System.Text;
 
 namespace System.Windows.Forms {
        public class DataFormats {
-               #region DataFormats.Format Subclass
                public class Format {
-                       #region Local Variables
+                       static readonly object lockobj = new object ();
+                       
                        private static Format   formats;
                        private string          name;
                        private int             id;
                        private Format          next;
-                       #endregion Local Variables
-
-                       #region Public Constructors
-                       public Format(string name, int ID) {
-                               Format  f;
 
+                       public Format (string name, int ID)
+                       {
                                this.name = name;
                                this.id = ID;
-
-                               lock (typeof(DataFormats.Format)) {
-                                       if (formats == null) {
+                               
+                               lock (lockobj) {
+                                       if (formats == null)
                                                formats = this;
-                                       } else {
-                                               // Insert into the list of known/defined formats
-                                               f = formats;
-
-                                               while (f.next != null) {
+                                       else {
+                                               Format f = formats;
+                                               while (f.next != null)
                                                        f = f.next;
-                                               }
                                                f.next = this;
                                        }
                                }
                        }
-                       #endregion      // Public Constructors
 
                        #region Public Instance Properties
                        public int Id {
@@ -137,17 +130,9 @@ namespace System.Windows.Forms {
                        #endregion      // Private Methods
 
                }
-               #endregion      // DataFormats.Format Subclass
-
-               #region Local Variables
-               private static bool     initialized = false;
-               #endregion      // Local Variables
-
-               #region Constructors
-               private DataFormats() {
-               }
-               #endregion      // Constructors
-
+               
+               private DataFormats () {}
+               
                #region Public Static Fields
                public static readonly string Bitmap                    = "Bitmap";
                public static readonly string CommaSeparatedValue       = "Csv";
@@ -172,62 +157,43 @@ namespace System.Windows.Forms {
                public static readonly string WaveAudio                 = "WaveAudio";
                #endregion      // Public Static Fields
 
-               #region Public Static Methods
-               public static Format GetFormat(int ID) {
-                       if (!initialized) {
-                               Initialize();
-                       }
-
-                       return Format.Find(ID);
+               public static Format GetFormat (int ID)
+               {
+                       return Format.Find (ID);
                }
 
-               public static Format GetFormat(string format) {
-                       Format  f;
-
-                       if (!initialized) {
-                               Initialize();
-                       }
-
-                       return Format.Add(format);
+               public static Format GetFormat (string format)
+               {
+                       return Format.Add (format);
                }
-               #endregion      // Public Static Methods
-
-               #region Private Methods
-               private static void Initialize() {
-                       lock (typeof(DataFormats.Format)) {
-                               if (!initialized) {
-                                       IntPtr  cliphandle;
-
-                                       cliphandle = XplatUI.ClipboardOpen();
-
-                                       new Format(Text, XplatUI.ClipboardGetID(cliphandle, Text));
-                                       new Format(Bitmap, XplatUI.ClipboardGetID(cliphandle, Bitmap));
-                                       new Format(MetafilePict, XplatUI.ClipboardGetID(cliphandle, MetafilePict));
-                                       new Format(SymbolicLink, XplatUI.ClipboardGetID(cliphandle, SymbolicLink));
-                                       new Format(Dif, XplatUI.ClipboardGetID(cliphandle, Dif)) ;
-                                       new Format(Tiff, XplatUI.ClipboardGetID(cliphandle, Tiff));
-                                       new Format(OemText, XplatUI.ClipboardGetID(cliphandle, OemText));
-                                       new Format(Dib, XplatUI.ClipboardGetID(cliphandle, Dib));
-                                       new Format(Palette, XplatUI.ClipboardGetID(cliphandle, Palette));
-                                       new Format(PenData, XplatUI.ClipboardGetID(cliphandle, PenData));
-                                       new Format(Riff, XplatUI.ClipboardGetID(cliphandle, Riff));
-                                       new Format(WaveAudio, XplatUI.ClipboardGetID(cliphandle, WaveAudio));
-                                       new Format(UnicodeText, XplatUI.ClipboardGetID(cliphandle, UnicodeText));
-                                       new Format(EnhancedMetafile, XplatUI.ClipboardGetID(cliphandle, EnhancedMetafile));
-                                       new Format(FileDrop, XplatUI.ClipboardGetID(cliphandle, FileDrop));
-                                       new Format(Locale, XplatUI.ClipboardGetID(cliphandle, Locale));
-                                       new Format(CommaSeparatedValue, XplatUI.ClipboardGetID(cliphandle, CommaSeparatedValue));
-                                       new Format(Html, XplatUI.ClipboardGetID(cliphandle, Html));
-                                       new Format(Rtf, XplatUI.ClipboardGetID(cliphandle, Rtf));
-                                       new Format(Serializable, XplatUI.ClipboardGetID(cliphandle, Serializable));
-                                       new Format(StringFormat, XplatUI.ClipboardGetID(cliphandle, StringFormat));
-
-                                       XplatUI.ClipboardClose(cliphandle);
-                                       
-                               }
-                               initialized = true;
-                       }
+               
+               static DataFormats ()
+               {
+                       IntPtr cliphandle = XplatUI.ClipboardOpen();
+
+                       new Format (Text, XplatUI.ClipboardGetID (cliphandle, Text));
+                       new Format (Bitmap, XplatUI.ClipboardGetID (cliphandle, Bitmap));
+                       new Format (MetafilePict, XplatUI.ClipboardGetID (cliphandle, MetafilePict));
+                       new Format (SymbolicLink, XplatUI.ClipboardGetID (cliphandle, SymbolicLink));
+                       new Format (Dif, XplatUI.ClipboardGetID (cliphandle, Dif)) ;
+                       new Format (Tiff, XplatUI.ClipboardGetID (cliphandle, Tiff));
+                       new Format (OemText, XplatUI.ClipboardGetID (cliphandle, OemText));
+                       new Format (Dib, XplatUI.ClipboardGetID (cliphandle, Dib));
+                       new Format (Palette, XplatUI.ClipboardGetID (cliphandle, Palette));
+                       new Format (PenData, XplatUI.ClipboardGetID (cliphandle, PenData));
+                       new Format (Riff, XplatUI.ClipboardGetID (cliphandle, Riff));
+                       new Format (WaveAudio, XplatUI.ClipboardGetID (cliphandle, WaveAudio));
+                       new Format (UnicodeText, XplatUI.ClipboardGetID (cliphandle, UnicodeText));
+                       new Format (EnhancedMetafile, XplatUI.ClipboardGetID (cliphandle, EnhancedMetafile));
+                       new Format (FileDrop, XplatUI.ClipboardGetID (cliphandle, FileDrop));
+                       new Format (Locale, XplatUI.ClipboardGetID (cliphandle, Locale));
+                       new Format (CommaSeparatedValue, XplatUI.ClipboardGetID (cliphandle, CommaSeparatedValue));
+                       new Format (Html, XplatUI.ClipboardGetID (cliphandle, Html));
+                       new Format (Rtf, XplatUI.ClipboardGetID (cliphandle, Rtf));
+                       new Format (Serializable, XplatUI.ClipboardGetID (cliphandle, Serializable));
+                       new Format (StringFormat, XplatUI.ClipboardGetID (cliphandle, StringFormat));
+
+                       XplatUI.ClipboardClose (cliphandle);
                }
-               #endregion      // Private Methods
        }
 }
index 087a24490c5a270c108ac35efbcc43c443bcc698..3b39553879ce5a1d9241e8c7b6b9c2302dec0e5e 100644 (file)
@@ -35,7 +35,10 @@ using System.Collections;
 
 namespace System.Windows.Forms
 {
-       public class DataGrid : Control
+       [DefaultEvent("Navigate")]
+       [DefaultProperty("DataSource")]
+       [Designer("System.Windows.Forms.Design.DataGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+       public class DataGrid : Control, ISupportInitialize, IDataGridEditingService
        {
                [Flags]
                [Serializable]
@@ -124,7 +127,7 @@ namespace System.Windows.Forms
                private bool allow_sorting;
                private Color alternating_backcolor;
                private Color background_color;
-               private BorderStyle border_style;
+               internal BorderStyle border_style;
                private Color caption_backcolor;
                private Font caption_font;
                private Color caption_forecolor;
@@ -154,6 +157,7 @@ namespace System.Windows.Forms
                private int rowheaders_width;
                internal int visiblecolumn_count;
                internal int visiblerow_count;
+               internal int first_visiblecolumn;
                private int currentrow_index;
                private GridTableStylesCollection styles_collection;
                private DataGridParentRowsLabelStyle parentrowslabel_style;
@@ -166,6 +170,7 @@ namespace System.Windows.Forms
                internal VScrollBar vert_scrollbar;
                private DataGridDrawing grid_drawing;
                internal int first_visiblerow;
+               internal int horz_pixeloffset;
                #endregion // Local Variables
 
                #region Public Constructors
@@ -204,10 +209,12 @@ namespace System.Windows.Forms
                        selection_forecolor = def_selection_forecolor;
                        rowheaders_width = 35;
                        visiblecolumn_count = 0;
-                       visiblerow_count = 0;
+                       visiblerow_count = 0;                   
                        current_cell = new DataGridCell ();
                        currentrow_index = -1;
                        first_visiblerow = 0;
+                       first_visiblecolumn = 0;
+                       horz_pixeloffset = 0;
                        forecolor = SystemColors.WindowText;
                        parentrowslabel_style = DataGridParentRowsLabelStyle.Both;
                        backcolor = SystemColors.Window;
@@ -219,6 +226,7 @@ namespace System.Windows.Forms
                        CurrentTableStyle = default_style;
 
                        horiz_scrollbar = new HScrollBar ();
+                       horiz_scrollbar.Scroll += new ScrollEventHandler  (OnHorizontalScrollEvent);                    
                        vert_scrollbar = new VScrollBar ();
                        vert_scrollbar.ValueChanged += new EventHandler (OnVerticalScrollEvent);
                        grid_drawing = new DataGridDrawing (this);
@@ -231,6 +239,7 @@ namespace System.Windows.Forms
 
                #region Public Instance Properties
 
+               [DefaultValue(true)]
                public bool AllowNavigation {
                        get {
                                return allow_navigation;
@@ -244,6 +253,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool AllowSorting {
                        get {
                                return allow_sorting;
@@ -294,6 +304,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public Image BackgroundImage {
                        get {
                                return base.BackgroundImage;
@@ -304,6 +316,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DispId(-504)]
+               [DefaultValue(BorderStyle.Fixed3D)]
                public BorderStyle BorderStyle {
                        get {
                                return border_style;
@@ -312,6 +326,7 @@ namespace System.Windows.Forms
                        set {
                                 if (border_style != value) {
                                        border_style = value;
+                                       grid_drawing.CalcGridAreas ();
                                        OnBorderStyleChanged (EventArgs.Empty);
                                        Refresh ();
                                }
@@ -331,6 +346,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Localizable(true)]
+               [AmbientValue(null)]
                public Font CaptionFont {
                        get {
                                if (caption_font == null) {
@@ -341,10 +358,13 @@ namespace System.Windows.Forms
                        }
 
                        set {
-                               if (caption_font!= null && !caption_font.Equals (value)) {
-                                       caption_font = value;
-                                       grid_drawing.InvalidateCaption ();
+                               if (caption_font != null && caption_font.Equals (value)) {
+                                       return;
                                }
+                               
+                               caption_font = value;
+                               grid_drawing.CalcGridAreas ();
+                               Refresh ();                             
                        }
                }
 
@@ -361,6 +381,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Localizable(true)]
+               [DefaultValue("")]
                public string CaptionText {
                        get {
                                return caption_text;
@@ -374,6 +396,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool CaptionVisible {
                        get {
                                return caption_visible;
@@ -389,6 +412,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool ColumnHeadersVisible {
                        get {
                                return columnheaders_visible;
@@ -403,6 +427,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public DataGridCell CurrentCell {
                        get {
                                return current_cell;
@@ -416,6 +442,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public int CurrentRowIndex {
                        get {
                                return currentrow_index;
@@ -429,6 +457,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override Cursor Cursor {
                        get {
                                return base.Cursor;
@@ -438,6 +468,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(null)]
+               [Editor ("System.Windows.Forms.Design.DataMemberListEditor, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
                public string DataMember {
                        get { return datamember; }
                        set {
@@ -448,6 +480,9 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(null)]
+               [RefreshProperties(RefreshProperties.Repaint)]
+               [TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
                public object DataSource {
                        get {
                                return datasource;
@@ -467,12 +502,14 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
                public int FirstVisibleColumn {
                        get {
                                return firstvisible_column;
                        }
                }
 
+               [DefaultValue(false)]
                public bool FlatMode {
                        get {
                                return flatmode;
@@ -507,6 +544,10 @@ namespace System.Windows.Forms
                        }
 
                        set {
+                               if (value == Color.Empty) {
+                                       throw new ArgumentNullException ("Color.Empty value is invalid.");
+                               }
+                               
                                if (gridline_color != value) {
                                        gridline_color = value;
                                        Refresh ();
@@ -514,6 +555,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(DataGridLineStyle.Solid)]
                public DataGridLineStyle GridLineStyle {
                        get {
                                return gridline_style;
@@ -533,6 +575,10 @@ namespace System.Windows.Forms
                        }
 
                        set {
+                               if (value == Color.Empty) {
+                                       throw new ArgumentNullException ("Color.Empty value is invalid.");
+                               }
+                               
                                if (header_backcolor != value) {
                                        header_backcolor = value;
                                        Refresh ();
@@ -605,6 +651,8 @@ namespace System.Windows.Forms
                }
 
                [ComVisible(false)]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public Color LinkHoverColor {
                        get {
                                return link_hovercolor;
@@ -618,6 +666,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Advanced)]
                protected internal CurrencyManager ListManager {
                        get {
                                if (BindingContext == null || DataSource  == null) {
@@ -662,6 +712,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(DataGridParentRowsLabelStyle.Both)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public DataGridParentRowsLabelStyle ParentRowsLabelStyle {
                        get {
                                return parentrowslabel_style;
@@ -679,6 +731,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool ParentRowsVisible {
                        get {
                                return parentrows_visible;
@@ -695,6 +748,8 @@ namespace System.Windows.Forms
                }
 
                // Settting this property seems to have no effect.
+               [DefaultValue(75)]
+               [TypeConverter(typeof(DataGridPreferredColumnWidthTypeConverter))]
                public int PreferredColumnWidth {
                        get {
                                return preferredcolumn_width;
@@ -726,6 +781,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(false)]
                public bool ReadOnly {
                        get {
                                return _readonly;
@@ -740,6 +796,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool RowHeadersVisible {
                        get {
                                return rowheaders_visible;
@@ -754,6 +811,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(35)]
                public int RowHeaderWidth {
                        get {
                                return rowheaders_width;
@@ -803,10 +861,16 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Localizable(true)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
                public GridTableStylesCollection TableStyles {
                        get { return styles_collection; }
                }
 
+               [Bindable(false)]
+               [Browsable(false)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override string Text {
                        get {
                                return base.Text;
@@ -816,20 +880,23 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Advanced)]
                protected ScrollBar VertScrollBar {
                        get {
                                return vert_scrollbar;
                        }
                }
 
+               [Browsable(false)]
                public int VisibleColumnCount {
                        get {
                                return visiblecolumn_count;
                        }
-
                }
 
                // Calculated at DataGridDrawing.CalcRowsHeaders
+               [Browsable(false)]
                public int VisibleRowCount {
                        get {
                                return visiblerow_count;
@@ -847,7 +914,7 @@ namespace System.Windows.Forms
                                current_style = value;
                        }
                }
-               
+                               
                internal int FirstVisibleRow {
                        get { return first_visiblerow; }
                        set { first_visiblerow = value;}
@@ -1148,10 +1215,10 @@ namespace System.Windows.Forms
                                Navigate (this, e);
                        }
                }
-
+               
                protected override void OnPaint (PaintEventArgs pe)
-               {                                               
-                       grid_drawing.OnPaint (pe);
+               {                       
+                       grid_drawing.OnPaint (pe);                      
                }
 
                protected override void OnPaintBackground (PaintEventArgs ebe)
@@ -1424,6 +1491,58 @@ namespace System.Windows.Forms
                        current_style.CreateColumnsForTable ();
                        grid_drawing.CalcGridAreas ();
                }
+               
+               private void OnHorizontalScrollEvent (object sender, ScrollEventArgs e)
+               {
+                       if (horiz_scrollbar.Value == horz_pixeloffset ||
+                               e.Type == ScrollEventType.EndScroll) {
+                               return;
+                       }
+                       
+                       Rectangle invalidate = new Rectangle ();
+                       Rectangle invalidate_column = new Rectangle ();
+                       
+                       if (horiz_scrollbar.Value > horz_pixeloffset) { // ScrollRight
+                               int pixels = horiz_scrollbar.Value - horz_pixeloffset;
+                               
+                               // Columns header
+                               invalidate_column.X = grid_drawing.ColumnsHeadersArea.X + grid_drawing.ColumnsHeadersArea.Width - pixels;
+                               invalidate_column.Y = grid_drawing.ColumnsHeadersArea.Y;
+                               invalidate_column.Width = pixels;
+                               invalidate_column.Height = grid_drawing.ColumnsHeadersArea.Height;
+                               XplatUI.ScrollWindow (Handle, grid_drawing.ColumnsHeadersArea, -pixels, 0, false);
+                               
+                               // Cells                                                                                                
+                               invalidate.X = grid_drawing.CellsArea.X + grid_drawing.CellsArea.Width - pixels;
+                               invalidate.Y = grid_drawing.CellsArea.Y;
+                               invalidate.Width = pixels;
+                               invalidate.Height = grid_drawing.CellsArea.Height;
+                               XplatUI.ScrollWindow (Handle, grid_drawing.CellsArea, -pixels, 0, false);                               
+                               
+                       } else {                                
+                               int pixels = horz_pixeloffset - horiz_scrollbar.Value;
+                               
+                               // Columns header
+                               invalidate_column.X = grid_drawing.ColumnsHeadersArea.X;
+                               invalidate_column.Y = grid_drawing.ColumnsHeadersArea.Y;
+                               invalidate_column.Width = pixels;
+                               invalidate_column.Height = grid_drawing.ColumnsHeadersArea.Height;
+                               XplatUI.ScrollWindow (Handle, grid_drawing.ColumnsHeadersArea, pixels, 0, false);
+                               
+                               // Cells                                
+                               invalidate.X =  grid_drawing.CellsArea.X;
+                               invalidate.Y =  grid_drawing.CellsArea.Y;
+                               invalidate.Width = pixels;
+                               invalidate.Height = grid_drawing.CellsArea.Height;
+                               XplatUI.ScrollWindow (Handle, grid_drawing.CellsArea, pixels, 0, false);                                
+                       }
+                       
+                       horz_pixeloffset = horiz_scrollbar.Value;
+                       grid_drawing.UpdateVisibleColumn ();
+                       Invalidate (invalidate_column);
+                       Invalidate (invalidate);
+                       
+               }
 
                private void OnTableStylesCollectionChanged (object sender, CollectionChangeEventArgs e)
                {
@@ -1457,30 +1576,35 @@ namespace System.Windows.Forms
                                return;
                        }
                        
+                       Rectangle invalidate = new Rectangle ();
+                       
                        if (vert_scrollbar.Value > first_visiblerow ) { // Scrolldown 
                                int scrolled_rows = vert_scrollbar.Value - first_visiblerow;
-                               int pixels = scrolled_rows * RowHeight;
-                               Rectangle invalidate = new Rectangle ();
+                               int pixels = scrolled_rows * RowHeight;         
                                
                                invalidate.X =  grid_drawing.CellsArea.X;
                                invalidate.Y =  grid_drawing.CellsArea.Y + grid_drawing.CellsArea.Height - pixels;
                                invalidate.Width = grid_drawing.CellsArea.Width;
                                invalidate.Height = pixels;                             
 
-                               first_visiblerow =  vert_scrollbar.Value; 
-                               grid_drawing.UpdateVisibleRowCount ();
+                               XplatUI.ScrollWindow (Handle, grid_drawing.CellsArea, 0, -pixels, false);                               
                                
-                               XplatUI.ScrollWindow (Handle, grid_drawing.CellsArea, 0, - pixels, false);
-                               Invalidate (invalidate);                                
+                       } else { // ScrollUp
+                               int scrolled_rows = first_visiblerow - vert_scrollbar.Value;
+                               int pixels = scrolled_rows * RowHeight;                         
                                
-                               //
-                       } else { // Scrollup
+                               invalidate.X =  grid_drawing.CellsArea.X;
+                               invalidate.Y =  grid_drawing.CellsArea.Y;
+                               invalidate.Width = grid_drawing.CellsArea.Width;
+                               invalidate.Height = pixels;                             
                                
+                               XplatUI.ScrollWindow (Handle, grid_drawing.CellsArea, 0, pixels, false);                                                                
                        }
                        
-                       
-                       
-                       //Refresh ();
+                       first_visiblerow =  vert_scrollbar.Value; 
+                       grid_drawing.UpdateVisibleRowCount ();
+                       Invalidate (invalidate);
+                       Invalidate (grid_drawing.RowsHeadersArea);
                }
                
                #endregion Private Instance Methods
@@ -1490,11 +1614,19 @@ namespace System.Windows.Forms
                public event EventHandler AllowNavigationChanged;
                public event EventHandler BackButtonClick;
                public event EventHandler BackgroundColorChanged;
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public new event EventHandler BackgroundImageChanged;
+
                public event EventHandler BorderStyleChanged;
                public event EventHandler CaptionVisibleChanged;
                public event EventHandler CurrentCellChanged;
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public new event EventHandler CursorChanged;
+
                public event EventHandler DataSourceChanged;
                public event EventHandler FlatModeChanged;
                public event NavigateEventHandler Navigate;
@@ -1504,6 +1636,9 @@ namespace System.Windows.Forms
                protected event EventHandler RowHeaderClick;
                public event EventHandler Scroll;
                public event EventHandler ShowParentDetailsButtonClick;
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public new event EventHandler TextChanged;
                #endregion      // Events
        }
index 6d1df4aafd979bea6e31b914be3c39b8bc20ee7d..8418d94d4e399e4f488840d64e946c92d311455e 100644 (file)
@@ -69,6 +69,7 @@ namespace System.Windows.Forms
                #endregion
 
                #region Public Instance Properties
+               [DefaultValue(true)]
                public bool AllowNull {
                        get {
                                return allownull;
@@ -84,6 +85,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [TypeConverter(typeof(System.ComponentModel.StringConverter))]
                public object FalseValue {
                        get {
                                return falsevalue;
@@ -99,6 +101,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [TypeConverter(typeof(System.ComponentModel.StringConverter))]
                public object NullValue {
                        get {
                                return nullvalue;
@@ -110,6 +113,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [TypeConverter(typeof(System.ComponentModel.StringConverter))]
                public object TrueValue {
                        get {
                                return truevalue;
@@ -156,47 +160,58 @@ namespace System.Windows.Forms
                {
 
                }
-
-               [MonoTODO]
+               
                protected internal override object GetColumnValueAtRow (CurrencyManager lm, int row)
                {
-                       throw new NotImplementedException ();
+                       object obj = base.GetColumnValueAtRow (lm, row);
+                       
+                       if (obj.Equals (truevalue)) {
+                               return true;
+                       }
+                       else {
+                               return false;
+                       }
                }
-
-               [MonoTODO]
+               
                protected internal override int GetMinimumHeight ()
                {
-                       throw new NotImplementedException ();
+                       return ThemeEngine.Current.DataGridMinimumColumnCheckBoxHeight;
                }
-
-               [MonoTODO]
+               
                protected internal override int GetPreferredHeight (Graphics g, object value)
                {
-                       throw new NotImplementedException ();
+                       return ThemeEngine.Current.DataGridMinimumColumnCheckBoxHeight;
                }
 
-               [MonoTODO]
                protected internal override Size GetPreferredSize (Graphics g, object value)
                {
-                       throw new NotImplementedException ();
+                       return new Size (ThemeEngine.Current.DataGridMinimumColumnCheckBoxWidth, ThemeEngine.Current.DataGridMinimumColumnCheckBoxHeight);
                }
-
-               [MonoTODO]
+               
                protected internal override void Paint (Graphics g, Rectangle bounds, CurrencyManager source, int rowNum)
                {
-
+                       Paint (g, bounds, source, rowNum, false);
                }
-
-               [MonoTODO]
-               protected internal override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum,   bool alignToRight)
+               
+               protected internal override void Paint (Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, bool alignToRight)
                {
-
+                       Paint (g, bounds, source, rowNum, ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.BackColor), 
+                               ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.ForeColor), alignToRight);
                }
-
-               [MonoTODO]
-               protected internal override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
-               {
-
+               
+               protected internal override void Paint (Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
+               {
+                       Size chkbox_size = GetPreferredSize (g, null);
+                       Rectangle rect = new Rectangle ();
+                       chkbox_size.Width -= 2;
+                       chkbox_size.Height -= 2;                        
+                       rect.X = bounds.X + ((bounds.Width - chkbox_size.Width) / 2);
+                       rect.Y = bounds.Y + ((bounds.Height - chkbox_size.Height) / 2);
+                       rect.Width = chkbox_size.Width;
+                       rect.Height = chkbox_size.Height;
+                       
+                       bool value = (bool) GetColumnValueAtRow (source, rowNum);
+                       ThemeEngine.Current.CPDrawCheckBox (g, rect, value == true ? ButtonState.Checked : ButtonState.Normal);
                }
 
                [MonoTODO]
index a6b1a1fc9d6381031cf3e1aa18d144d96431da98..52ce5df55416a23a43b3df1b124d2bb175498536 100644 (file)
 
 // NOT COMPLETE
 
-using System.ComponentModel;
 using System.Drawing;
+using System.ComponentModel;
 using System.Runtime.InteropServices;
 using System.Diagnostics;
 
 namespace System.Windows.Forms
 {
+       [DesignTimeVisible(false)]
+       [DefaultProperty("Header")]
+       [ToolboxItem(false)]
        public abstract class DataGridColumnStyle : Component, IDataGridColumnStyleEditingNotificationService
        {
                [ComVisible(true)]
@@ -115,8 +118,9 @@ namespace System.Windows.Forms
                private PropertyDescriptor property_descriptor;
                private bool read_only;
                private int width;
-               protected DataGrid grid;
+               internal protected DataGrid grid;
                private DataGridColumnHeaderAccessibleObject accesible_object;
+               private StringFormat string_format_hdr;
                #endregion      // Local Variables
 
                #region Constructors
@@ -144,11 +148,16 @@ namespace System.Windows.Forms
                        width = -1;
                        grid = null;
                        alignment = HorizontalAlignment.Left;
+                       string_format_hdr = new StringFormat ();
+                       string_format_hdr.FormatFlags |= StringFormatFlags.NoWrap;
+                       string_format_hdr.LineAlignment  = StringAlignment.Center;
                }
 
                #endregion
 
                #region Public Instance Properties
+               [Localizable(true)]
+               [DefaultValue(HorizontalAlignment.Left)]
                public virtual HorizontalAlignment Alignment {
                        get {
                                return alignment;
@@ -164,6 +173,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
                public virtual DataGridTableStyle DataGridTableStyle {
                        get {
                                return table_style;
@@ -186,12 +196,14 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
                public AccessibleObject HeaderAccessibleObject {
                        get {
                                return accesible_object;
                        }
                }
 
+               [Localizable(true)]
                public virtual string HeaderText {
                        get {
                                return header_text;
@@ -208,6 +220,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Editor("System.Windows.Forms.Design.DataGridColumnStyleMappingNameEditor, " + Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
+               [Localizable(true)]
                public string MappingName {
                        get {
                                return mapping_name;
@@ -223,6 +237,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Localizable(true)]
                public virtual string NullText {
                        get {
                                return null_text;
@@ -238,6 +253,9 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
+               [DefaultValue(null)]
+               [EditorBrowsable(EditorBrowsableState.Advanced)]
                public virtual PropertyDescriptor PropertyDescriptor {
                        get {
                                return property_descriptor;
@@ -253,6 +271,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(false)]
                public virtual bool ReadOnly  {
                        get {
                                return read_only;
@@ -269,6 +288,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(100)]
+               [Localizable(true)]
                public virtual int Width {
                        get {
                                return width;
@@ -310,7 +331,7 @@ namespace System.Windows.Forms
                        }
                        
                        if (property_descriptor == null) {
-                               throw new ApplicationException ("       The PropertyDescriptor for this column is a null reference");
+                               throw new ApplicationException ("The PropertyDescriptor for this column is a null reference");
                        }
                }
 
@@ -361,7 +382,7 @@ namespace System.Windows.Forms
                }
                
                protected internal virtual object GetColumnValueAtRow (CurrencyManager source, int rowNum)
-               {
+               {                       
                        CheckValidDataSource (source);
                        return property_descriptor.GetValue (source.GetItem (rowNum));
                }
@@ -421,8 +442,37 @@ namespace System.Windows.Forms
                {
 
                }
-
                #endregion      // Public Instance Methods
+               
+               #region Private Instance Methods                
+               protected internal void PaintHeader (Graphics g, Rectangle bounds, int colNum)
+               {       
+                       // Background
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.DataGrid.ParentRowsBackColor), 
+                               bounds);
+                       
+                       // Paint Borders                        
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonHilight),                        
+                               bounds.X, bounds.Y, bounds.X + bounds.Width, bounds.Y);
+                       
+                       if (colNum == 0) {      
+                               g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonHilight),
+                                       bounds.X, bounds.Y, bounds.X, bounds.Y + bounds.Height);
+                       } else {
+                               g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonHilight),
+                                       bounds.X, bounds.Y + 2, bounds.X, bounds.Y + bounds.Height - 2);
+                       }
+                       
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonShadow),
+                               bounds.X + bounds.Width - 1, bounds.Y + 2 , bounds.X + bounds.Width - 1, bounds.Y + bounds.Height - 2);
+                       
+                       bounds.X += 3;
+                       bounds.Width -= 3;
+                       g.DrawString (HeaderText, DataGridTableStyle.DataGrid.Font, ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.ForeColor), 
+                               bounds, string_format_hdr);
+               }
+               
+               #endregion Private Instance Methods
 
 
                #region Events
@@ -431,6 +481,9 @@ namespace System.Windows.Forms
                public event EventHandler HeaderTextChanged;
                public event EventHandler MappingNameChanged;
                public event EventHandler NullTextChanged;
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Advanced)]
                public event EventHandler PropertyDescriptorChanged;
                public event EventHandler ReadOnlyChanged;
                public event EventHandler WidthChanged;
index 69453a432ff7c5a1a940322eb7c9909ef2fb97e1..4b2850350a0bd062342cb340698986956db1d607 100644 (file)
@@ -38,11 +38,15 @@ namespace System.Windows.Forms
                private DataGrid grid;
 
                // Areas
+               private Rectangle client_area;          // ClientRectangle - BorderStyle decorations, effetive client area
                private Rectangle caption_area;
                private Rectangle parent_rows;
-               private Rectangle columnshdrs_area;
-               private Rectangle rowshdrs_area;
+               private Rectangle columnshdrs_area;     // Used columns header area
+               private int columnshdrs_maxwidth;       // Total width (max width) for columns headrs
+               private Rectangle rowshdrs_area;        // Used Headers rows area
+               private int rowshdrs_maxheight;         // Total height for rows (max height)
                private Rectangle cells_area;
+
                #endregion // Local Variables
 
 
@@ -59,19 +63,68 @@ namespace System.Windows.Forms
                        int width = 0;
                        int cnt = grid.CurrentTableStyle.GridColumnStyles.Count;
 
-                       for (int i = 0; i < cnt; i++) {
-                               width += grid.CurrentTableStyle.GridColumnStyles[i].Width;
+                       for (int col = 0; col < cnt; col++) {
+                               width += grid.CurrentTableStyle.GridColumnStyles[col].Width;
                        }
 
                        return width;
                }
 
+               // Gets a column from a pixel
+               public int FromPixelToColumn (int pixel)
+               {
+                       int width = 0;
+                       int cnt = grid.CurrentTableStyle.GridColumnStyles.Count;
+
+                       if (cnt == 0)
+                               return 0;
+
+                       for (int col = 0; col < cnt; col++) {
+                               width += grid.CurrentTableStyle.GridColumnStyles[col].Width;
+
+                               if (pixel < width)
+                                       return col;
+                       }
+
+                       return cnt - 1;
+               }
+
+               //
+               public int GetColumnStartingPixel (int my_col)
+               {
+                       int width = 0;
+                       int cnt = grid.CurrentTableStyle.GridColumnStyles.Count;
+
+                       for (int col = 0; col < cnt; col++) {
+
+                               if (my_col == col)
+                                       return width;
+
+                               width += grid.CurrentTableStyle.GridColumnStyles[col].Width;
+                       }
+
+                       return 0;
+               }
+
+               public void CalcClientArea ()
+               {
+                       client_area = grid.ClientRectangle;
+                       client_area.X += BorderStyleSize;
+                       client_area.Y += BorderStyleSize;
+                       client_area.Width -= BorderStyleSize * 2;
+                       client_area.Height -= BorderStyleSize * 2;
+
+                       //Console.WriteLine ("CalcClientArea ClientRectangle {0}, ClientArea {1}, BorderStyleSize {2}",
+                       //       grid.ClientRectangle, client_area, BorderStyleSize);
+               }
+
                public void CalcGridAreas ()
                {
                        if (grid.IsHandleCreated == false) // Delay calculations until the handle is created
                                return;
 
                        /* Order is important. E.g. row headers max. height depends on caption */
+                       CalcClientArea ();
                        CalcCaption ();
                        CalcParentRows ();
                        CalcRowsHeaders ();
@@ -79,32 +132,43 @@ namespace System.Windows.Forms
                        CalcCellsArea ();
 
                        if (SetUpVerticalScrollBar ()) { // We need a Vertical ScrollBar
-                               if (grid.caption_visible == true) {
+                               if (grid.caption_visible) {
                                        caption_area.Width -= grid.vert_scrollbar.Width;
                                }
 
-                               if (grid.parentrows_visible == true) {
+                               if (grid.parentrows_visible) {
                                        parent_rows.Width -= grid.vert_scrollbar.Width;
                                }
-                               
-                               cells_area.Width -= grid.vert_scrollbar.Width;                          
+
+                               if (grid.columnheaders_visible) {
+                                       if (columnshdrs_area.X + columnshdrs_area.Width > grid.vert_scrollbar.Location.X) {
+                                               columnshdrs_area.Width -= grid.vert_scrollbar.Width;
+                                       }
+                               }
+
+                               if (cells_area.X + cells_area.Width > grid.vert_scrollbar.Location.X) {
+                                       cells_area.Width -= grid.vert_scrollbar.Width;
+                               }
                        }
 
-                       if (SetUpHorizontalScrollBar ()) { // We need a Horzintal ScrollBar
+                       if (SetUpHorizontalScrollBar ()) { // We need a Horizontal ScrollBar
                                cells_area.Height -= grid.horiz_scrollbar.Height;
 
-                               if (rowshdrs_area.X + rowshdrs_area.Height > grid.ClientRectangle.Height) {
+                               if (rowshdrs_area.Y + rowshdrs_area.Height > client_area.Y + client_area.Height) {
                                        rowshdrs_area.Height -= grid.horiz_scrollbar.Width;
+                                       rowshdrs_maxheight -= grid.horiz_scrollbar.Width;
                                }
                        }
 
-                       // Reajust scrollbars to avoid overlapping
+                       // Reajust scrollbars to avoid overlapping at the corners
                        if (grid.vert_scrollbar.Visible && grid.horiz_scrollbar.Visible) {
                                grid.horiz_scrollbar.Width -= grid.vert_scrollbar.Width;
                                grid.vert_scrollbar.Height -= grid.horiz_scrollbar.Height;
                        }
-                       
-                       Console.WriteLine ("DataGridDrawing.CalcGridAreas cells:{0}", cells_area);
+
+                       UpdateVisibleColumn ();
+
+                       //Console.WriteLine ("DataGridDrawing.CalcGridAreas cells:{0}", cells_area);
                }
 
                public void CalcCaption ()
@@ -114,62 +178,79 @@ namespace System.Windows.Forms
                                return;
                        }
 
-                       caption_area.X = BorderStyleSize;
-                       caption_area.Y = BorderStyleSize;
-                       caption_area.Width = grid.ClientRectangle.Width - BorderStyleSize - BorderStyleSize;
+                       caption_area.X = client_area.X;
+                       caption_area.Y = client_area.Y;
+                       caption_area.Width = client_area.Width;
                        caption_area.Height = grid.CaptionFont.Height + 6;
 
-                       Console.WriteLine ("DataGridDrawing.CalcCaption {0}", caption_area);
+                       //Console.WriteLine ("DataGridDrawing.CalcCaption {0}", caption_area);
                }
 
                public void CalcCellsArea ()
                {
-                       cells_area.X = BorderStyleSize + rowshdrs_area.Width;
-                       cells_area.Y = BorderStyleSize + caption_area.Height + parent_rows.Height + columnshdrs_area.Height;
-                       cells_area.Width = grid.ClientRectangle.Width - cells_area.X - BorderStyleSize;
-                       cells_area.Height = grid.ClientRectangle.Height - cells_area.Y - BorderStyleSize;
-                       
-                       Console.WriteLine ("DataGridDrawing.CalcCellsArea {0}", cells_area);
+                       if (grid.caption_visible) {
+                               cells_area.Y = caption_area.Y + caption_area.Height;
+                       } else {
+                               cells_area.Y = client_area.Y;
+                       }
+
+                       if (grid.parentrows_visible) {
+                               cells_area.Y += parent_rows.Height;
+                       }
+
+                       if (grid.columnheaders_visible) {
+                               cells_area.Y += columnshdrs_area.Height;
+                       }
+
+                       cells_area.X = client_area.X + rowshdrs_area.Width;
+                       cells_area.Width = client_area.X + client_area.Width - cells_area.X;
+                       cells_area.Height = client_area.Y + client_area.Height - cells_area.Y;
+
+                       //Console.WriteLine ("DataGridDrawing.CalcCellsArea {0}", cells_area);
                }
 
                public void CalcColumnsHeader ()
                {
-                       int width_all, max_width;
+                       int width_all_cols, max_width_cols;
 
                        if (grid.columnheaders_visible == false) {
                                columnshdrs_area = Rectangle.Empty;
                                return;
                        }
 
-                       columnshdrs_area.Y = caption_area.Y + caption_area.Height + parent_rows.Height;
-                       columnshdrs_area.X = BorderStyleSize;
+                       if (grid.caption_visible) {
+                               columnshdrs_area.Y = caption_area.Y + caption_area.Height;
+                       } else {
+                               columnshdrs_area.Y = client_area.Y;
+                       }
 
+                       if (grid.parentrows_visible) {
+                               columnshdrs_area.Y += parent_rows.Height;
+                       }
+
+                       columnshdrs_area.X = client_area.X;
                        columnshdrs_area.Height = ColumnsHeaderHeight;
-                       width_all = CalcAllColumnsWidth ();
+                       width_all_cols = CalcAllColumnsWidth ();
 
                        // TODO: take into account Scrollbars
-                       max_width = grid.ClientRectangle.Width - columnshdrs_area.X - BorderStyleSize;
+                       columnshdrs_maxwidth = client_area.X + client_area.Width - columnshdrs_area.X;
+                       max_width_cols = columnshdrs_maxwidth;
+
+                       if (grid.rowheaders_visible) {
+                               max_width_cols -= grid.RowHeaderWidth;
+                       }
 
-                       if (width_all > max_width) {
-                               columnshdrs_area.Width = max_width;
+                       if (width_all_cols > max_width_cols) {
+                               columnshdrs_area.Width = columnshdrs_maxwidth;
                        } else {
-                               columnshdrs_area.Width = width_all;
+                               columnshdrs_area.Width = width_all_cols;
 
                                if (grid.rowheaders_visible) {
-                                       if (columnshdrs_area.Width + grid.RowHeaderWidth <= max_width) {
-                                               columnshdrs_area.Width += grid.RowHeaderWidth;
-                                       }
+                                       columnshdrs_area.Width += grid.RowHeaderWidth;
                                }
-
                        }
 
-                       columnshdrs_area.Width = (max_width > width_all ) ? width_all : max_width;
-
-                        {
-                               columnshdrs_area.Width += ColumnsHeaderHeight;
-                       }
-
-                       Console.WriteLine ("DataGridDrawing.CalcColumnsHeader {0}", columnshdrs_area);
+                       //Console.WriteLine ("DataGridDrawing.CalcColumnsHeader {0}", columnshdrs_area);
                }
 
                public void CalcParentRows ()
@@ -183,14 +264,14 @@ namespace System.Windows.Forms
                                parent_rows.Y = caption_area.Y + caption_area.Height;
 
                        } else {
-                               parent_rows.Y = BorderStyleSize;
+                               parent_rows.Y = client_area.Y;
                        }
 
-                       parent_rows.X = BorderStyleSize;
-                       parent_rows.Width = grid.ClientRectangle.Width - BorderStyleSize - BorderStyleSize;
+                       parent_rows.X = client_area.X;
+                       parent_rows.Width = client_area.Width;
                        parent_rows.Height = grid.CaptionFont.Height + 3;
 
-                       Console.WriteLine ("DataGridDrawing.CalcParentRows {0}", parent_rows);
+                       //Console.WriteLine ("DataGridDrawing.CalcParentRows {0}", parent_rows);
                }
 
                public void CalcRowsHeaders ()
@@ -202,22 +283,49 @@ namespace System.Windows.Forms
 
                        UpdateVisibleRowCount ();
 
-                       rowshdrs_area.X = BorderStyleSize;
-                       rowshdrs_area.Y = BorderStyleSize + caption_area.Height + parent_rows.Height;
-                       rowshdrs_area.Width = grid.RowHeaderWidth;
-                       rowshdrs_area.Height = 1 + grid.visiblerow_count * grid.RowHeight;
+                       if (grid.caption_visible) {
+                               rowshdrs_area.Y = caption_area.Y + caption_area.Height;
+                       } else {
+                               rowshdrs_area.Y = client_area.Y;
+                       }
 
-                       if (grid.columnheaders_visible) {
+                       if (grid.parentrows_visible) {
+                               rowshdrs_area.Y += parent_rows.Height;
+                       }
+
+                       if (grid.columnheaders_visible) { // first block is painted by ColumnHeader
                                rowshdrs_area.Y += ColumnsHeaderHeight;
                        }
 
-                       Console.WriteLine ("DataGridDrawing.CalcRowsHeaders {0}", rowshdrs_area);
+                       rowshdrs_area.X = client_area.X;
+                       rowshdrs_area.Width = grid.RowHeaderWidth;
+                       rowshdrs_area.Height = grid.visiblerow_count * grid.RowHeight;
+                       rowshdrs_maxheight = client_area.Height + client_area.Y - rowshdrs_area.Y;
+
+                       //Console.WriteLine ("DataGridDrawing.CalcRowsHeaders {0} {1}", rowshdrs_area,
+                       //      rowshdrs_maxheight);
+               }
+
+               public void UpdateVisibleColumn ()
+               {
+                       int col;
+                       int max_pixel = grid.horz_pixeloffset + cells_area.Width;
+                       grid.first_visiblecolumn = FromPixelToColumn (grid.horz_pixeloffset);
+
+                       col = FromPixelToColumn (max_pixel);\r
+                       grid.visiblecolumn_count = (col - grid.first_visiblecolumn);
+
+                       if (grid.visiblecolumn_count > 0)
+                               grid.visiblecolumn_count++;
+
+                       //Console.WriteLine ("UpdateVisibleColumn col: {0}, cnt {1}",
+                       //      grid.first_visiblecolumn, grid.visiblecolumn_count);
                }
 
                public void UpdateVisibleRowCount ()
                {
-                       int max_height = grid.ClientRectangle.Height - caption_area.Height -
-                               parent_rows.Height - columnshdrs_area.Height - BorderStyleSize;
+                       int max_height = client_area.Height - caption_area.Height -
+                               parent_rows.Height - columnshdrs_area.Height;
 
                        int rows_height = (grid.RowsCount - grid.first_visiblerow) * grid.RowHeight;
 
@@ -226,6 +334,9 @@ namespace System.Windows.Forms
                        } else {
                                grid.visiblerow_count = grid.RowsCount;
                        }
+
+                       if (grid.visiblerow_count + grid.first_visiblerow > grid.RowsCount)
+                               grid.visiblerow_count = grid.RowsCount - grid.first_visiblerow;
                }
 
                public void InvalidateCaption ()
@@ -238,63 +349,230 @@ namespace System.Windows.Forms
 
                public void OnPaint (PaintEventArgs pe)
                {
-                       //pe.Graphics.Clear (grid.BackgroundColor);
+                       ThemeEngine.Current.CPDrawBorderStyle (pe.Graphics, grid.ClientRectangle, grid.border_style);
+
                        if (pe.ClipRectangle.IntersectsWith (caption_area)) {
-                               pe.Graphics.FillRectangle (new SolidBrush (grid.CaptionBackColor), caption_area);
+                               
                        }
 
                        if (pe.ClipRectangle.IntersectsWith (parent_rows)) {
-                               pe.Graphics.FillRectangle (new SolidBrush (grid.ParentRowsBackColor), parent_rows);
+                               pe.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.ParentRowsBackColor), parent_rows);
+                       }
+
+                       PaintCaption (pe.Graphics, pe.ClipRectangle);
+                       PaintColumnsHdrs (pe.Graphics, pe.ClipRectangle);
+                       PaintRowsHeaders (pe.Graphics, pe.ClipRectangle);
+                       PaintRows (pe.Graphics, cells_area, pe.ClipRectangle);
+
+                       // Paint scrollBar corner
+                       if (grid.vert_scrollbar.Visible && grid.horiz_scrollbar.Visible) {
+
+                               Rectangle corner = new Rectangle (client_area.X + client_area.Width - grid.horiz_scrollbar.Height,
+                                        client_area.Y + client_area.Height - grid.horiz_scrollbar.Height,
+                                        grid.horiz_scrollbar.Height, grid.horiz_scrollbar.Height);
+
+                               if (pe.ClipRectangle.IntersectsWith (corner)) {
+                                       pe.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.ParentRowsBackColor),
+                                               corner);
+                               }
+                       }
+               }
+               
+               public void PaintCaption (Graphics g, Rectangle clip)
+               {
+                       Region modified_area =  new Region (clip);
+                       modified_area.Intersect (caption_area);
+                       
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.CaptionBackColor), 
+                               Rectangle.Ceiling (modified_area.GetBounds (g)));
+                               
+                       g.DrawString (grid.CaptionText, grid.CaptionFont, 
+                               ThemeEngine.Current.ResPool.GetSolidBrush (grid.CaptionForeColor),
+                               caption_area);  
+                               
+                       modified_area.Dispose ();
+               }
+
+               public void PaintColumnsHdrs (Graphics g, Rectangle clip)
+               {
+                       Rectangle columns_area = columnshdrs_area;
+
+                       if (grid.rowheaders_visible) { // Paint corner shared between row and column header
+                               Rectangle rect_bloc = columnshdrs_area;
+                               rect_bloc.Width = grid.RowHeaderWidth;
+                               rect_bloc.Height = columnshdrs_area.Height;
+                               if (clip.IntersectsWith (rect_bloc)) {
+                                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.ParentRowsBackColor), rect_bloc);
+                               }
+
+                               columns_area.X += grid.RowHeaderWidth;
+                               columns_area.Width -= grid.RowHeaderWidth;
                        }
 
-                       if (pe.ClipRectangle.IntersectsWith (columnshdrs_area)) {
-                               pe.Graphics.DrawRectangle (new Pen (Color.Green), columnshdrs_area);
+                       // Set unused area
+                       Rectangle columnshdrs_area_complete = columns_area;
+                       columnshdrs_area_complete.Width = columnshdrs_maxwidth;
+                       Region not_usedarea = new Region (clip);
+
+                       if (grid.rowheaders_visible) {
+                               columnshdrs_area_complete.Width -= grid.RowHeaderWidth;
                        }
 
-                       pe.Graphics.DrawRectangle (new Pen (Color.Yellow), rowshdrs_area);
-                       pe.Graphics.DrawRectangle (new Pen (Color.Pink), cells_area);
+                       not_usedarea.Intersect (columnshdrs_area_complete);
 
-                       PaintRows (pe.Graphics, cells_area, pe.ClipRectangle);
+                       // Set column painting
+                       Rectangle rect_columnhdr = new Rectangle ();
+                       int cnt = grid.CurrentTableStyle.GridColumnStyles.Count, col_pixel;
+                       Region prev_clip = g.Clip, current_clip;
+                       rect_columnhdr.Y = columns_area.Y;
+                       rect_columnhdr.Height = columns_area.Height;
+
+                       int column_cnt = grid.first_visiblecolumn + grid.visiblecolumn_count;
+                       for (int column = grid.first_visiblecolumn; column < column_cnt; column++) {
+
+                               col_pixel = GetColumnStartingPixel (column);
+                               rect_columnhdr.X = columns_area.X + col_pixel - grid.horz_pixeloffset;
+                               rect_columnhdr.Width = grid.CurrentTableStyle.GridColumnStyles[column].Width;
+
+                               if (clip.IntersectsWith (rect_columnhdr) == false)
+                                       continue;
+
+                               not_usedarea.Exclude (rect_columnhdr);
+                               current_clip = new Region (columns_area);
+                               g.Clip = current_clip;
+
+                               grid.CurrentTableStyle.GridColumnStyles[column].PaintHeader (g, rect_columnhdr, column);
+
+                               g.Clip = prev_clip;
+                               current_clip.Dispose ();
+                       }
+
+                       // This fills with background colourt the unused part in the row headers
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor),
+                               Rectangle.Ceiling (not_usedarea.GetBounds (g)));
+
+                       //Console.WriteLine ("PaintColumnsHdrs Clean {0}", Rectangle.Ceiling (not_usedarea.GetBounds (g)));
+
+                       not_usedarea.Dispose ();
+               }
+
+               public void PaintRowsHeaders (Graphics g, Rectangle clip)
+               {
+                       Rectangle rowshdrs_area_complete = rowshdrs_area;
+                       rowshdrs_area_complete.Height = rowshdrs_maxheight;
+                       Rectangle rect_row = new Rectangle ();
+                       rect_row.X = rowshdrs_area.X;
+                       Region not_usedarea = new Region (clip);
+                       not_usedarea.Intersect (rowshdrs_area_complete);
+
+                       int rowcnt = grid.FirstVisibleRow + grid.VisibleRowCount;
+                       for (int row = grid.FirstVisibleRow; row < rowcnt; row++) {
+
+                               rect_row.Width = rowshdrs_area.Width;
+                               rect_row.Height = grid.RowHeight;
+                               rect_row.Y = rowshdrs_area.Y + ((row - grid.FirstVisibleRow) * grid.RowHeight);
+
+                               if (clip.IntersectsWith (rect_row)) {
+                                       PaintRowHeader (g, rect_row);
+                                       //g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (Color.Yellow), rect_row);
+                                       not_usedarea.Exclude (rect_row);
+                               }
+                       }
+
+                       // This fills with background colourt the unused part in the row headers
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor),
+                               Rectangle.Ceiling (not_usedarea.GetBounds (g)));
+
+                       not_usedarea.Dispose ();
+               }
+
+               public void PaintRowHeader (Graphics g, Rectangle bounds)
+               {
+                       // Background
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.ParentRowsBackColor),
+                               bounds);
+
+                       // Paint Borders
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonHilight),
+                               bounds.X, bounds.Y, bounds.X + bounds.Width, bounds.Y);
+
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonHilight),
+                               bounds.X, bounds.Y + 2, bounds.X, bounds.Y + bounds.Height - 2);
+
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonShadow),
+                               bounds.X + bounds.Width - 1, bounds.Y + 2 , bounds.X + bounds.Width - 1, bounds.Y + bounds.Height - 2);
+
+                       g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonShadow),
+                               bounds.X, bounds.Y + bounds.Height -1, bounds.X + bounds.Width, bounds.Y  + bounds.Height -1);
                }
 
                public void PaintRows (Graphics g, Rectangle cells, Rectangle clip)
                {
                        Rectangle rect_row = new Rectangle ();
                        rect_row.X = cells.X;
+                       Region not_usedarea = new Region (clip);
+                       not_usedarea.Intersect (cells_area);
 
-                       for (int row = 0; row < grid.VisibleRowCount; row++) {
+                       int rowcnt = grid.FirstVisibleRow + grid.VisibleRowCount;
+                       for (int row = grid.FirstVisibleRow; row < rowcnt; row++) {
                                // Get cell's width for column style
                                rect_row.Width = cells.Width;
                                rect_row.Height = grid.RowHeight;
-                               rect_row.Y = cells.Y + ((row + grid.first_visiblerow) * grid.RowHeight);
+                               rect_row.Y = cells.Y + ((row - grid.FirstVisibleRow) * grid.RowHeight);
 
                                if (clip.IntersectsWith (rect_row)) {
-                                       PaintRow (g, row + grid.first_visiblerow, rect_row);
+                                       PaintRow (g, row, rect_row);
+                                       not_usedarea.Exclude (rect_row);
                                }
                        }
+
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor),
+                               Rectangle.Ceiling (not_usedarea.GetBounds (g)));
+
+                       not_usedarea.Dispose ();
                }
 
                public void PaintRow (Graphics g, int row, Rectangle row_rect)
                {
-                       Console.WriteLine ("PaintRow row: {0}, rect {1}", row, row_rect);
-                       //g.DrawString ("prova", new Font ("Arial", 12), new SolidBrush (Color.Black), row_rect);
+                       //Console.WriteLine ("PaintRow row: {0}, rect {1}", row, row_rect);
 
                        Rectangle rect_cell = new Rectangle ();
                        int cnt = grid.CurrentTableStyle.GridColumnStyles.Count;
-                       int width = 0;
+                       int col_pixel;
+                       Region prev_clip = g.Clip;
+                       Region current_clip;
+                       Region not_usedarea = new Region (row_rect);
+
                        rect_cell.Y = row_rect.Y;
                        rect_cell.Height = row_rect.Height;
 
                        // PaintCells at row, column
-                       for (int column = 0; column < cnt; column++) {
-                               rect_cell.X = row_rect.X + width;
-                               width += grid.CurrentTableStyle.GridColumnStyles[column].Width;
+                       int column_cnt = grid.first_visiblecolumn + grid.visiblecolumn_count;
+                       for (int column = grid.first_visiblecolumn; column < column_cnt; column++) {
+
+                               col_pixel = GetColumnStartingPixel (column);
+
+                               rect_cell.X = row_rect.X + col_pixel - grid.horz_pixeloffset;
                                rect_cell.Width = grid.CurrentTableStyle.GridColumnStyles[column].Width;
-                               g.FillRectangle (new SolidBrush (grid.BackgroundColor), rect_cell);
-                               g.DrawRectangle (new Pen (Color.Black), rect_cell);
-                               // Ask DataGridColumnStyle class to paint this specific cell
+
+                               current_clip = new Region (row_rect);
+                               g.Clip = current_clip;
+
+                               g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor), rect_cell);
+                               g.DrawRectangle (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorButtonShadow), rect_cell);
+
+                               not_usedarea.Exclude (rect_cell);
                                grid.CurrentTableStyle.GridColumnStyles[column].Paint (g, rect_cell, grid.ListManager, row);
+
+                               g.Clip = prev_clip;
+                               current_clip.Dispose ();
                        }
+
+                       g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor),
+                               Rectangle.Ceiling (not_usedarea.GetBounds (g)));
+
+                       not_usedarea.Dispose ();
+
                }
 
                // Return true if the scrollbar is needed
@@ -308,12 +586,14 @@ namespace System.Windows.Forms
                                return false;
                        }
 
-                       grid.horiz_scrollbar.Location = new Point (grid.ClientRectangle.X, grid.ClientRectangle.Y +
-                               grid.ClientRectangle.Height - grid.horiz_scrollbar.Height);
+                       grid.horiz_scrollbar.Location = new Point (client_area.X, client_area.Y +
+                               client_area.Height - grid.horiz_scrollbar.Height);
 
-                       grid.horiz_scrollbar.Size = new Size (grid.ClientRectangle.Width,
+                       grid.horiz_scrollbar.Size = new Size (client_area.Width,
                                grid.horiz_scrollbar.Height);
 
+                       //grid.horiz_scrollbar.Maximum = width_all - cells_area.Width;
+                       //grid.horiz_scrollbar.LargeChange = cells_area.Width;
                        grid.Controls.Add (grid.horiz_scrollbar);
                        grid.horiz_scrollbar.Visible = true;
                        return true;
@@ -328,13 +608,14 @@ namespace System.Windows.Forms
                                return false;
                        }
 
-                       grid.vert_scrollbar.Location = new Point (grid.ClientRectangle.X +
-                               grid.ClientRectangle.Width - grid.vert_scrollbar.Width, grid.ClientRectangle.Y);
+                       grid.vert_scrollbar.Location = new Point (client_area.X +
+                               client_area.Width - grid.vert_scrollbar.Width, client_area.Y);
 
                        grid.vert_scrollbar.Size = new Size (grid.vert_scrollbar.Width,
-                               grid.ClientRectangle.Height);
+                               client_area.Height);
 
                        grid.vert_scrollbar.Maximum = grid.RowsCount;
+                       grid.vert_scrollbar.LargeChange = cells_area.Height / grid.RowHeight;
 
                        grid.Controls.Add (grid.vert_scrollbar);
                        grid.vert_scrollbar.Visible = true;
@@ -344,10 +625,8 @@ namespace System.Windows.Forms
                #endregion // Public Instance Methods
 
                #region Instance Properties
-               // Temp
                internal int BorderStyleSize {
                        get {
-
                                switch (grid.border_style) {
                                        case BorderStyle.Fixed3D:
                                                return 2;
@@ -367,13 +646,32 @@ namespace System.Windows.Forms
                                return cells_area;
                        }
                }
-               
+
+               // Returns the ColumnsHeader area excluding the rectangle shared with RowsHeader
+               public Rectangle ColumnsHeadersArea {
+                       get {
+                               Rectangle columns_area = columnshdrs_area;
+
+                               if (grid.rowheaders_visible) {
+                                       columns_area.X += grid.RowHeaderWidth;
+                                       columns_area.Width -= grid.RowHeaderWidth;
+                               }
+                               return columns_area;
+                       }
+               }
+
                public int ColumnsHeaderHeight {
                        get {
                                return grid.Font.Height + 6;
                        }
                }
 
+               public Rectangle RowsHeadersArea {
+                       get {
+                               return rowshdrs_area;
+                       }
+               }
+
                #endregion Instance Properties
        }
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridPreferredColumnWidthTypeConverter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridPreferredColumnWidthTypeConverter.cs
new file mode 100644 (file)
index 0000000..3aa6603
--- /dev/null
@@ -0,0 +1,69 @@
+// 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.
+//
+// Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
+//
+// Authors:
+//     Peter Bartok    (pbartok@novell.com)
+//
+//
+
+// COMPLETE
+
+using System;
+using System.ComponentModel;
+
+namespace System.Windows.Forms {
+       public class DataGridPreferredColumnWidthTypeConverter : TypeConverter {
+               #region Public Constructors
+               public DataGridPreferredColumnWidthTypeConverter() {
+               }
+               #endregion      // Public Constructors
+
+               #region Public Instance Methods
+               public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {\r
+                       if ((sourceType == typeof(string)) || (sourceType == typeof(int))) {\r
+                               return true;\r
+                       }\r
+                       return base.CanConvertFrom (context, sourceType);\r
+               }\r
+
+               public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {\r
+                       if (value is string) {\r
+                               if (((string)value).Equals("AutoColumnResize (-1)")) {\r
+                                       return -1;\r
+                               }\r
+\r
+                               return Int32.Parse((string)value);\r
+                       }\r
+                       return base.ConvertFrom (context, culture, value);\r
+               }\r
+
+               public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {\r
+                       if (destinationType == typeof(String)) {\r
+                               if ((int)value == -1) {\r
+                                       return "AutoColumnResize (-1)";\r
+                               }\r
+\r
+                       }\r
+                       return base.ConvertTo (context, culture, value, destinationType);\r
+               }\r
+               #endregion      // Public Instance Methods
+       }
+}
index e6088015916f1c1219ac80218005f1e90fc069d9..e6fece740752aa72d7967e2a508f0bb79c6c45b0 100644 (file)
@@ -33,10 +33,13 @@ using System.Drawing;
 using System.Runtime.InteropServices;
 using System.Data;
 using System.Xml;
+using System.Runtime.Serialization;
 
 namespace System.Windows.Forms
 {
-       public class DataGridTableStyle : Component
+       [DesignTimeVisible(false)]
+       [ToolboxItem(false)]
+       public class DataGridTableStyle : Component, IDataGridEditingService
        {
                public static DataGridTableStyle DefaultTableStyle = new DataGridTableStyle (true);
                
@@ -129,6 +132,7 @@ namespace System.Windows.Forms
                #endregion
 
                #region Public Instance Properties
+               [DefaultValue(true)]
                public bool AllowSorting {
                        get {
                                return allow_sorting;
@@ -168,6 +172,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool ColumnHeadersVisible {
                        get {
                                return columnheaders_visible;
@@ -181,6 +186,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Browsable(false)]
                public virtual DataGrid DataGrid {
                        get {
                                return datagrid;
@@ -206,6 +212,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
+               [Localizable(true)]
                public virtual GridColumnStylesCollection GridColumnStyles {
                        get { return column_styles; }
                }
@@ -223,6 +231,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(DataGridLineStyle.Solid)]
                public DataGridLineStyle GridLineStyle {
                        get {
                                return gridline_style;
@@ -249,6 +258,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [AmbientValue(null)]
+               [Localizable(true)]
                public Font HeaderFont {
                        get {
                                if (header_font != null)
@@ -296,6 +307,8 @@ namespace System.Windows.Forms
                }
 
                [ComVisible(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               [Browsable(false)]
                public Color LinkHoverColor {
                        get {
                                return link_hovercolor;
@@ -309,6 +322,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Editor("System.Windows.Forms.Design.DataGridTableStyleMappingNameEditor, " + Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
                public string MappingName {
                        get {
                                return mapping_name;
@@ -322,6 +336,9 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(75)]
+               [TypeConverter(typeof(DataGridPreferredColumnWidthTypeConverter))]
+               [Localizable(true)]
                public int PreferredColumnWidth {
                        get {
                                return preferredcolumn_width;
@@ -339,6 +356,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Localizable(true)]
                public int PreferredRowHeight {
                        get {
                                return preferredrow_height;
@@ -352,6 +370,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(false)]
                public bool ReadOnly {
                        get {
                                return _readonly;
@@ -365,6 +384,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(true)]
                public bool RowHeadersVisible {
                        get {
                                return rowheaders_visible;
@@ -378,6 +398,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [DefaultValue(35)]
+               [Localizable(true)]
                public int RowHeaderWidth {
                        get {
                                return rowheaders_width;
@@ -404,6 +426,7 @@ namespace System.Windows.Forms
                        }
                }
 
+               [Description("The foreground color for the current data grid row")]
                public Color SelectionForeColor  {
                        get {
                                return selection_forecolor;
@@ -439,7 +462,18 @@ namespace System.Windows.Forms
                        }
                        
                        if (DataGridTextBoxColumn.CanRenderType (prop.PropertyType)) {
-                               return new DataGridTextBoxColumn (prop, isDefault);
+                               
+                               // At least to special cases with formats
+                               if (prop.PropertyType.Equals (typeof (DateTime))) {
+                                       return new DataGridTextBoxColumn (prop, "d", isDefault);                                        
+                               }
+                               
+                               if (prop.PropertyType.Equals (typeof (Int32)) ||
+                                       prop.PropertyType.Equals (typeof (Int16))) {
+                                       return new DataGridTextBoxColumn (prop, "G", isDefault);                                        
+                               }
+                               
+                               return new DataGridTextBoxColumn (prop, isDefault);                             
                        }
                        
                        throw new NotImplementedException ();
@@ -740,6 +774,7 @@ namespace System.Windows.Forms
                                        DataGridColumnStyle st = CreateGridColumn (propcol[i],  true);
                                        st.TableStyle = this;
                                        st.MappingName = propcol[i].Name;
+                                       st.HeaderText = propcol[i].Name;
                                        st.Width = PreferredColumnWidth;                                        
                                        column_styles.Add (st);                                 
                                }                               
index 9d633b8c51182508b5c7ffec3ff7aebde9441857..6ead9d1d6f05a4a005dcf669fc8d93067dd6fd45 100644 (file)
@@ -33,6 +33,9 @@ using System.Diagnostics;
 
 namespace System.Windows.Forms
 {
+       [DefaultProperty("GridEditName")]
+       [DesignTimeVisible(false)]
+       [ToolboxItem(false)]
        public class DataGridTextBox : TextBox
        {
 
index 8f1dc16024edc9e6e8483ae38c1a402050755b91..ea8978f421201dbc2b3e08de4d220ee6a067e984 100644 (file)
@@ -73,6 +73,7 @@ namespace System.Windows.Forms
                #endregion
 
                #region Public Instance Properties
+               [Editor("System.Windows.Forms.Design.DataGridColumnStyleFormatEditor, " + Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
                public string Format {
                        get {
                                return format;
@@ -83,7 +84,9 @@ namespace System.Windows.Forms
                                }
                        }
                }
-               
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Advanced)]
                public IFormatProvider FormatInfo {
                        get {
                                return format_provider;
@@ -94,7 +97,8 @@ namespace System.Windows.Forms
                                }
                        }
                }
-               
+
+               [DefaultValue(null)]
                public PropertyDescriptor PropertyDescriptor {
                        set { 
                                base.PropertyDescriptor = value;
@@ -111,6 +115,7 @@ namespace System.Windows.Forms
                }
                
                [MonoTODO]
+               [Browsable(false)]
                public virtual TextBox TextBox {
                        get {
                                return null;
@@ -195,12 +200,13 @@ namespace System.Windows.Forms
                        object obj;
                        obj = GetColumnValueAtRow (source, rowNum);
                        
-                       PaintText (g, bounds, obj.ToString (),  backBrush, foreBrush, alignToRight);
+                       PaintText (g, bounds, GetFormattedString (obj),  backBrush, foreBrush, alignToRight);
                }
                                
-               protected void PaintText (Graphics g, Rectangle bounds, string text,  bool alignToRight)
+               protected void PaintText (Graphics g, Rectangle bounds, string text, bool alignToRight)
                {
-                       
+                       PaintText (g, bounds, text,  ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.BackColor), 
+                               ThemeEngine.Current.ResPool.GetSolidBrush (DataGridTableStyle.ForeColor), alignToRight);
                }               
                
                protected void PaintText (Graphics g, Rectangle textBounds, string text, Brush backBrush, Brush foreBrush, bool alignToRight)
@@ -209,10 +215,9 @@ namespace System.Windows.Forms
                                string_format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
                        } else {
                                string_format.FormatFlags &= ~StringFormatFlags.DirectionRightToLeft;
-                       }
+                       }                       
                        
                        string_format.FormatFlags |= StringFormatFlags.NoWrap;
-                       
                        g.DrawString (text, DataGridTableStyle.DataGrid.Font, foreBrush, textBounds, string_format);    
                }
                
@@ -243,6 +248,16 @@ namespace System.Windows.Forms
                {                       
                        return (type != typeof (Boolean));
                }
+               
+               private string GetFormattedString (object obj)
+               {                                                                               
+                       if (format != null && obj as IFormattable != null) {
+                               return ((IFormattable)obj).ToString (format, format_provider);
+                       }       
+                                               
+                       return obj.ToString ();
+                       
+               }
                #endregion Private Instance Methods     
 
 
index bb7b0c462ce4bca2f70d21acc1e05fc4eab6bdd9..37910be9eef9fba26257dc02067fcde402d55bc0 100644 (file)
@@ -44,8 +44,6 @@ namespace System.Windows.Forms {
 
                        #region Constructors
                        internal Entry(string type, object data, bool autoconvert) {
-                               Entry   e;
-
                                this.type = type;
                                this.data = data;
                                this.autoconvert = autoconvert;
@@ -181,11 +179,15 @@ namespace System.Windows.Forms {
                }
 
                public virtual object GetData(string format, bool autoConvert) {
+                       Entry e;
                        if (autoConvert) {
-                               return Entry.FindConvertible(entries, format).Data;
+                               e = Entry.FindConvertible(entries, format);
                        } else {
-                               return Entry.Find(entries, format).Data;
+                               e = Entry.Find(entries, format);
                        }
+                       if (e == null)
+                               return null;
+                       return e.Data;
                }
 
                public virtual object GetData(Type format) {
index b15885e30966e6550e501fa5e49da47314da0949..40b13622ceea068356b0cb0d0b2d22355e9969b8 100755 (executable)
@@ -39,7 +39,7 @@ using System.Windows.Forms;
 namespace System.Windows.Forms {
        [DefaultEvent("ValueChanged")]
        [DefaultProperty("Value")]
-       [Designer("System.Windows.Forms.Design.DateTimePickerDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.DateTimePickerDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class DateTimePicker : Control {
 
                #region Public variables
index da4b83371158a5ca66c0e5ee2aaf23648ee4e599..da242f3fe31ac060d9ad9f8e20d569f91c8e9ffd 100644 (file)
@@ -33,9 +33,9 @@ using System.Drawing;
 
 namespace System.Windows.Forms {
        [ToolboxItemFilter("System.Windows.Forms")]
-       [ProvideProperty("Error", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
-       [ProvideProperty("IconPadding", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        [ProvideProperty("IconAlignment", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+       [ProvideProperty("IconPadding", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+       [ProvideProperty("Error", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        public class ErrorProvider : Component, IExtenderProvider {
                #region Private Classes
                private class ErrorProperty {
index b2e802cbed86387c4c626e4e7c61aa519a837917..ddbdf12c6624cbf61b5407b89eb32ed938fc399f 100644 (file)
@@ -39,6 +39,8 @@ using System.Collections.Specialized;
 
 namespace System.Windows.Forms
 {
+       [DefaultProperty("FileName")]
+       [DefaultEvent("FileOk")]
        public abstract class FileDialog : CommonDialog
        {
                internal enum FileDialogType
@@ -77,7 +79,11 @@ namespace System.Windows.Forms
                private bool showHiddenFiles = false;
                
                internal FileDialogType fileDialogType;
-               
+
+               internal FileDialog() : base() {
+               }
+
+               [DefaultValue(true)]
                public bool AddExtension
                {
                        get
@@ -90,7 +96,8 @@ namespace System.Windows.Forms
                                addExtension = value;
                        }
                }
-               
+
+               [DefaultValue(false)]
                public virtual bool CheckFileExists
                {
                        get
@@ -104,6 +111,7 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue(true)]
                public bool CheckPathExists
                {
                        get
@@ -117,6 +125,7 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue("")]
                public string DefaultExt
                {
                        get
@@ -141,6 +150,7 @@ namespace System.Windows.Forms
                // DerefenceLinks is true or false
                // if the selected file is a link FileDialog
                // always returns the link
+               [DefaultValue(true)]
                public bool DereferenceLinks
                {
                        get
@@ -154,6 +164,7 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue("")]
                public string FileName
                {
                        get
@@ -166,7 +177,9 @@ namespace System.Windows.Forms
                                fileName = value;
                        }
                }
-               
+
+               [Browsable(false)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public string[] FileNames
                {
                        get
@@ -177,7 +190,9 @@ namespace System.Windows.Forms
                                return null;
                        }
                }
-               
+
+               [DefaultValue("")]
+               [Localizable(true)]             
                public string Filter
                {
                        get
@@ -197,7 +212,8 @@ namespace System.Windows.Forms
                                fileDialogPanel.UpdateFilters( );
                        }
                }
-               
+
+               [DefaultValue(1)]
                public int FilterIndex
                {
                        get
@@ -210,7 +226,8 @@ namespace System.Windows.Forms
                                filterIndex = value;
                        }
                }
-               
+
+               [DefaultValue("")]
                public string InitialDirectory
                {
                        get
@@ -224,6 +241,7 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue(false)]
                public bool RestoreDirectory
                {
                        get
@@ -237,6 +255,7 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue(false)]
                public bool ShowHelp
                {
                        get
@@ -251,6 +270,8 @@ namespace System.Windows.Forms
                        }
                }
                
+               [DefaultValue("")]
+               [Localizable(true)]
                public string Title
                {
                        get
@@ -277,6 +298,7 @@ namespace System.Windows.Forms
                // - trailing periods or spaces
                // - case sensitive
                // - etc...
+               [DefaultValue(true)]
                public bool ValidateNames
                {
                        get
@@ -359,7 +381,8 @@ namespace System.Windows.Forms
                }
                
                // extension to MS.NET framework...
-               public bool ShowHiddenFiles
+               // Must keep this internal, otherwise our signature doesn't match MS
+               internal bool ShowHiddenFiles
                {
                        set
                        {
index 2b22b01b0e1f33ebe495eedb7c9dde0fcf8c8e8d..541c15920a34a15e68246355d78d29dcc4ed9058 100644 (file)
@@ -42,7 +42,7 @@ namespace System.Windows.Forms
 {
        [DefaultEvent("HelpRequest")]
        [DefaultProperty("SelectedPath")]
-       [Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, " + Consts.AssemblySystem_Design)]\r
+       [Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]\r
        public sealed class FolderBrowserDialog : CommonDialog
        {
                #region Local Variables
index f0a521466a18a2c921f7277fa5fb03f6d89b2b0c..78c464fd523f6c35c3ef7eb468c8ebe25eed0a94 100644 (file)
@@ -37,6 +37,7 @@ using System.Text.RegularExpressions;
 namespace System.Windows.Forms
 {
        [DefaultProperty( "Font" )]
+       [DefaultEvent("Apply")]
        public class FontDialog : CommonDialog
        {
                private FontDialogPanel fontDialogPanel;
@@ -95,7 +96,6 @@ namespace System.Windows.Forms
                        }
                }
                
-               [DefaultValue("Black")]
                public Color Color
                {
                        set {
index 24a185cff779324839bd440ecdd5d5fd496c539a..9c8845a03a870fb7197387956886e672247e696b 100644 (file)
@@ -405,7 +405,7 @@ namespace System.Windows.Forms {
                        }
                }
 
-               [DefaultValue(typeof(Size), "{Width=0, Height=0}")]
+               [DefaultValue("{Width=0, Height=0}")]
                [Localizable(true)]
                [RefreshProperties(RefreshProperties.Repaint)]
                public Size MaximumSize {
@@ -497,7 +497,7 @@ namespace System.Windows.Forms {
                        }
                }
 
-               [DefaultValue(typeof(Size), "{Width=0, Height=0}")]
+               [DefaultValue("{Width=0, Height=0}")]
                [Localizable(true)]
                [RefreshProperties(RefreshProperties.Repaint)]
                public Size MinimumSize {
index 99dd7529ba8bf1a221e2b8fd2b91b921340f26ae..a5b0a4b4b38ee1058baa9d7b96d2b7db75d225e1 100644 (file)
@@ -39,7 +39,7 @@ namespace System.Windows.Forms
 {
        [DefaultProperty("Text")]
        [DefaultEvent("Enter")]
-       [Designer ("System.Windows.Forms.Design.GroupBoxDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.GroupBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class GroupBox : Control
        {
                private FlatStyle flat_style;
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Help.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Help.cs
new file mode 100644 (file)
index 0000000..5b4a313
--- /dev/null
@@ -0,0 +1,70 @@
+// 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.
+//
+// Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
+//
+// Authors:
+//     Peter Bartok    (pbartok@novell.com)
+//
+//
+
+// NOT COMPLETE
+
+using System;
+using System.Drawing;
+
+namespace System.Windows.Forms {
+       public class Help {
+               #region Constructor
+               private Help() {
+               }
+               #endregion
+
+               #region Public Static Methods
+               public static void ShowHelp(Control parent, string url) {
+                       ShowHelp(parent, url, HelpNavigator.TableOfContents, null);
+               }
+
+               public static void ShowHelp(Control parent, string url, HelpNavigator navigator) {
+                       ShowHelp(parent, url, navigator, null);
+               }
+
+               [MonoTODO("Create glue code to tie into libCHM")]
+               public static void ShowHelp(Control parent, string url, HelpNavigator command, object param) {
+                       MessageBox.Show(parent, (string)Locale.GetText("Help (" + command + "(" + param.ToString() + ")) not yet implemented"), (string)Locale.GetText("Popup Help"), MessageBoxButtons.OK, MessageBoxIcon.Stop);
+               }
+
+               public static void ShowHelp(Control parent, string url, string keyword) {
+                       if (keyword == null || keyword == String.Empty) {
+                               ShowHelp(parent, url, HelpNavigator.TableOfContents, null);
+                       }
+                       ShowHelp(parent, url, HelpNavigator.Topic, keyword);
+               }
+
+               public static void ShowHelpIndex(Control parent, string url) {
+                       ShowHelp(parent, url, HelpNavigator.Index, null);
+               }
+
+               [MonoTODO("Create glue code to tie into libCHM")]
+               public static void ShowPopup(Control parent, string caption, Point location) {
+                       MessageBox.Show(parent, (string)Locale.GetText("Popup Help not yet implemented"), (string)Locale.GetText("Popup Help"), MessageBoxButtons.OK, MessageBoxIcon.Stop);
+               }
+               #endregion      // Public Static Methods
+       }
+}
index 70186563b2bd0e2e283412ec7c781abdf5e2562c..4934f67d652d9a045f9f6828936118c4626daa61 100644 (file)
@@ -34,10 +34,10 @@ using System.Drawing;
 
 namespace System.Windows.Forms {
        [ToolboxItemFilter("System.Windows.Forms")]
-       [ProvideProperty("HelpString", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
-       [ProvideProperty("HelpKeyword", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
-       [ProvideProperty("HelpNavigator", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        [ProvideProperty("ShowHelp", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+       [ProvideProperty("HelpNavigator", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+       [ProvideProperty("HelpKeyword", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+       [ProvideProperty("HelpString", "System.Windows.Forms.Control, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        public class HelpProvider : Component, IExtenderProvider {
                #region HelpProperty Class
                private class HelpProperty {
index b1191f9dac0fed2c2e3d86bd657bdb7c49e12282..e88289f5e341ea526083e84e22c996b1e93ac61c 100644 (file)
@@ -33,7 +33,7 @@ using System.Drawing.Imaging;
 
 namespace System.Windows.Forms {
        [DefaultProperty("Images")]
-       [Designer("System.Windows.Forms.Design.ImageListDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.ImageListDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)]
        [TypeConverter("System.Windows.Forms.ImageListConverter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        public sealed class ImageList : System.ComponentModel.Component {
index d0b70b51794b1b1252c46a7f7dc202bd47916e8f..3401ffc8c5f44567f015af011727b74d47455700 100644 (file)
@@ -37,7 +37,7 @@ using System.Runtime.InteropServices;
 namespace System.Windows.Forms
 {
        [DefaultProperty("Text")]
-       [Designer ("System.Windows.Forms.Design.LabelDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.LabelDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class Label : Control
        {
                private bool autosize;
index 9e082652e75706c1a79748830c1ae9144c25e0b9..16b6954635331e253a8f747046ecfa8619f8cf7c 100644 (file)
@@ -58,7 +58,6 @@ namespace System.Windows.Forms
                        }
 
                        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
-                               string          s;
                                string[]        parts;
                                int             start;
                                int             length;
index cf2f0c3ae1e16781c9617887f334cd2ef9d1f869..fb9984c1cda54b0799df7a689affc1fedf0d3aa3 100644 (file)
@@ -38,7 +38,7 @@ namespace System.Windows.Forms
 {
        [DefaultProperty("Items")]
        [DefaultEvent("SelectedIndexChanged")]
-       [Designer ("System.Windows.Forms.Design.ListBoxDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.ListBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class ListBox : ListControl
        {
                public const int DefaultItemHeight = 13;
index 619410d2fb32d34dffe4c179ec2cae0cd2c2837d..18fc616a9cb3a2ecdf370041e6c35cdd6f5ff97c 100644 (file)
@@ -49,7 +49,7 @@ namespace System.Windows.Forms
 {
        [DefaultEvent ("SelectedIndexChanged")]
        [DefaultProperty ("Items")]
-       [Designer ("System.Windows.Forms.Design.ListViewDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.ListViewDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class ListView : Control
        {
                private ItemActivation activation = ItemActivation.Standard;
index cf5ac677ed96ab0e7e97aafff5ef0341c110da36..ea2487358366aef6065abcb5cc2bca4c77ed90be 100644 (file)
@@ -73,6 +73,7 @@ namespace System.Windows.Forms {
                #endregion      // Public Constructors
 
                #region Public Instance Properties
+               [Localizable(true)]
                public override System.Drawing.Image BackgroundImage {
                        get {
                                return base.BackgroundImage;
index af92c360a934f0e2a75f2032dbe59004bae5e894..455ba4c742d0f4c132e68528d7fd02d35f3ce469 100644 (file)
@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms
 {
-       [Designer ("Microsoft.VisualStudio.Windows.Forms.MenuDesigner, Microsoft.VisualStudio, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", (string)null)]
+       [Designer ("Microsoft.VisualStudio.Windows.Forms.MenuDesigner, Microsoft.VisualStudio, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.IDesigner")]
        [ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)]
        [ListBindable(false)]
        public abstract class Menu : Component
index 26dc7f4f1de672491e12d83a1df7a6da54ab1e87..caa2e15b5e92414e721fdf9f4ddb2e55f6608738 100644 (file)
@@ -36,7 +36,7 @@ using System.Windows.Forms;
 namespace System.Windows.Forms {
        [DefaultProperty("SelectionRange")]
        [DefaultEvent("DateChanged")]
-       [Designer ("System.Windows.Forms.Design.MonthCalendarDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.MonthCalendarDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class MonthCalendar : Control {
                #region Local variables
                DateTime []             annually_bolded_dates;
index ce274ec9fe4908a568e3c636a2201c13ed3d201d..8bfea60f3dbc71f4b49aa608199dc541b7b13c59 100644 (file)
@@ -34,7 +34,7 @@ using System.Drawing;
 namespace System.Windows.Forms {
        [DefaultProperty("Text")]
        [DefaultEvent("MouseDown")]
-       [Designer ("System.Windows.Forms.Design.NotifyIconDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.NotifyIconDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)]
        public sealed class NotifyIcon : System.ComponentModel.Component {
                #region Local Variables
index 649f81eacf66a5e57b16552aa6bb7481dff62f01..b4c02410755f4fbeeec3055b2d6c94715cef4f49 100644 (file)
@@ -33,7 +33,7 @@ using System.IO;
 
 namespace System.Windows.Forms
 {
-       [Designer("System.Windows.Forms.Design.OpenFileDialogDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.OpenFileDialogDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public sealed class OpenFileDialog : FileDialog
        {
                #region Public Constructors
index c9c30398173865bd38d08eab3ad015baea3a7a4f..db6cae7f0fe3e925ffe379bd6ca3b2d487d9bcb9 100644 (file)
@@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
 namespace System.Windows.Forms {
        [DefaultProperty("BorderStyle")]
        [DefaultEvent("Paint")]
-       [Designer ("System.Windows.Forms.Design.PanelDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.PanelDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class Panel : ScrollableControl {
                #region Constructors & Destructors
                public Panel () {
index 0f7c700faa27474f293dfb08676ecef24088958e..53a6b21b53b11679c3df80011536088f9e202f9b 100644 (file)
@@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms {
        [DefaultProperty("Image")]
-       [Designer("System.Windows.Forms.Design.PictureBoxDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.PictureBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class PictureBox : Control {
 
                private Image image;
index 22c37d07338a748a04d900044ca77bac81b6b564..59324dd8c1a4c7b23621acef294b167547743db1 100644 (file)
@@ -37,7 +37,7 @@ using System.Windows.Forms.PropertyGridInternal;
 
 namespace System.Windows.Forms
 {
-       [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser
        {
                #region Private Members
@@ -217,7 +217,9 @@ namespace System.Windows.Forms
                        }
                }
                
-               [MonoTODO()]
+               [MonoTODO]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override bool AutoScroll {
                        get {
                                return base.AutoScroll;
@@ -241,6 +243,8 @@ namespace System.Windows.Forms
                }
                
                [MonoTODO()]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override Image BackgroundImage {
                        get {
                                return base.BackgroundImage;
@@ -317,6 +321,9 @@ namespace System.Windows.Forms
                }
                
                [MonoTODO()]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public new Control.ControlCollection Controls {
                        get {
                                return base.Controls;
@@ -324,6 +331,8 @@ namespace System.Windows.Forms
                }
                
                [MonoTODO()]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override Color ForeColor 
                {
                        get {
@@ -785,7 +794,12 @@ namespace System.Windows.Forms
                public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
                public event EventHandler SelectedObjectsChanged;
                
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public new event EventHandler BackgroundImageChanged;
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public new event EventHandler ForeColorChanged;
                #endregion
 
index a546f6f2a9da20e7cf5253a75b6b55e8ada8cf15..65f939afd31f05d108ae8830f8147835599df0b4 100644 (file)
@@ -33,7 +33,7 @@ using System.IO;
 
 namespace System.Windows.Forms
 {
-       [Designer("System.Windows.Forms.Design.SaveFileDialogDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.SaveFileDialogDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public sealed class SaveFileDialog : FileDialog
        {
                #region Public Constructors
index cce85d1b89d6156efe48e1f88a129c8ae9c0395d..aec37f71205f92c3cf2e14706c0de5af2c4d5e08 100644 (file)
@@ -32,7 +32,7 @@ using System.ComponentModel.Design;
 using System.Drawing;
 
 namespace System.Windows.Forms {
-       [Designer ("System.Windows.Forms.Design.ScrollableControlDesigner, " + Consts.AssemblySystem_Design, (string)null)]
+       [Designer ("System.Windows.Forms.Design.ScrollableControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class ScrollableControl : Control {
                #region Local Variables
                private bool                    auto_vscroll;
index b1396f4236593e636e8a8bc76fea5083f5142781..77809f519c61adcfbab7568c6ff55d10a0dfc07d 100644 (file)
@@ -52,7 +52,6 @@ namespace System.Windows.Forms {
                }
 
                public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
-                       string          s;\r
                        string[]        parts;\r
                        DateTime        start;\r
                        DateTime        end;\r
index 8e234ecf2ea9b53710dee7666dd2fd6e4dab72a7..da03b1e5b9c334924333f9f9e46a0496bc6b1ece 100644 (file)
@@ -36,7 +36,7 @@ using System.Windows.Forms;
 namespace System.Windows.Forms \r
 {
        [DefaultEvent("SplitterMoved")]
-       [Designer("System.Windows.Forms.Design.SplitterDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.SplitterDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DefaultProperty("Dock")]
        public class Splitter : Control, IMessageFilter \r
        {
index cf6af37969538604864db210503c12a2fbea675c..dc66e80d59d6c59a6c7973e16007be74d496f536 100644 (file)
@@ -36,7 +36,7 @@ using System.Drawing.Imaging;
 
 namespace System.Windows.Forms {
        [DefaultEvent("PanelClick")]
-       [Designer("System.Windows.Forms.Design.StatusBarDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.StatusBarDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DefaultProperty("Text")]
        public class StatusBar : Control {
                #region Fields
index c70d0ea9896226faad28cc384900734ea1255589..6b3974903f280c550dda77044e6f0d978f15129c 100644 (file)
@@ -33,7 +33,7 @@ using System.Drawing;
 namespace System.Windows.Forms {
        [DefaultEvent("SelectedIndexChanged")]
        [DefaultProperty("TabPages")]
-       [Designer("System.Windows.Forms.Design.TabControlDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.TabControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class TabControl : Control {
                #region Fields
                private int selected_index = -1;
index 1302926b1f0433ef64a582c086732f19833cc76b..ed8ec9e025f4281d6bca2f445bbe037f161942a6 100644 (file)
@@ -32,7 +32,7 @@ namespace System.Windows.Forms {
        [DefaultEvent("Click")]
        [DesignTimeVisible(false)]
        [DefaultProperty("Text")]
-       [Designer("System.Windows.Forms.Design.TabPageDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.TabPageDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [ToolboxItem(false)]
        public class TabPage : Panel {
                #region Fields
index cb4f4d702efcb79dfaf5e22194285fa38a276b56..1708b954e150f0b39a4fa19a36c72a900a45b194 100644 (file)
@@ -432,6 +432,8 @@ namespace System.Windows.Forms
                
                #region Datagrid
                public abstract int DataGridPreferredColumnWidth { get; }
+               public abstract int DataGridMinimumColumnCheckBoxHeight { get; }
+               public abstract int DataGridMinimumColumnCheckBoxWidth { get; }
                
                // Default colours
                public abstract Color DataGridAlternatingBackColor { get; }             
index 8eec0d71e614ce290515d7453a2928652769bdae..1ea3137d0055e08b844350597b1c67f6fc463c13 100644 (file)
@@ -857,7 +857,9 @@ namespace System.Windows.Forms
                #endregion ComboBox
                
                #region Datagrid
-               public override int DataGridPreferredColumnWidth { get { return 75;} }          
+               public override int DataGridPreferredColumnWidth { get { return 75;} }
+               public override int DataGridMinimumColumnCheckBoxHeight { get { return 16;} }
+               public override int DataGridMinimumColumnCheckBoxWidth { get { return 16;} }
                public override Color DataGridAlternatingBackColor { get { return ColorWindow;} }
                public override Color DataGridBackgroundColor { get  { return ColorWindow;} }
                public override Color DataGridCaptionBackColor { get  { return ColorActiveTitle;} }
index f85ff3706c2fd4d7dad02676c4b5456956b02841..7e7451bcdbb06cca4b16634d031efbb0f4a6d1b5 100644 (file)
@@ -43,7 +43,7 @@ namespace System.Windows.Forms
 {      
        [DefaultEvent ("ButtonClick")]
        [DefaultProperty ("Buttons")]
-       [Designer ("System.Windows.Forms.Design.ToolBarDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer ("System.Windows.Forms.Design.ToolBarDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class ToolBar : Control
        {
                #region Instance Variables
index 7be4caa1749f5eca36ddf5fe5c7c399000d416b7..34c6ee3da2e534698a59a7e1e57b65a025f27fc5 100644 (file)
@@ -40,7 +40,7 @@ using System.Drawing.Imaging;
 namespace System.Windows.Forms
 {
        [DefaultProperty ("Text")]
-       [Designer ("System.Windows.Forms.Design.ToolBarButtonDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer ("System.Windows.Forms.Design.ToolBarButtonDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DesignTimeVisible (false)]
        [ToolboxItem (false)]
        public class ToolBarButton : Component
index 363a8bd39bb5dd73181234f7ad59d8de49c313e3..d77f29ab8435da7359c40cb06b22b4cc44c7d051 100644 (file)
@@ -43,7 +43,7 @@ using System.Timers;
 
 namespace System.Windows.Forms
 {      
-       [Designer("System.Windows.Forms.Design.TrackBarDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.TrackBarDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [DefaultEvent ("Scroll")]
        [DefaultProperty("Value")]
        public class TrackBar : Control, ISupportInitialize
index 89f54b48a8812ffcf17f2edacfac1e034bb6acc0..48c5703dd1b7db40393027f4c595533025056eb0 100644 (file)
@@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
 namespace System.Windows.Forms {
        [DefaultProperty("Nodes")]
        [DefaultEvent("AfterSelect")]
-       [Designer("System.Windows.Forms.Design.TreeViewDesigner, " + Consts.AssemblySystem_Design)]
+       [Designer("System.Windows.Forms.Design.TreeViewDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class TreeView : Control {
                #region Fields
                private string path_separator = "\\";
index c2fd75092c4c2dd790d2aed96b8b8488fdc0424d..ee06d476007664c37c1ee49373eac1605372c3d4 100644 (file)
@@ -35,8 +35,8 @@ using System.Drawing;
 namespace System.Windows.Forms {
        [DefaultEvent("Load")]
        [DesignerCategory("UserControl")]
+       [Designer("System.Windows.Forms.Design.ControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [Designer("System.Windows.Forms.Design.UserControlDocumentDesigner, " + Consts.AssemblySystem_Design, typeof(IRootDesigner))]
-       [Designer("System.Windows.Forms.Design.ControlDesigner, " + Consts.AssemblySystem_Design)]
        public class UserControl : ContainerControl {
                #region Public Constructors
                public UserControl() {
index dbfaac88e674fdb0fd63e9bdc42e773218deefac..c0fa3eddc3d749a5707aab49f37e3918698ec0b3 100644 (file)
@@ -100,6 +100,8 @@ namespace System.Windows.Forms {
                // Timers
                private ArrayList TimerList;
                
+               static readonly object lockobj = new object ();
+               
                // Event Handlers
                internal override event EventHandler Idle;
 
@@ -124,7 +126,7 @@ namespace System.Windows.Forms {
                #region Singleton specific code
                
                public static XplatUIOSX GetInstance() {
-                       lock (typeof (XplatUIOSX)) {
+                       lock (lockobj) {
                                if (Instance == null) {
                                        Instance = new XplatUIOSX ();
                                }
@@ -867,13 +869,10 @@ namespace System.Windows.Forms {
 \r
                internal override IntPtr ClipboardOpen() {\r
                        throw new NotImplementedException();\r
-\r
-                       return new IntPtr ();\r
                }\r
 \r
                internal override object ClipboardRetrieve(IntPtr handle, int id, XplatUI.ClipboardToObject converter) {\r
                        throw new NotImplementedException();\r
-                       return null;\r
                }\r
 \r
                internal override void ClipboardStore(IntPtr handle, object obj, int type, XplatUI.ObjectToClipboard converter) {\r
index b2fabcd72b4fd431c3a763184eaae9136fc34ec5..392dcefe811d3f6ebc82b4efc078658e9c2d6349 100644 (file)
@@ -1575,7 +1575,7 @@ Console.WriteLine("Hit Clear background");
                        rect.right = rectangle.Right;
                        rect.bottom = rectangle.Bottom;
 
-                       Win32ScrollWindowEx(hwnd, XAmount, YAmount, ref rect, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, ScrollWindowExFlags.SW_INVALIDATE | ScrollWindowExFlags.SW_ERASE | (with_children ? ScrollWindowExFlags.SW_SCROLLCHILDREN : ScrollWindowExFlags.SW_NONE));
+                       Win32ScrollWindowEx(hwnd, XAmount, YAmount, ref rect, ref rect, IntPtr.Zero, IntPtr.Zero, ScrollWindowExFlags.SW_INVALIDATE | ScrollWindowExFlags.SW_ERASE | (with_children ? ScrollWindowExFlags.SW_SCROLLCHILDREN : ScrollWindowExFlags.SW_NONE));
                        Win32UpdateWindow(hwnd);
                }
 
@@ -1887,7 +1887,6 @@ Console.WriteLine("Hit Clear background");
                                        return;
                                }
                        }
-                       return;
                }
                
                internal override int KeyboardSpeed {
index 7e8a79621a66757b7dcf778ce4b921ca2cfed44c..36c61104b5888e2f675252b16b4dafc9d663538d 100644 (file)
@@ -68,7 +68,7 @@ namespace System.Windows.Forms {
        internal class XplatUIX11 : XplatUIDriver {
                #region Local Variables
                // General
-               private static XplatUIX11       Instance;
+               static volatile XplatUIX11      Instance;
                private static int              RefCount;
                private static object           XlibLock;               // Our locking object
                private static bool             ThemesEnabled;
@@ -143,18 +143,21 @@ namespace System.Windows.Forms {
                // 'Constants'
                private static int              DoubleClickInterval;    // msec; max interval between clicks to count as double click
 
-               private static readonly EventMask  SelectInputMask =    EventMask.ButtonPressMask | 
-                                                                       EventMask.ButtonReleaseMask | 
-                                                                       EventMask.KeyPressMask | 
-                                                                       EventMask.KeyReleaseMask | 
-                                                                       EventMask.EnterWindowMask | 
-                                                                       EventMask.LeaveWindowMask |
-                                                                       EventMask.ExposureMask |
-                                                                       EventMask.FocusChangeMask |
-                                                                       EventMask.PointerMotionMask | 
-                                                                       EventMask.VisibilityChangeMask |
-                                                                       EventMask.SubstructureNotifyMask |
-                                                                       EventMask.StructureNotifyMask;
+               const EventMask SelectInputMask = EventMask.ButtonPressMask | 
+                                                 EventMask.ButtonReleaseMask | 
+                                                 EventMask.KeyPressMask | 
+                                                 EventMask.KeyReleaseMask | 
+                                                 EventMask.EnterWindowMask | 
+                                                 EventMask.LeaveWindowMask |
+                                                 EventMask.ExposureMask |
+                                                 EventMask.FocusChangeMask |
+                                                 EventMask.PointerMotionMask | 
+                                                 EventMask.VisibilityChangeMask |
+                                                 EventMask.SubstructureNotifyMask |
+                                                 EventMask.StructureNotifyMask;
+               
+               static readonly object lockobj = new object ();
+               
                #endregion      // Local Variables
 
                #region Constructors
@@ -186,7 +189,7 @@ namespace System.Windows.Forms {
 
                #region Singleton Specific Code
                public static XplatUIX11 GetInstance() {
-                       lock (typeof(XplatUIX11)) {
+                       lock (lockobj) {
                                if (Instance == null) {
                                        Instance=new XplatUIX11();
                                }
@@ -901,7 +904,6 @@ namespace System.Windows.Forms {
                                                } else if (Clipboard.Item is string) {
                                                        IntPtr  buffer;
                                                        int     buflen;
-                                                       byte    b;
 
                                                        buffer = Marshal.StringToHGlobalAnsi((string)Clipboard.Item);
                                                        buflen = 0;
@@ -1533,8 +1535,6 @@ namespace System.Windows.Forms {
                }\r
 \r
                internal override object ClipboardRetrieve(IntPtr handle, int type, XplatUI.ClipboardToObject converter) {\r
-                       int     target_type;\r
-\r
                        XConvertSelection(DisplayHandle, NetAtoms[(int)NA.CLIPBOARD], type, type, FosterParent, IntPtr.Zero);\r
 \r
                        Clipboard.Retrieving = true;\r
index 2b2b1b5535af135019571068d6d53ccda5c7fdef..7bbdf4ff92aaf5dcd2f95fb76f4401eabf28516c 100644 (file)
@@ -1,3 +1,6 @@
+2005-05-25  Satya Sudha K <ksathyasudha@novell.com>
+       * ObjectType.cs : Some fixes to Narrowing conversions
+
 2005-05-23  Satya Sudha K <ksathyasudha@novell.com>
        * VBBinder.cs : Support for named arguments
 
index 38169d617edb4806eab7176f100d543671efa92d..0153fa9c48d477c8252e2a90bda0f115e05f38f5 100644 (file)
@@ -1447,6 +1447,10 @@ namespace Microsoft.VisualBasic.CompilerServices {
 
                        if (FromType == typeof (object)) // Object can be converted to any type
                                return true;
+
+                       if (FromType.IsArray || ToType.IsArray)
+                               return false;
+
                        TypeCode src_type = Type.GetTypeCode (FromType);
                        TypeCode dest_type = Type.GetTypeCode (ToType);
                        switch (dest_type) {
@@ -1505,16 +1509,13 @@ namespace Microsoft.VisualBasic.CompilerServices {
                                return true;
 
                        if (typeCode2 == TypeCode.String) {
-                               if (FromType == typeof (char[]))
+                               if (typeCode1 == TypeCode.Char || FromType == typeof (char[]))
                                        return true;
                                return false;
                        }
 
-                       if (typeCode1 == TypeCode.String) {
-                               if (typeCode2 == TypeCode.Char)
-                                       return true;
+                       if (typeCode1 == TypeCode.String)
                                return false;
-                       }
 
                        if (typeCode1 == TypeCode.DateTime || typeCode2 == TypeCode.DateTime)
                                return false;
index f31b2c173932a6bb8f8662ee5bd660cc72246811..cb23a556a978fb47ec201843d1ee2fae000e414d 100644 (file)
@@ -174,7 +174,7 @@ namespace Microsoft.VisualBasic.CompilerServices
                                                numWideningConversions ++;
                                        mbase = filteredMatchList [x];
                                } else if (bestMatch == ctype) {
-                                       if (bestMatch == ConversionType.Widening) {
+                                       if (bestMatch == ConversionType.Widening || bestMatch == ConversionType.Exact) {
                                                // Got a widening conversion before also.
                                                // Find the best among the two
                                                int closestMatch = GetClosestMatch (mbase, filteredMatchList [x], args.Length);
@@ -195,7 +195,8 @@ namespace Microsoft.VisualBasic.CompilerServices
                                //TODO : print the methods too
                                throw new AmbiguousMatchException ("No overloaded '" + this.objectType + "." + this.bindToName + "' can be called without a narrowing conversion");
                        }
-                       if ((bestMatch == ConversionType.Widening) && numWideningConversions > 1) {
+
+                       if ((bestMatch == ConversionType.Widening || bestMatch == ConversionType.Exact) && numWideningConversions > 1) {
                                //TODO : print the methods too
                                throw new AmbiguousMatchException ("No overloaded '" + this.objectType + "." + this.bindToName + "' can be called without a widening conversion");
                        }
index 25006a9931e81a145443e620af1059588a05356d..e6c5aed2a5c79d973d5d72733a301b85d1616901 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-25  Ben Maurer  <bmaurer@ximian.com>
+
+       * Conversion.cs (Val): Do a correct impl of Val (char). Fixes bug
+       #67810.
+
 2005-05-12 Ankit Jain  <ankit@corewars.org>
 
        * Strings.cs : Sealed.
index 1d32ca56af3dd3a14c06e3cc05124ae9d6a6f043..b4f412d8785a73c51447fc902a81472c958f59c8 100644 (file)
@@ -683,13 +683,10 @@ namespace Microsoft.VisualBasic {
                }
 
                // Val on a char type is pretty simple  '9' = 9, 'a' = exception
-               public static int Val (char Expression) {
-                       if (char.IsDigit(Expression)) {
-                               return Expression - '0';
-                       } 
-                       else {
-                               throw new ArgumentException();
-                       }
+               public static int Val (char c) {
+                       if (c >= '0' && c <= '9')
+                               return c - '0';
+                       return 0;
                }
 
                // if it's an object, and we can't convert 
index 96e3cb68b4b8d827b7b6849b0685101be75d1978..4fb2db8a60af9e2e143acbade689799a0737a1dc 100644 (file)
@@ -48,7 +48,7 @@ namespace Cairo {
                 private Surface (IntPtr ptr, bool owns)
                 {
                         surface = ptr;
-                       lock (typeof (Surface)){
+                       lock (surfaces.SyncRoot){
                                surfaces [ptr] = this;
                        }
                        if (!owns)
@@ -57,7 +57,7 @@ namespace Cairo {
 
                static internal Surface LookupExternalSurface (IntPtr p)
                {
-                       lock (typeof (Surface)){
+                       lock (surfaces.SyncRoot){
                                object o = surfaces [p];
                                if (o == null){
                                        return new Surface (p, false);
@@ -124,7 +124,7 @@ namespace Cairo {
                {
                        if (surface == (IntPtr) 0)
                                return;
-                       lock (typeof (Surface)){
+                       lock (surfaces.SyncRoot){
                                surfaces.Remove (surface);
                        }
                        CairoAPI.cairo_surface_destroy (surface);
index 19493f2a6d0694f6aca71ab57eda1bf9c621f651..082c5fe51f4a20874f9470d66151f0b3603ff223 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-25  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * SymbolWriterImpl.cs: An implementation of ISymbolWriter. It is just a
+       wrapper for the MonoSymbolWriter class that mcs is using.
+
 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
 
        * MonoSymbolFile.cs: Removed unused fields.
diff --git a/mcs/class/Mono.CompilerServices.SymbolWriter/SymbolWriterImpl.cs b/mcs/class/Mono.CompilerServices.SymbolWriter/SymbolWriterImpl.cs
new file mode 100644 (file)
index 0000000..35f7cd8
--- /dev/null
@@ -0,0 +1,322 @@
+//
+// SymbolWriterImpl.cs
+//
+// Author:
+//   Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 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.Reflection;
+using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
+using System.Collections;
+using System.IO;
+using System.Diagnostics.SymbolStore;
+       
+namespace Mono.CompilerServices.SymbolWriter
+{
+       public class SymbolWriterImpl: ISymbolWriter
+       {
+               MonoSymbolWriter msw;
+               ModuleBuilder mb;
+
+               delegate Guid GetGuidFunc (ModuleBuilder mb);
+               GetGuidFunc get_guid_func;
+               
+               int currentToken;
+               string methodName;
+               Stack namespaceStack = new Stack ();
+               bool methodOpened;
+               
+               Hashtable documents = new Hashtable ();
+               
+               public SymbolWriterImpl (ModuleBuilder mb)
+               {
+                       this.mb = mb;
+               }
+               
+               public void Close ()
+               {
+                       MethodInfo mi = typeof (ModuleBuilder).GetMethod (
+                               "Mono_GetGuid",
+                               BindingFlags.Static | BindingFlags.NonPublic);
+                       if (mi == null)
+                               return;
+
+                       get_guid_func = (GetGuidFunc) System.Delegate.CreateDelegate (
+                               typeof (GetGuidFunc), mi);
+                       
+                       msw.WriteSymbolFile (get_guid_func (mb));
+               }
+               
+               public void CloseMethod ()
+               {
+                       if (methodOpened) {
+                               methodOpened = false;
+                               msw.CloseMethod ();
+                       }
+               }
+               
+               public void CloseNamespace ()
+               {
+                       namespaceStack.Pop ();
+                       msw.CloseNamespace ();
+               }
+               
+               public void CloseScope (int endOffset)
+               {
+                       msw.CloseScope (endOffset);
+               }
+               
+               public ISymbolDocumentWriter DefineDocument (
+                       string url,
+                       Guid language,
+                       Guid languageVendor,
+                       Guid documentType)
+               {
+                       SymbolDocumentWriterImpl doc = (SymbolDocumentWriterImpl) documents [url];
+                       if (doc == null) {
+                               doc = new SymbolDocumentWriterImpl (msw.DefineDocument (url));
+                               documents [url] = doc;
+                       }
+                       return doc;
+               }
+                       
+               public void DefineField (
+                       SymbolToken parent,
+                       string name,
+                       FieldAttributes attributes,
+                       byte[] signature,
+                       SymAddressKind addrKind,
+                       int addr1,
+                       int addr2,
+                       int addr3)
+               {
+               }
+               
+               public void DefineGlobalVariable (
+                       string name,
+                       FieldAttributes attributes,
+                       byte[] signature,
+                       SymAddressKind addrKind,
+                       int addr1,
+                       int addr2,
+                       int addr3)
+               {
+               }
+               
+               public void DefineLocalVariable (
+                       string name,
+                       FieldAttributes attributes,
+                       byte[] signature,
+                       SymAddressKind addrKind,
+                       int addr1,
+                       int addr2,
+                       int addr3,
+                       int startOffset,
+                       int endOffset)
+               {
+                       msw.DefineLocalVariable (name, signature);
+               }
+               
+               public void DefineParameter (
+                       string name,
+                       ParameterAttributes attributes,
+                       int sequence,
+                       SymAddressKind addrKind,
+                       int addr1,
+                       int addr2,
+                       int addr3)
+               {
+               }
+
+               public void DefineSequencePoints (
+                       ISymbolDocumentWriter document,
+                       int[] offsets,
+                       int[] lines,
+                       int[] columns,
+                       int[] endLines,
+                       int[] endColumns)
+               {
+                       for (int n=0; n<offsets.Length; n++) {
+                               if (n > 0 && offsets[n] == offsets[n-1] && lines[n] == lines[n-1] && columns[n] == columns[n-1])
+                                       continue;
+                               msw.MarkSequencePoint (offsets[n], lines[n], columns[n]);
+                       }
+               }
+               
+               public void Initialize (IntPtr emitter, string filename, bool fFullBuild)
+               {
+                       msw = new MonoSymbolWriter (filename);
+               }
+               
+               public void OpenMethod (SymbolToken method)
+               {
+                       currentToken = method.GetToken ();
+               }
+               
+               public void OpenNamespace (string name)
+               {
+                       NamespaceInfo n = new NamespaceInfo ();
+                       n.NamespaceID = -1;
+                       n.Name = name;
+                       namespaceStack.Push (n);
+               }
+               
+               public int OpenScope (int startOffset)
+               {
+                       return msw.OpenScope (startOffset);
+               }
+               
+               public void SetMethodSourceRange (
+                       ISymbolDocumentWriter startDoc,
+                       int startLine,
+                       int startColumn,
+                       ISymbolDocumentWriter endDoc,
+                       int endLine,
+                       int endColumn)
+               {
+                       SourceMethodImpl sm = new SourceMethodImpl (methodName, currentToken, GetCurrentNamespace (startDoc));
+                       msw.OpenMethod (startDoc as ISourceFile, sm, startLine, startColumn, endLine, endColumn);
+                       methodOpened = true;
+               }
+               
+               public void SetScopeRange (int scopeID, int startOffset, int endOffset)
+               {
+               }
+               
+               public void SetSymAttribute (SymbolToken parent, string name, byte[] data)
+               {
+                       // This is a hack! but MonoSymbolWriter needs the method name
+                       // and ISymbolWriter does not have any method for providing it
+                       if (name == "__name")
+                               methodName = System.Text.Encoding.UTF8.GetString (data);
+               }
+               
+               public void SetUnderlyingWriter (IntPtr underlyingWriter)
+               {
+               }
+               
+               public void SetUserEntryPoint (SymbolToken entryMethod)
+               {
+               }
+
+               public void UsingNamespace (string fullName)
+               {
+                       if (namespaceStack.Count == 0) {
+                               OpenNamespace ("");
+                       }
+                       
+                       NamespaceInfo ni = (NamespaceInfo) namespaceStack.Peek ();
+                       if (ni.NamespaceID != -1) {
+                               NamespaceInfo old = ni;
+                               CloseNamespace ();
+                               OpenNamespace (old.Name);
+                               ni = (NamespaceInfo) namespaceStack.Peek ();
+                               ni.UsingClauses = old.UsingClauses;
+                       }
+                       ni.UsingClauses.Add (fullName);
+               }
+               
+               int GetCurrentNamespace (ISymbolDocumentWriter doc)
+               {
+                       if (namespaceStack.Count == 0) {
+                               OpenNamespace ("");
+                       }
+
+                       NamespaceInfo ni = (NamespaceInfo) namespaceStack.Peek ();
+                       if (ni.NamespaceID == -1)
+                       {
+                               string[] usings = (string[]) ni.UsingClauses.ToArray (typeof(string));
+                               
+                               int parentId = 0;
+                               if (namespaceStack.Count > 1) {
+                                       namespaceStack.Pop ();
+                                       parentId = ((NamespaceInfo) namespaceStack.Peek ()).NamespaceID;
+                                       namespaceStack.Push (ni);
+                               }
+                                       
+                               ni.NamespaceID = msw.DefineNamespace (ni.Name, ((ISourceFile)doc).Entry, usings, parentId);
+                       }
+                       return ni.NamespaceID;
+               }
+       }
+       
+       class SymbolDocumentWriterImpl: ISymbolDocumentWriter, ISourceFile
+       {
+               SourceFileEntry entry;
+               
+               public SymbolDocumentWriterImpl (SourceFileEntry e)
+               {
+                       entry = e;
+               }
+               
+               public void SetCheckSum (Guid algorithmId, byte[] checkSum)
+               {
+               }
+               
+               public void SetSource (byte[] source)
+               {
+               }
+               
+               public SourceFileEntry Entry {
+                       get { return entry; }
+               }
+       }
+       
+       class SourceMethodImpl: ISourceMethod
+       {
+               string name;
+               int token;
+               int namespaceID;
+               
+               public SourceMethodImpl (string name, int token, int namespaceID)
+               {
+                       this.name = name;
+                       this.token = token;
+                       this.namespaceID = namespaceID;
+               }
+               
+               public string Name {
+                       get { return name; }
+               }
+
+               public int NamespaceID {
+                       get { return namespaceID; }
+               }
+
+               public int Token {
+                       get { return token; }
+               }
+       }
+       
+       class NamespaceInfo
+       {
+               public string Name;
+               public int NamespaceID;
+               public ArrayList UsingClauses = new ArrayList ();
+       }
+}
diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog b/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog
new file mode 100644 (file)
index 0000000..af2b4e5
--- /dev/null
@@ -0,0 +1,5 @@
+2005-05-27  Sureshkumar T  <tsureshkumar@novell.com>
+
+       * TdsMetaParameter.cs: Prepare: in SQL, a variable declaration
+       with size 0 is not allowed. fixes #62978.
+
index 51190ac39dc1e7738a177d494a025cbac07e11be..98c439c3befaf983647e92086ac456f8b73f49d3 100644 (file)
@@ -131,7 +131,14 @@ namespace Mono.Data.Tds {
                                break;
                        case "varchar":
                        case "varbinary":
-                               result.Append (String.Format ("({0})", Size > 0 ? Size : GetActualSize ()));
+                               //A size of 0 is not allowed in declarations.
+                               int size = Size;
+                               if (size <= 0) {
+                                       size = GetActualSize ();
+                                       if (size <= 0)
+                                               size = 1;
+                               }
+                               result.Append (String.Format ("({0})", size));
                                break;
                        case "nvarchar":
                                result.Append (String.Format ("({0})", Size > 0 ? Size : 4000));
index c0e748339cd59ab57d5e33bafff9966f0bd194ef..ad43b08c49505c5d4122e3d90b071bac115473a3 100755 (executable)
@@ -201,10 +201,12 @@ namespace Mono.Security.Cryptography {
 
                // private static stuff
 
+               static object lockobj = new object ();
+               
                private static string UserPath {
                        get {
-                               if ((_userPath == null) || (!_userPathExists)) {
-                                       lock (typeof (KeyPairPersistence)) {
+                               lock (lockobj) {
+                                       if ((_userPath == null) || (!_userPathExists)) {
                                                _userPath = Path.Combine (
                                                        Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData),
                                                        ".mono");
@@ -235,8 +237,8 @@ namespace Mono.Security.Cryptography {
 
                private static string MachinePath {
                        get {
-                               if ((_machinePath == null) || (!_machinePathExists)) {
-                                       lock (typeof (KeyPairPersistence)) {
+                               lock (lockobj) {
+                                       if ((_machinePath == null) || (!_machinePathExists)) {
                                                _machinePath = Path.Combine (
                                                        Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData),
                                                        ".mono");
index 16d7e857cdc0959f8ac214ae22851b635c29102a..59c446bdd71181e008e512593f2bc0a3968d881d 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-29 Eyal Alaluf <eyala@mainsoft.com>
+       * System.Data_tests.dll.sources: Unified Mainsoft ConstraintCollection tests into one test in Test/System.Data
+
+2005-05-25 Umadevi S <sumadevi@novell.com>
+       * System.Data.dll.sources : Added DbException.cs, SqlClientMetaDataCollectionNames.cs
+
 2005-05-20 Umadevi S <sumadevi@novell.com>
        * System.Data.dll.sources: Added DbProviderSpecificTypePropertyAttribute.cs
 
index f23837bb12f84500de6b063c90008f7321c28ff5..3f5697477f9db77f85e6faf31142d22ec1aec7b4 100755 (executable)
@@ -1,3 +1,7 @@
+2005-05-25 Konstantin Triger <kostat@mainsoft.com>
+
+      * DataContainer.cs: Correcting the order - first the record is queried whether the value it contains is null, and only if not the value is fetched
+
 2005-05-20 Umadevi S <sumadevi@novell.com>
        * Added file DbProviderSpecificTypePropertyAttribute.cs
 
@@ -70,6 +74,9 @@
        * DbDataAdapter.cs: Update: If  SourceColumn is null, do not set
        value for the parameter.
 
+2005-05-25 Umadevi S <sumadevi@novell.com>
+       * Added DbException.cs
+
 2005-03-23  Sureshkumar T  <tsureshkumar@novell.com>
 
        * DbDataAdapter.cs: For Update, disable ReadOnly constraint
index 1b190ff15d346a1d8c3eb9b5fcf259f977729914..4ce888fbf59c6f93c8df29ded0025554713d62e4 100644 (file)
@@ -170,11 +170,7 @@ namespace System.Data.Common
                        _nullValues[toIndex] = _nullValues[fromIndex];\r
                }\r
 \r
-               internal virtual void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
-               {\r
-                       bool isDbNull = record.IsDBNull(field);\r
-                       SetNull(index,false,isDbNull);\r
-               }\r
+               internal abstract void SetItemFromDataRecord(int index, IDataRecord record, int field);\r
 \r
                protected int CompareNulls(int index1, int index2)\r
                {\r
@@ -254,6 +250,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetInt16Safe(field));\r
@@ -261,7 +263,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -357,6 +358,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetInt32Safe(field));\r
@@ -364,7 +371,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -463,6 +469,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetInt64Safe(field));\r
@@ -470,7 +482,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -570,6 +581,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetFloatSafe(field));\r
@@ -577,7 +594,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -677,6 +693,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetDoubleSafe(field));\r
@@ -684,7 +706,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -784,6 +805,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetByteSafe(field));\r
@@ -791,7 +818,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -889,6 +915,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetBooleanSafe(field));\r
@@ -1045,10 +1077,15 @@ namespace System.Data.Common
                        #region Methods\r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught \r
                                // in the  caller method\r
                                SetValue(index,record.GetValue(field));\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        protected override void SetValue(int index, object value)\r
@@ -1067,10 +1104,21 @@ namespace System.Data.Common
                        #region Methods\r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught \r
                                // in the  caller method\r
-                               base.SetValue(index,record.GetDateTime(field));\r
-                               base.SetItemFromDataRecord(index,record,field);\r
+                               // if exception thrown, it should be caught in the  caller method\r
+                               if (record is ISafeDataRecord) {\r
+                                       SetValue(index,((ISafeDataRecord)record).GetDateTimeSafe(field));\r
+                               }\r
+                               else {\r
+                                       this[index] = record.GetValue(field);\r
+                               }\r
                        }\r
 \r
                        protected override void SetValue(int index, object value)\r
@@ -1088,6 +1136,12 @@ namespace System.Data.Common
                        #region Methods\r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetDecimalSafe(field));\r
@@ -1095,7 +1149,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        protected override void SetValue(int index, object value)\r
@@ -1137,6 +1190,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught \r
                                // in the  caller method\r
                                if (record is ISafeDataRecord) {\r
@@ -1145,7 +1204,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override int CompareValues(int index1, int index2)\r
@@ -1226,6 +1284,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,((ISafeDataRecord)record).GetCharSafe(field));\r
@@ -1233,7 +1297,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -1330,6 +1393,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,(ushort)((ISafeDataRecord)record).GetInt16Safe(field));\r
@@ -1337,7 +1406,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -1433,6 +1501,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,(uint)((ISafeDataRecord)record).GetInt32Safe(field));\r
@@ -1440,7 +1514,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -1539,6 +1612,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,(ulong)((ISafeDataRecord)record).GetInt64Safe(field));\r
@@ -1546,7 +1625,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
@@ -1647,6 +1725,12 @@ namespace System.Data.Common
 \r
                        internal override void SetItemFromDataRecord(int index, IDataRecord record, int field)\r
                        {\r
+                               bool isDbNull = record.IsDBNull(field);\r
+                               if (isDbNull) {\r
+                                       SetNull(index,false,isDbNull);\r
+                                       return;\r
+                               }\r
+\r
                                // if exception thrown, it should be caught in the  caller method\r
                                if (record is ISafeDataRecord) {\r
                                        SetValue(index,(sbyte)((ISafeDataRecord)record).GetByteSafe(field));\r
@@ -1654,7 +1738,6 @@ namespace System.Data.Common
                                else {\r
                                        this[index] = record.GetValue(field);\r
                                }\r
-                               base.SetItemFromDataRecord(index,record,field);\r
                        }\r
 \r
                        internal override void CopyValue(int fromIndex, int toIndex)\r
diff --git a/mcs/class/System.Data/System.Data.Common/DbException.cs b/mcs/class/System.Data/System.Data.Common/DbException.cs
new file mode 100644 (file)
index 0000000..52b6b99
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// System.Data.Common.DbException.cs
+//
+// Author: Umadevi S  (sumadevi@novell.com)
+//
+
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+using System;
+using System.Globalization;
+using System.Runtime.Serialization;
+using System.Runtime.InteropServices;
+
+namespace System.Data {
+       [Serializable]
+       public abstract class DbException : ExternalException
+       {
+               protected DbException ()
+               {
+               }
+
+               protected DbException (string message) : base(message) 
+               {
+               }
+
+               protected DbException (string message, Exception innerException)
+                       : base (message, innerException)
+               {
+               }
+
+               protected DbException (SerializationInfo info, StreamingContext context)
+                       : base (info, context)
+               {
+               }
+
+               protected DbException (string message, int errorcode) : base(message,errorcode) 
+               {
+               }
+       }
+}
+
+#endif
index 7819b14fc2bfdd89a3e76f9c023c00e55e06dc01..f60ae55b7389f360e2a09d647d0c3e20cebb2a97 100644 (file)
@@ -39,6 +39,7 @@ namespace System.Data.Odbc {
                #region Fields
                internal static OdbcConnectionFactory Instance; // singleton
                 private static DbProviderFactory _providerFactory;
+               static readonly object lockobj = new object ();
                #endregion // Fields
 
                #region Constructors
@@ -61,7 +62,7 @@ namespace System.Data.Odbc {
                 // create singleton connection factory.
                 internal static OdbcConnectionFactory GetSingleton (OdbcFactory pvdrFactory)
                 {
-                        lock (typeof (OdbcConnectionFactory)
+                        lock (lockobj
                                 {
                                         if (Instance == null)
                                                 Instance = new OdbcConnectionFactory (pvdrFactory);
index 90b95c3e6aa67baf8a2b76e0f0919e1a0516842b..482f3435f9a37e6898df2cbf9a56de8853e527f1 100644 (file)
@@ -43,30 +43,27 @@ namespace System.Data.Odbc
         {
                 #region Fields
                 public static readonly OdbcFactory Instance;
+               static readonly object lockobj = new object ();
                 #endregion //Fields
 
                 #region Constructors
-                /// <remarks>
-                /// public static variable Instance should hold the the singleton instance 
-                /// based on the knowledge that custom factories without this instance variable
-                /// ms.net  throws exception 
-                /// <pre>
-                /// System.InvalidOperationException: The requested .Net Framework Data 
-                ///             Provider's implementation does not have an Instance field 
-                ///             of a System.Data.Common.DbProviderFactory derived type.
-                ///     at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
-                ///     at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
-                /// </pre>
-                /// </remarks>
-                static OdbcFactory() 
-                {
-                        lock (typeof (OdbcFactory)) 
-                                {
-                                        if (Instance == null)
-                                                Instance = new OdbcFactory ();
-                                }
-                        
-                }
+               /// <remarks>
+               /// public static variable Instance should hold the the singleton instance 
+               /// based on the knowledge that custom factories without this instance variable
+               /// ms.net  throws exception 
+               /// <pre>
+               /// System.InvalidOperationException: The requested .Net Framework Data 
+               ///             Provider's implementation does not have an Instance field 
+               ///             of a System.Data.Common.DbProviderFactory derived type.
+               ///     at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
+               ///     at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
+               /// </pre>
+               /// </remarks>
+               static OdbcFactory() 
+               {
+                       if (Instance == null)
+                               Instance = new OdbcFactory ();                       
+               }
                 
                 private OdbcFactory()
                 {
index b502c28ffedb29ff4d11100882d6192d68441d88..c4927688003c6011c4f5bc4bc5d67da03e342b33 100644 (file)
@@ -243,36 +243,31 @@ namespace System.Data.Odbc
 
                 static OdbcTypeConverter ()
                 {
-                        lock (typeof (OdbcTypeConverter)) {
-                                if (OdbcTypeMap == null) {
-                                        OdbcTypeMap = new MapCollection ();
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.BigInt,         SQL_C_TYPE.SBIGINT,             SQL_TYPE.BIGINT     ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Binary,         SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Bit,            SQL_C_TYPE.BIT,                 SQL_TYPE.BIT        ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Char,            SQL_C_TYPE.CHAR,               SQL_TYPE.CHAR       ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Date,           SQL_C_TYPE.TYPE_DATE,           SQL_TYPE.TYPE_DATE  ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.DateTime,       SQL_C_TYPE.TIMESTAMP,           SQL_TYPE.TIMESTAMP  ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Decimal,                SQL_C_TYPE.NUMERIC,             SQL_TYPE.NUMERIC    , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Double,         SQL_C_TYPE.DOUBLE,              SQL_TYPE.DOUBLE     ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Image,          SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Int,            SQL_C_TYPE.LONG,                SQL_TYPE.INTEGER    ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.NChar,          SQL_C_TYPE.WCHAR,               SQL_TYPE.WCHAR      ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.NText,          SQL_C_TYPE.WCHAR,               SQL_TYPE.WLONGVARCHAR));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Numeric,                SQL_C_TYPE.NUMERIC,             SQL_TYPE.NUMERIC    ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.NVarChar,       SQL_C_TYPE.WCHAR,               SQL_TYPE.WVARCHAR   ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Real,           SQL_C_TYPE.FLOAT,               SQL_TYPE.REAL       ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.SmallDateTime,  SQL_C_TYPE.TIMESTAMP,           SQL_TYPE.TIMESTAMP  , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.SmallInt,       SQL_C_TYPE.SHORT,               SQL_TYPE.SMALLINT   ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Text,           SQL_C_TYPE.WCHAR,               SQL_TYPE.LONGVARCHAR));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Time,           SQL_C_TYPE.TYPE_TIME,           SQL_TYPE.TYPE_TIME  ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.Timestamp,      SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.TinyInt,                SQL_C_TYPE.UTINYINT,            SQL_TYPE.TINYINT    ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.UniqueIdentifier,SQL_C_TYPE.GUID,               SQL_TYPE.GUID       ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.VarBinary,      SQL_C_TYPE.BINARY,              SQL_TYPE.VARBINARY  ));
-                                        OdbcTypeMap.Add (new TypeMap (OdbcType.VarChar,                SQL_C_TYPE.WCHAR,               SQL_TYPE.WVARCHAR   , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
-                                }
-                                
-                        }
+                       OdbcTypeMap = new MapCollection ();
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.BigInt,          SQL_C_TYPE.SBIGINT,             SQL_TYPE.BIGINT     ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Binary,          SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Bit,             SQL_C_TYPE.BIT,                 SQL_TYPE.BIT        ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Char,            SQL_C_TYPE.CHAR,                SQL_TYPE.CHAR       ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Date,            SQL_C_TYPE.TYPE_DATE,           SQL_TYPE.TYPE_DATE  ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.DateTime,        SQL_C_TYPE.TIMESTAMP,           SQL_TYPE.TIMESTAMP  ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Decimal,         SQL_C_TYPE.NUMERIC,             SQL_TYPE.NUMERIC    , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Double,          SQL_C_TYPE.DOUBLE,              SQL_TYPE.DOUBLE     ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Image,           SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Int,             SQL_C_TYPE.LONG,                SQL_TYPE.INTEGER    ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.NChar,           SQL_C_TYPE.WCHAR,               SQL_TYPE.WCHAR      ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.NText,           SQL_C_TYPE.WCHAR,               SQL_TYPE.WLONGVARCHAR));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Numeric,         SQL_C_TYPE.NUMERIC,             SQL_TYPE.NUMERIC    ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.NVarChar,        SQL_C_TYPE.WCHAR,               SQL_TYPE.WVARCHAR   ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Real,            SQL_C_TYPE.FLOAT,               SQL_TYPE.REAL       ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.SmallDateTime,   SQL_C_TYPE.TIMESTAMP,           SQL_TYPE.TIMESTAMP  , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.SmallInt,        SQL_C_TYPE.SHORT,               SQL_TYPE.SMALLINT   ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Text,            SQL_C_TYPE.WCHAR,               SQL_TYPE.LONGVARCHAR));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Time,            SQL_C_TYPE.TYPE_TIME,           SQL_TYPE.TYPE_TIME  ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.Timestamp,       SQL_C_TYPE.BINARY,              SQL_TYPE.BINARY     , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.TinyInt,         SQL_C_TYPE.UTINYINT,            SQL_TYPE.TINYINT    ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.UniqueIdentifier,SQL_C_TYPE.GUID,                SQL_TYPE.GUID       ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.VarBinary,       SQL_C_TYPE.BINARY,              SQL_TYPE.VARBINARY  ));
+                       OdbcTypeMap.Add (new TypeMap (OdbcType.VarChar,         SQL_C_TYPE.WCHAR,               SQL_TYPE.WVARCHAR   , TypeMap.DefaultAll & (~TypeMap.DefaultForSQLType)));
                 }
                 
                 public static SQL_C_TYPE ConvertToSqlCType (OdbcType type)
index 0be2f3abe5c02c2e1c2471a35a113af8455cafc7..b1fbae249dfedc4964c896d1595fcff02619f077 100755 (executable)
@@ -1,3 +1,9 @@
+2005-05-24 Umadevi S <sumadevi@novell.com>
+       * fixed some 2.0 and 1.0 specific fields/attributes for various classes.
+       * Added SqlClientMetaDataCollectionNames.cs, Implemented some 2.0
+       properties for SqlParameterCollection for the bulkcopy feature.
+       
+
 2005-05-20 Kornél Pál <http://www.kornelpal.hu/>
        
        * Fixed Bug #53169 - SqlDataReader incorrectly returns bigint as decimal
index 5989ed83d83361c5d6ffbfa342ee1d8a8295f217..a00f32c7ff67b993e2355279cdc9248b4e0efc03 100644 (file)
@@ -92,7 +92,7 @@ namespace System.Data.SqlClient
                }
        }
        
-       public String SoruceColumn {
+       public String SourceColumn {
                 get {
                         if (this.sourceColumn != null)
                                 return sourceColumn;
index 70cbcb346ecd965ba1fc4d21957a5527b21a8df6..9d759d883d03c52e46fe096aa4e5ea5c5d10eb77 100644 (file)
@@ -45,7 +45,7 @@ namespace System.Data.SqlClient
                KeepIdentity = 1,
                KeepNulls = 8,
                TableLock = 4,
-               UseInternalTranscation = 32
+               UseInternalTransaction = 32
        }
 
 }
diff --git a/mcs/class/System.Data/System.Data.SqlClient/SqlClientMetaDataCollectionNames.cs b/mcs/class/System.Data/System.Data.SqlClient/SqlClientMetaDataCollectionNames.cs
new file mode 100644 (file)
index 0000000..6703d2f
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// System.Data.SqlClient.SqlClientMetaDataCollectionNames.cs
+//
+// Author:
+//   Umadevi S <sumadevi@novell.com>
+//
+
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+namespace System.Data.SqlClient
+{
+       /// <summary>
+       /// Collection names
+       /// </summary>
+       //note : MS documentation has it as public sealed abstract.!
+       public sealed class SqlClientMetaDataCollectionNames {
+
+       public static readonly string Columns;
+       public static readonly string Databases;
+       public static readonly string ForeignKeys;
+       public static readonly string IndexColumns;
+       public static readonly string Indexes;
+       public static readonly string Parameters;
+       public static readonly string ProcedureColumns;
+       public static readonly string Procedures;
+       public static readonly string Tables;
+       public static readonly string UserDefinedTypes;
+       public static readonly string Users;
+       public static readonly string ViewColumns;
+       public static readonly string Views;
+               
+       
+       }
+
+}
+
+
+#endif
+
index 626fe1ca4b2a40d2553d37c8752ea5b5cee8aaf1..0ec66e6b634f311264aac24ec4e82368b97890f9 100644 (file)
@@ -39,6 +39,7 @@ namespace System.Data.SqlClient {
                #region Fields
                internal static SqlConnectionFactory Instance; // singleton
                 private static DbProviderFactory _providerFactory;
+               static readonly object lockobj = new object ();
                #endregion // Fields
 
                #region Constructors
@@ -58,17 +59,15 @@ namespace System.Data.SqlClient {
 
                #region Methods
 
-                // create singleton connection factory.
-                internal static DbConnectionFactory GetSingleton (DbProviderFactory pvdrFactory)
-                {
-                        lock (typeof (SqlConnectionFactory)) 
-                                {
-                                        if (Instance == null)
-                                                Instance = new SqlConnectionFactory (pvdrFactory);
-                                        return Instance;
-                                }
-                }
-                
+               // create singleton connection factory.
+               internal static DbConnectionFactory GetSingleton (DbProviderFactory pvdrFactory)
+               {
+                       lock (lockobj) {
+                               if (Instance == null)
+                                       Instance = new SqlConnectionFactory (pvdrFactory);
+                               return Instance;
+                       }
+               }
 
 
                [MonoTODO]
index a491b9ba49a7254af92ce655e3bd7a457951118e..6a34ed752fac3cbd08f2c7f5d3d94c4b0cc5d8a7 100644 (file)
@@ -37,12 +37,19 @@ using Mono.Data.Tds.Protocol;
 using System;
 using System.ComponentModel;
 using System.Data;
+using System.Data.Common;
 using System.Runtime.Serialization;
 using System.Text;
 
 namespace System.Data.SqlClient {
-       [Serializable]
-       public sealed class SqlException : SystemException
+       [SerializableAttribute()]
+
+       public sealed class SqlException
+#if NET_2_0
+        : DbException
+#else
+        : SystemException
+#endif //NET_1_1
        {
                #region Fields
 
index 9754d81af28544f29eb21193363376454125d52f..1d9f6eb420365c8d4decff40807e208793de5046 100644 (file)
@@ -35,6 +35,8 @@ namespace System.Data.SqlClient
        /// <summary>
        /// Describes the differnt transports that can be used between the client and the server.
        /// </summary>
+       [Flags]
+       [Serializable]
        public enum SqlNotificationTransports {
 
                Any = -1,
index 2ad33373f59e060356e67d1dd92fc6fe0dbb5e76..2682f612d3cd6d7887b41f9928958a1a496e4c53 100644 (file)
@@ -165,7 +165,7 @@ namespace System.Data.SqlClient {
                        set { container = value; }
                }
 
-#if NET_1_1    
+#if ONLY_1_0 || ONLY_1_1       
                [Browsable (false)]
                [DataSysDescription ("The parameter generic type.")]
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
@@ -185,7 +185,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("Input, output, or bidirectional parameter.")]
                [DefaultValue (ParameterDirection.Input)]
 #endif
@@ -223,7 +223,7 @@ namespace System.Data.SqlClient {
                        set { metaParameter.ParameterName = value; }
                }
 
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [Browsable (false)]
                [DataSysDescription ("a design-time property used for strongly typed code-generation.")]
                [DefaultValue (false)]
@@ -241,7 +241,7 @@ namespace System.Data.SqlClient {
 
                [Browsable (false)]
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("Offset in variable length data types.")]
                [DefaultValue (0)]
 #endif
@@ -257,7 +257,7 @@ namespace System.Data.SqlClient {
                        set { offset = value; }
                }
        
-#if NET_1_1    
+#if ONLY_1_0 || ONLY_1_1       
                [DataSysDescription ("Name of the parameter, like '@p1'")]
                [DefaultValue ("")]
 #endif
@@ -271,7 +271,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("For decimal, numeric, varnumeric DBTypes.")]
                [DefaultValue (0)]
 #endif
@@ -289,7 +289,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("For decimal, numeric, varnumeric DBTypes.")]
                [DefaultValue (0)]
 #endif
@@ -307,7 +307,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("Size of variable length data types (strings & arrays).")]
                [DefaultValue (0)]
 #endif
@@ -321,7 +321,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("When used by a DataAdapter.Update, the source column name that is used to find the DataSetColumn name in the ColumnMappings. This is to copy a value between the parameter and a datarow.")]
                [DefaultValue ("")]
 #endif
@@ -335,7 +335,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("When used by a DataAdapter.Update (UpdateCommand only), the version of the DataRow value that is used to update the data source.")]
                [DefaultValue (DataRowVersion.Current)]
 #endif
@@ -349,7 +349,7 @@ namespace System.Data.SqlClient {
                }
                
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("The parameter native type.")]
                [DefaultValue (SqlDbType.NVarChar)]
 #endif
@@ -366,7 +366,7 @@ namespace System.Data.SqlClient {
                }
 
                [DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
                [DataSysDescription ("Value of the parameter.")]
                [DefaultValue (null)]
 #endif
@@ -387,10 +387,10 @@ namespace System.Data.SqlClient {
                        }
                }
 
-#if NET_2_0
+//#if NET_2_0
 //             public SqlCompareOptions CompareInfo{
 
-#endif
+//#endif
 
                #endregion // Properties
 
index ca74bf393097909b687824f00921fcd5b94ddb72..436dfefb4fe2e51e02f0ff8e3cb9650e143f3fb0 100644 (file)
@@ -6,6 +6,7 @@
 //   Daniel Morgan (danmorg@sc.rr.com)
 //   Tim Coleman (tim@timcoleman.com)
 //   Diego Caravana (diego@toth.it)
+//   Umadevi S (sumadevi@novell.com)
 //
 // (C) Ximian, Inc 2002
 // Copyright (C) Tim Coleman, 2002
@@ -74,9 +75,12 @@ namespace System.Data.SqlClient {
                #endregion // Constructors
 
                #region Properties
-
+#if ONLY_1_1 || ONLY_1_0
                [Browsable (false)]
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]      
+#endif
+
+
                public 
 #if NET_2_0
                override
@@ -85,6 +89,34 @@ namespace System.Data.SqlClient {
                        get { return list.Count; }                        
                }
 
+#if NET_2_0
+               public override bool IsFixedSize {
+                       get {
+                               return list.IsFixedSize;
+                       }       
+               }
+
+               public override bool IsReadOnly {
+                       get {
+                               return list.IsReadOnly;
+                       }
+               }
+
+               public override bool IsSynchronized {
+                       get {
+                               return list.IsSynchronized;
+                       }
+               }
+
+               public override object SyncRoot {
+                       get {
+                               return list.SyncRoot;
+                       }
+               }
+       
+
+#endif
+
                [Browsable (false)]
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]      
                public 
@@ -125,6 +157,32 @@ namespace System.Data.SqlClient {
                        }                         
                }
 
+#if NET_2_0
+               protected  DbParameter GetParameter (int index)
+               {
+                       throw new NotImplementedException();
+               }
+
+                protected  void SetParameter (int index, DbParameter value)
+               {
+                        throw new NotImplementedException();
+                }
+               /*public IEnumerator GetEnumerator ()
+                        {
+                        throw new NotImplementedException();
+                }*/
+
+
+               protected override Type ItemType 
+               { 
+                       get {
+                               throw new NotImplementedException();
+                       }
+
+                }                                                          
+
+                                                                                                    
+#endif
                object IList.this [int index] {
                        get { return (SqlParameter) this [index]; }
                        set { this [index] = (SqlParameter) value; }
@@ -146,6 +204,8 @@ namespace System.Data.SqlClient {
                        get { return list.SyncRoot; }
                }
 
+
+
                internal TdsMetaParameterCollection MetaParameters {
                        get { return metaParameters; }
                }
@@ -233,6 +293,15 @@ namespace System.Data.SqlClient {
                                        return true;
                        return false;
                }
+#if NET_2_0
+
+               public bool Contains (SqlParameter value) {
+       
+                       return (this.IndexOf(value) != -1);
+               }       
+
+#endif // NET_2_0
+
 
                public 
 #if NET_2_0
@@ -276,6 +345,13 @@ namespace System.Data.SqlClient {
 
                }
 
+#if NET_2_0
+               public int IndexOf (SqlParameter value) {
+                               return list.IndexOf(value);
+               }
+               
+#endif // NET_2_0
+
                public 
 #if NET_2_0
                override
@@ -285,18 +361,41 @@ namespace System.Data.SqlClient {
                        list.Insert (index, value);
                }
 
+#if NET_2_0
+               public void Insert (int index, SqlParameter value) {
+                       list.Insert (index,value);
+               }
+
+#endif //NET_2_0       
+
                public 
 #if NET_2_0
                override
 #endif // NET_2_0
         void Remove (object value)
                {
+                       //TODO : this neds validation to check if the object is a 
+                       // sqlparameter.
+                                       
                        ((SqlParameter) value).Container = null;
                        
                        metaParameters.Remove (((SqlParameter) value).MetaParameter);
                        list.Remove (value);
                }
 
+
+#if NET_2_0
+               public void Remove (SqlParameter value) {
+       
+                       //both this and the above code are the same. but need to work with
+                       // 1.1!
+                       value.Container = null;
+                       metaParameters.Remove (value.MetaParameter);
+                       list.Remove (value);
+
+               }
+
+#endif //NET_2_0 
                public 
 #if NET_2_0
                override
@@ -317,18 +416,31 @@ namespace System.Data.SqlClient {
                        RemoveAt (IndexOf (parameterName));
                }
 
-                [MonoTODO]
-                protected 
 #if NET_2_0
-               override
-#endif // NET_2_0
-        Type ItemType
-                {
-                        get {throw new NotImplementedException ();}
-                        
-                }
-
-
+               public override void AddRange (Array values) {
+               
+                       if (values == null)
+                               throw new ArgumentNullException("The argument passed was null");
+                       foreach ( object value in values) {
+                          if (!(value is SqlParameter))
+                                       throw new InvalidCastException ("Element in the array parameter was not an SqlParameter.");                                                                     
+                          SqlParameter param = (SqlParameter) value;   
+                          if (param.Container != null)
+                                throw new ArgumentException ("An SqlParameter specified in the array is already added to this or another SqlParameterCollection.");
+                                                                                                    
+                        param.Container = this;
+                        list.Add (param);
+                        metaParameters.Add (param.MetaParameter);
+                        }
+       
+               }               
+
+               public void AddRange (SqlParameter[] values) {
+               
+                       this.AddRange(values);  
+               }
+#endif
+        
                #endregion // Methods   
        }
 }
index 7004d4ae07776126ab9a79a40b25c94970856eb8..5c6e1466f5b7a508962eca7a14e4ef52c3c2f25b 100755 (executable)
@@ -160,6 +160,7 @@ System.Data.Common/DbDataRecord.cs
 System.Data.Common/DbDataSourceEnumerator.cs
 System.Data.Common/DbDataUpdatableRecord.cs
 System.Data.Common/DbEnumerator.cs
+System.Data.Common/DbException.cs
 System.Data.Common/DbParameterCollection.cs
 System.Data.Common/DbParameter.cs
 System.Data.Common/DbProviderConfigurationHandler.cs
@@ -305,6 +306,7 @@ System.Data.SqlClient/SqlNotificationSource.cs
 System.Data.SqlClient/ISqlNotificationReceiver.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
index 96adace64594ecd61905976fdfda9d217939d7b2..d60f34b98b440c11df437e93d778b620c73d40ae 100644 (file)
@@ -1,3 +1,13 @@
+2005-05-25  Sureshkumar T  <tsureshkumar@novell.com>
+
+       * DataTable.cs: Reworked DataTable.LoadDataRow method after
+       regressions caused by Index redesign.
+       * DataRow.cs: Load : reworked.
+
+2005-05-25 Konstantin Triger <kostat@mainsoft.com>
+
+       * ISafeDataRecord.cs: Added GetDateTimeSafe method, the interface was made derived from IDataRecord
+
 2005-05-22 Konstantin Triger <kostat@mainsoft.com>
 
        * DataTable.cs, DataColumn.cs: in continuation to the previous fix - moving the common logic to 1 function and throwing the correct exception in any flow
index 93f144bb878f5e89c00a57efa6331aa0f4de36ef..9a22f2c25a90474d63d5f42e145521586ed18797 100644 (file)
@@ -590,14 +590,14 @@ namespace System.Data {
                         _table.ChangingDataRow (this, DataRowAction.Commit);
                        CheckChildRows(DataRowAction.Commit);
                        switch (RowState) {
-                               case DataRowState.Unchanged:
+                        case DataRowState.Unchanged:
                                        return;
                        case DataRowState.Added:
                        case DataRowState.Modified:
-                                       if (Original >= 0) {
-                                               Table.RecordCache.DisposeRecord(Original);
-                                       }
-                                       Original = Current;
+                                if (Original >= 0) {
+                                        Table.RecordCache.DisposeRecord(Original);
+                                }
+                                Original = Current;
                                break;
                        case DataRowState.Deleted:
                                _table.Rows.RemoveInternal (this);
@@ -1566,57 +1566,65 @@ namespace System.Data {
                 ///    mentioned in the DataTable.Load (IDataReader, LoadOption) method.
                 /// </summary>
                 [MonoTODO ("Raise necessary Events")]
-                internal void Load (object [] values, LoadOption loadOption, bool is_new)
+                internal void Load (object [] values, LoadOption loadOption)
                 {
+                        Index index = null;
                         DataRowAction action = DataRowAction.Change;
 
-                        int temp = Table.RecordCache.NewRecord ();
-                        for (int i = 0 ; i < Table.Columns.Count; i++)
-                                SetValue (i, values [i], temp);
-
-                        if (is_new) { // new row
-                                if (HasVersion (DataRowVersion.Proposed) || RowState == DataRowState.Detached)
-                                        Proposed = temp;
-                                else
-                                        Current = temp;
-                                return;
-                        }
+                        int temp = -1;
 
                         if (loadOption == LoadOption.OverwriteChanges 
                             || (loadOption == LoadOption.PreserveChanges
                                 && RowState == DataRowState.Unchanged)) {
+                               temp = Table.CreateRecord (values);
+                                if (HasVersion (DataRowVersion.Original) && Current != Original)
+                                        Table.RecordCache.DisposeRecord (Original);
                                 Original = temp;
-                                if (HasVersion (DataRowVersion.Proposed))
-                                        Proposed = temp;
-                                else
-                                        Current = temp;
+                                // update the pk index
+                                index = Table.GetIndex(Table.PrimaryKey,null,DataViewRowState.None,null,false);
+                                if (index != null)
+                                        index.Update (this, temp);
+
+                                if (HasVersion (DataRowVersion.Current))
+                                        Table.RecordCache.DisposeRecord (Current);
+                                Current = temp;
                                 action = DataRowAction.ChangeCurrentAndOriginal;
                                 return;
                         }
 
                         if (loadOption == LoadOption.PreserveChanges) {
-                                if (RowState != DataRowState.Deleted) {
-                                        Original = temp;
-                                        action   = DataRowAction.ChangeOriginal;
-                                }
+                               if (RowState == DataRowState.Deleted)
+                                       return;
+                               temp = Table.CreateRecord (values);
+                               if (HasVersion (DataRowVersion.Original) && Current != Original)
+                                       Table.RecordCache.DisposeRecord (Original);
+                               Original = temp;
+                               action   = DataRowAction.ChangeOriginal;
                                 return;
                         }
                                 
-                        bool not_used = true;
                         // Upsert
                         if (RowState != DataRowState.Deleted) {
-                                int index = HasVersion (DataRowVersion.Proposed) ? _proposed : _current;
-                                if (Table.CompareRecords (index, temp) != 0) {
-                                        if (HasVersion (DataRowVersion.Proposed))
-                                                Proposed = temp;
-                                        else
-                                                Current = temp;
-                                        not_used = false;
-                                }
+                                int rindex = HasVersion (DataRowVersion.Proposed) ? Proposed : Current;
+                               temp = Table.CreateRecord (values);
+                               if (Table.CompareRecords (rindex, temp) != 0) {
+                                        if (HasVersion (DataRowVersion.Proposed)) {
+                                                Table.RecordCache.DisposeRecord (Proposed);
+                                                Proposed = -1;
+                                        }
+                                        
+                                        // update the pk index
+                                        index = Table.GetIndex(Table.PrimaryKey,null,DataViewRowState.None,null,false);
+                                        if (index != null)
+                                                index.Update (this, temp);
+
+                                        if (Original != Current)
+                                                Table.RecordCache.DisposeRecord (Current);
+                                        Current = temp;
+                                } else
+                                       Table.RecordCache.DisposeRecord (temp);
                         }
-                                
-                        if (not_used)
-                                Table.RecordCache.DisposeRecord (temp);
+
                 }
 #endif // NET_2_0
        }
index cda3b5f369e486509695f8154401c83538118edf..62801ef9531b595a6535510417d1e35ff37393d0 100644 (file)
@@ -1199,31 +1199,45 @@ namespace System.Data {
                public DataRow LoadDataRow (object [] values, LoadOption loadOption)\r
                {\r
                         DataRow row  = null;\r
-                        bool new_row = false;\r
                         \r
                         // Find Data DataRow\r
                         if (this.PrimaryKey.Length > 0) {\r
-                               int newRecord = CreateRecord(values);\r
-                               try {\r
-                                       Index index = GetIndex(PrimaryKey,null,DataViewRowState.OriginalRows,null,false);\r
-                                       int existingRecord = index.Find(newRecord);\r
+                                Index index = FindIndex (PrimaryKey,null,DataViewRowState.OriginalRows,null);\r
+                               if (index == null)\r
+                                       index = new Index (new Key(this, PrimaryKey,null,DataViewRowState.OriginalRows,null));\r
+\r
+                               object [] keys = new object [PrimaryKey.Length];\r
+                               for (int i=0; i < PrimaryKey.Length; i++)\r
+                                       keys [i] = values [PrimaryKey [i].Ordinal];\r
+\r
+                               int existingRecord = index.Find(keys);\r
+                               if (existingRecord >= 0)\r
+                                       row = RecordCache[existingRecord];\r
+                               else {                                           \r
+                                       existingRecord = _primaryKeyConstraint.Index.Find(keys);\r
                                        if (existingRecord >= 0)\r
                                                row = RecordCache[existingRecord];\r
-                                       else {\r
-                                               existingRecord = _primaryKeyConstraint.Index.Find(newRecord);\r
-                                               if (existingRecord >= 0)\r
-                                                       row = RecordCache[existingRecord];\r
-                                       }\r
-                               }\r
-                               finally {\r
-                                       RecordCache.DisposeRecord(newRecord);\r
                                }\r
                         }\r
                                 \r
                         // If not found, add new row\r
-                        if (row == null) {\r
-                                row = this.NewRow ();\r
-                                new_row = true;\r
+                        if (row == null \r
+                            || (row.RowState == DataRowState.Deleted\r
+                                && loadOption == LoadOption.Upsert)) {\r
+                                row = NewNotInitializedRow ();\r
+                                row.ImportRecord (CreateRecord(values));\r
+\r
+                                if (EnforceConstraints) \r
+                                        // we have to check that the new row doesn't colide with existing row\r
+                                        Rows.ValidateDataRowInternal(row); // this adds to index ;-)\r
+                                     \r
+                                Rows.AddInternal(row);         \r
+       \r
+                                if (loadOption == LoadOption.OverwriteChanges ||\r
+                                    loadOption == LoadOption.PreserveChanges) {\r
+                                        row.AcceptChanges ();\r
+                                }\r
+                                return row;\r
                         }\r
 \r
                         bool deleted = row.RowState == DataRowState.Deleted;\r
@@ -1231,20 +1245,7 @@ namespace System.Data {
                         if (deleted && loadOption == LoadOption.OverwriteChanges)\r
                                 row.RejectChanges ();                        \r
 \r
-                        row.Load (values, loadOption, new_row);\r
-\r
-                        if (deleted && loadOption == LoadOption.Upsert) {\r
-                                row = this.NewRow ();\r
-                                row.Load (values, loadOption, new_row = true);\r
-                        }\r
-\r
-                        if (new_row) {\r
-                                this.Rows.Add (row);\r
-                                if (loadOption == LoadOption.OverwriteChanges ||\r
-                                    loadOption == LoadOption.PreserveChanges) {\r
-                                        row.AcceptChanges ();\r
-                                }\r
-                        }\r
+                        row.Load (values, loadOption);\r
 \r
                         return row;\r
                }\r
index 6cf35dc19381312dbdf7d03af1da31e1373fa407..a76969b4b7e62ee76d802f0e0b83b8423eea6362 100644 (file)
@@ -1,15 +1,15 @@
-//\r
-// System.Data.ISafeDataRecord\r
-//\r
-// Author:\r
-//   Boris Kirzner (borisk@mainsoft.com)\r
-//\r
-using System;\r
-\r
-namespace System.Data\r
-{\r
-       internal interface ISafeDataRecord\r
-       {\r
+//
+// System.Data.ISafeDataRecord
+//
+// Author:
+//   Boris Kirzner (borisk@mainsoft.com)
+//
+using System;
+
+namespace System.Data
+{
+       internal interface ISafeDataRecord : IDataRecord
+       {
                bool GetBooleanSafe(int i);
 
                byte GetByteSafe(int i);
@@ -24,7 +24,7 @@ namespace System.Data
 
                //string GetDataTypeName(int i);
 
-               //DateTime GetDateTime(int i);
+               DateTime GetDateTimeSafe(int i);
 
                decimal GetDecimalSafe(int i);
 
@@ -58,6 +58,6 @@ namespace System.Data
 
                //object this[string name]{get;}
                
-               //object this[int i]{get;}\r
-       }\r
-}\r
+               //object this[int i]{get;}
+       }
+}
index c5af598e8c721ccde571f8a51a3a86bba479a386..547dcabf4cd40e005de1f5cf497efa9c9ea6b0b6 100644 (file)
@@ -1,3 +1,4 @@
+System.Data.Test.Utils/DataProvider.cs
 System.Data.SqlTypes/SqlBinaryTest.cs
 System.Data.SqlTypes/SqlBooleanTest.cs
 System.Data.SqlTypes/SqlByteTest.cs
@@ -14,6 +15,7 @@ System.Data.SqlTypes/SqlStringTest.cs
 System.Xml/XmlDataDocumentTest.cs
 System.Xml/XmlDataDocumentTest2.cs
 System.Data/ConstraintCollectionTest.cs
+System.Data/ConstraintCollectionTest2.cs
 System.Data/ConstraintTest.cs
 System.Data/DataColumnCollectionTest.cs
 System.Data/DataColumnTest.cs
@@ -59,20 +61,6 @@ System.Data.Tests.Mainsoft/GHTUtils/GHTValueGen.cs
 System.Data.Tests.Mainsoft/GHTUtils/HttpClientBase.cs
 System.Data.Tests.Mainsoft/GHTUtils/ObjectTester.cs
 System.Data.Tests.Mainsoft/GHTUtils/XmlUtils.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_add_CollectionChanged_C.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_CanRemove_C.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_Clear.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_CollectionChanged.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_Contains_S.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_CopyTo_AI.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_Count.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_GetEnumerator.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_IndexOf_C.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_IndexOf_S.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_IsReadOnly.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_IsSynchronized.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_Remove_C.cs
-System.Data.Tests.Mainsoft/System.Data/ConstraintCollection/ConstraintCollection_Remove_S.cs
 System.Data.Tests.Mainsoft/System.Data/ConstraintException/ConstraintException_Generate.cs
 System.Data.Tests.Mainsoft/System.Data/DataColumn/DataColumn_AllowDBNull.cs
 System.Data.Tests.Mainsoft/System.Data/DataColumn/DataColumn_AutoIncrement.cs
index fc7299b4dda0d669728119405196c4e8f6b1a007..ffab7db575c390635c38159a58df3cdd4f2f32ea 100644 (file)
@@ -1,3 +1,6 @@
+2005-05-26  Eyal Alaluf <eyala@mainsoft.com>
+       * Added System.Data.Test.Utils - Keeps utilities comon for all tests
+
 2005-02-15  Sureshkumar T  <tsureshkumar@novell.com>
 
        * MySqlTestBed.cs: fix for namespace collision MonoTests.System &
diff --git a/mcs/class/System.Data/Test/System.Data.Test.Utils/ChangeLog b/mcs/class/System.Data/Test/System.Data.Test.Utils/ChangeLog
new file mode 100644 (file)
index 0000000..1976974
--- /dev/null
@@ -0,0 +1,2 @@
+2005-05-26  Eyal Alaluf <eyala@mainsoft.com>
+       * DataProvider.cs: Utiltilty class for creating different types of DataTables.
diff --git a/mcs/class/System.Data/Test/System.Data.Test.Utils/DataProvider.cs b/mcs/class/System.Data/Test/System.Data.Test.Utils/DataProvider.cs
new file mode 100644 (file)
index 0000000..ee513b3
--- /dev/null
@@ -0,0 +1,193 @@
+// Authors:
+//   Rafael Mizrahi   <rafim@mainsoft.com>
+//   Erez Lotan       <erezl@mainsoft.com>
+//   Oren Gurfinkel   <oreng@mainsoft.com>
+//   Ofer Borstein
+// 
+// Copyright (c) 2004 Mainsoft Co.
+// 
+// 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.Data;
+using System.Data.OleDb ;
+using System.IO;
+using System.Collections;
+
+// Provide All Data required by the diffderent tests e.g.DataTable, DataRow ...
+namespace MonoTests.System.Data.Test.Utils
+{
+       public class DataProvider
+       {
+               #region Constatntas
+
+               #region Private
+               //A string containing all printable charachters.
+               private const string SAMPLE_STRING = "abcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()_+-=[]\\|;:,./<>? ";
+               #endregion
+
+               #endregion
+
+               public static DataTable CreateChildDataTable()
+               {
+                       DataTable dtChild = new DataTable("Child");
+                       dtChild.Columns.Add("ParentId",typeof(int));
+                       dtChild.Columns.Add("ChildId",typeof(int));
+                       dtChild.Columns.Add("String1",typeof(string));
+                       dtChild.Columns.Add("String2",typeof(string));
+                       dtChild.Columns.Add("ChildDateTime",typeof(DateTime));
+                       dtChild.Columns.Add("ChildDouble",typeof(double));
+
+                       dtChild.Rows.Add(new object[] {1,1,"1-String1","1-String2",new DateTime(2000,1,1,0,0,0,0),1.534});
+                       dtChild.Rows.Add(new object[] {1,2,"2-String1","2-String2",DateTime.MaxValue ,-1.534});
+                       dtChild.Rows.Add(new object[] {1,3,"3-String1","3-String2",DateTime.MinValue,double.MaxValue/10000});
+                       dtChild.Rows.Add(new object[] {2,1,"1-String1","1-String2",new DateTime(1973,6,20,0,0,0,0),double.MinValue*10000});
+                       dtChild.Rows.Add(new object[] {2,2,"2-String1","2-String2",new DateTime(2008,12,1,13,59,59,59),0.45});
+                       dtChild.Rows.Add(new object[] {2,3,"3-String1","3-String2",new DateTime(2003,1,1,1,1,1,1),0.55});
+                       dtChild.Rows.Add(new object[] {5,1,"1-String1","1-String2",new DateTime(2002,1,1,1,1,1,1),0});
+                       dtChild.Rows.Add(new object[] {5,2,"2-String1","2-String2",new DateTime(2001,1,1,1,1,1,1),10});
+                       dtChild.Rows.Add(new object[] {5,3,"3-String1","3-String2",new DateTime(2000,1,1,1,1,1,1),20});
+                       dtChild.Rows.Add(new object[] {6,1,"1-String1","1-String2",new DateTime(2000,1,1,1,1,1,0),25});
+                       dtChild.Rows.Add(new object[] {6,2,"2-String1","2-String2",new DateTime(2000,1,1,1,1,0,0),30});
+                       dtChild.Rows.Add(new object[] {6,3,"3-String1","3-String2",new DateTime(2000,1,1,0,0,0,0),35});
+                       dtChild.AcceptChanges();
+                       return dtChild;
+               }
+
+               public static DataTable CreateParentDataTable()
+               {
+                       DataTable dtParent = new DataTable("Parent");
+
+                       dtParent.Columns.Add("ParentId",typeof(int));
+                       dtParent.Columns.Add("String1",typeof(string));
+                       dtParent.Columns.Add("String2",typeof(string));
+
+                       dtParent.Columns.Add("ParentDateTime",typeof(DateTime));
+                       dtParent.Columns.Add("ParentDouble",typeof(double));
+                       dtParent.Columns.Add("ParentBool",typeof(bool));
+
+                       dtParent.Rows.Add(new object[] {1,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534,true});
+                       dtParent.Rows.Add(new object[] {2,"2-String1","2-String2",new DateTime(2004,1,1,0,0,0,1),-1.534,true});
+                       dtParent.Rows.Add(new object[] {3,"3-String1","3-String2",new DateTime(2003,1,1,0,0,1,0),double.MinValue*10000,false});
+                       dtParent.Rows.Add(new object[] {4,"4-String1","4-String2",new DateTime(2002,1,1,0,1,0,0),double.MaxValue/10000,true});
+                       dtParent.Rows.Add(new object[] {5,"5-String1","5-String2",new DateTime(2001,1,1,1,0,0,0),0.755,true});
+                       dtParent.Rows.Add(new object[] {6,"6-String1","6-String2",new DateTime(2000,1,1,0,0,0,0),0.001,false});
+                       dtParent.AcceptChanges();
+                       return dtParent;
+               }
+
+               //This method replace the DataSet GetXmlSchema method
+               //used to compare DataSets
+               //Created by Ofer (13-Nov-03) becuase DataSet GetXmlSchema method is not yet implemented in java 
+               public static string GetDSSchema(DataSet ds)
+               {
+                       string strSchema = "DataSet Name=" + ds.DataSetName + "\n"; 
+                       //Get relations
+                       foreach (DataRelation dl in ds.Relations)
+                       {
+                               strSchema += "\t" + "DataRelation Name=" + dl.RelationName ;
+                               foreach (DataColumn dc in dl.ParentColumns)
+                                       strSchema += "\t" + "ParentColummn=" +  dc.ColumnName ;
+                               foreach (DataColumn dc in dl.ChildColumns )
+                                       strSchema += "\t" + "ChildColumn=" +  dc.ColumnName ;
+                               strSchema += "\n";
+                       }
+                       //Get teables
+                       foreach (DataTable dt in ds.Tables)
+                       {
+                               strSchema += "Table=" + dt.TableName + "\t";
+                               //Get Constraints  
+                               strSchema += "Constraints =";
+                               foreach (Constraint cs in dt.Constraints )
+                                       strSchema += cs.GetType().Name + ", ";
+                               strSchema += "\n";
+                               //Get PrimaryKey Columns
+                               strSchema += "PrimaryKey Columns index:=";
+                               foreach (DataColumn dc in dt.PrimaryKey)
+                                       strSchema += dc.Ordinal + ", ";
+                               strSchema += "\n";
+                               //Get Columns
+                               foreach (DataColumn dc in dt.Columns)
+                               {
+                                       strSchema += "ColumnName=" + dc.ColumnName + "\t" +
+                                               "ColumnType=" + dc.DataType.Name + "\t" +
+                                               "AllowDBNull=" + dc.AllowDBNull.ToString() + "\t" +
+                                               "DefaultValue=" + dc.DefaultValue.ToString() + "\t" +
+                                               "Unique=" + dc.Unique.ToString() + "\t" +
+                                               "ReadOnly=" + dc.ReadOnly.ToString() + "\n" ;
+                               }
+                               strSchema += "\n";
+                       }
+                       return strSchema;
+               }
+
+               public static DataTable CreateUniqueConstraint()
+               {
+                       DataTable dt = DataProvider.CreateParentDataTable();
+                       return CreateUniqueConstraint(dt);
+               }
+
+               public static DataTable CreateUniqueConstraint(DataTable dt)
+               {
+                       Constraint con = new UniqueConstraint(dt.Columns["ParentId"]);
+                       dt.Constraints.Add(con);
+                       return dt;
+               }
+
+               public static void TryToBreakUniqueConstraint()
+               {
+                       //Create the constraint
+                       DataTable dt =  CreateUniqueConstraint();
+                       //Try to violate the constraint
+
+                       DataRow dr1 = dt.NewRow();
+                       dr1[0] = 1;
+                       dt.Rows.Add(dr1);
+               }
+
+               public static DataSet CreateForigenConstraint()
+               {
+                       DataTable parent = DataProvider.CreateParentDataTable();
+                       DataTable child = DataProvider.CreateChildDataTable(); 
+                       DataSet ds = new DataSet();
+                       ds.Tables.Add(parent); 
+                       ds.Tables.Add(child);
+
+                       Constraint con1 = new ForeignKeyConstraint(parent.Columns[0],child.Columns[0]);
+                       child.Constraints.Add(con1);
+
+                       return ds;
+               }
+
+               public static void TryToBreakForigenConstraint()
+               {
+                       DataSet ds = CreateForigenConstraint();
+                       //Code to break:
+
+                       DataRow dr =  ds.Tables[1].NewRow();
+                       dr[0]=7;
+                       ds.Tables[1].Rows.Add(dr);
+
+                       ds.AcceptChanges();
+                       ds.EnforceConstraints=true;
+               }
+       } 
+}
index a23b3842c2385b7f20a050b23205f74169fb593b..d39456b4821d4137fe3ccb10867652a3ab2e24bc 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-29  Eyal Alaluf <eyala@mainsoft.com>
+       * ConstraintCollectionTest2.cs - New file containing Mainsoft ConstraintCollection tests.
+
+2005-05-25  Sureshkumar T  <tsureshkumar@novell.com>
+
+       * DataTableLoadRowTest.cs: Added  additional cases for
+       AutoIncrementTest to gauge any side effect with auto
+       incrementing in case of upsert.
+
 2005-05-20  Sureshkumar T  <tsureshkumar@novell.com>
 
        * DataRowCollectionTest.cs: Added a test to check Rows.Add (values
diff --git a/mcs/class/System.Data/Test/System.Data/ConstraintCollectionTest2.cs b/mcs/class/System.Data/Test/System.Data/ConstraintCollectionTest2.cs
new file mode 100644 (file)
index 0000000..3731b64
--- /dev/null
@@ -0,0 +1,280 @@
+// Authors:
+//   Rafael Mizrahi   <rafim@mainsoft.com>
+//   Erez Lotan       <erezl@mainsoft.com>
+//   Oren Gurfinkel   <oreng@mainsoft.com>
+//   Ofer Borstein
+// 
+// Copyright (c) 2004 Mainsoft Co.
+// 
+// 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 NUnit.Framework;
+using MonoTests.System.Data.Test.Utils;
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Data;
+
+namespace MonoTests.System.Data
+{
+       [TestFixture] public class ConstraintCollectionTest2
+       {
+               private bool CollectionChangedFlag = false;
+
+               [Test] public void CanRemove_ParentForeign()
+               {
+                       DataSet ds = DataProvider.CreateForigenConstraint();
+                       Assert.AreEqual(false, ds.Tables["parent"].Constraints.CanRemove(ds.Tables["parent"].Constraints[0]), "CN1");
+               }
+
+               [Test] public void CanRemove_ChildForeign()
+               {
+                       DataSet ds = DataProvider.CreateForigenConstraint();
+                       Assert.AreEqual(true, ds.Tables["child"].Constraints.CanRemove(ds.Tables["child"].Constraints[0]), "CN2");
+               }
+
+               [Test] public void CanRemove_ParentAndChildForeign()
+               {
+                       DataSet ds = DataProvider.CreateForigenConstraint();
+                       //remove the forigen and ask about the unique
+                       ds.Tables["child"].Constraints.Remove(ds.Tables["child"].Constraints[0]);
+                       Assert.AreEqual(true, ds.Tables["parent"].Constraints.CanRemove(ds.Tables["parent"].Constraints[0]), "CN3");
+               }
+
+               // FIXME. This test isn't complete.
+               public void CanRemove_Unique()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       //remove the forigen and ask about the unique
+                       dt.Constraints.Remove(dt.Constraints[0]);
+                       Assert.AreEqual(true, dt.Constraints.CanRemove(dt.Constraints[0]), "CN4");
+               }
+
+               [Test] public void Clear_Foreign()
+               {
+                       DataSet ds = DataProvider.CreateForigenConstraint();
+                       foreach(DataTable dt in ds.Tables)
+                       {
+                               dt.Constraints.Clear();
+                       }
+                       Assert.AreEqual(0, ds.Tables[0].Constraints.Count, "CN5");
+                       Assert.AreEqual(0, ds.Tables[0].Constraints.Count, "CN6");
+
+               }
+
+               [Test] public void Clear_Unique()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       int rowsCount = dt.Rows.Count;
+                       dt.Constraints.Clear();
+                       DataRow dr = dt.NewRow();
+                       dr[0] = 1;
+                       dt.Rows.Add(dr);
+                       Assert.AreEqual(rowsCount+1, dt.Rows.Count, "CN7"); //Just checking that no expection ocuured
+               }
+
+               [Test] public void CollectionChanged()
+               {
+                       DataTable dt = DataProvider.CreateParentDataTable();
+                       CollectionChangedFlag = false;
+                       dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);     
+                       dt = DataProvider.CreateUniqueConstraint(dt);
+                       Assert.AreEqual(true, CollectionChangedFlag, "CN8"); 
+               }
+
+               [Test] public void Contains_ByName()
+               {
+                       DataSet ds =  DataProvider.CreateForigenConstraint();
+        
+                       //changing the constraints's name
+
+                       ds.Tables["child"].Constraints[0].ConstraintName = "name1";
+                       ds.Tables["parent"].Constraints[0].ConstraintName = "name2";
+
+
+                       Assert.AreEqual(true, ds.Tables["child"].Constraints.Contains("name1"), "CN9");
+                       Assert.AreEqual(false, ds.Tables["child"].Constraints.Contains("xxx"), "CN10");
+                       Assert.AreEqual(true, ds.Tables["parent"].Constraints.Contains("name2"), "CN11");
+                       Assert.AreEqual(false, ds.Tables["parent"].Constraints.Contains("xxx"), "CN12");
+
+               }
+
+               [Test] public void CopyTo()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints.Add("constraint2",dt.Columns["String1"],true);
+
+                       object[] ar = new object[2];
+
+                       dt.Constraints.CopyTo(ar,0);
+                       Assert.AreEqual(2, ar.Length, "CN13");
+               }
+
+               [Test] public void Count()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       Assert.AreEqual(1, dt.Constraints.Count, "CN14");
+
+                       //Add
+
+                       dt.Constraints.Add("constraint2",dt.Columns["String1"],false);
+                       Assert.AreEqual(2, dt.Constraints.Count, "CN15");
+
+                       //Remove
+
+                       dt.Constraints.Remove("constraint2");
+                       Assert.AreEqual(1, dt.Constraints.Count, "CN16");
+               }
+
+               [Test] public void GetEnumerator()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints.Add("constraint2",dt.Columns["String1"],false);
+
+                       int counter=0;
+                       IEnumerator myEnumerator = dt.Constraints.GetEnumerator();
+                       while (myEnumerator.MoveNext())
+                       {
+                               counter++;
+
+                       }
+                       Assert.AreEqual(2, counter, "CN17");
+               }
+
+               [Test] public void IndexOf()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       Assert.AreEqual(0, dt.Constraints.IndexOf(dt.Constraints[0]), "CN18");
+
+                       //Add new constraint
+                       Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
+
+                       dt.Constraints.Add(con);
+                       Assert.AreEqual(1, dt.Constraints.IndexOf(con), "CN19");
+
+                       //Remove it and try to look for it 
+
+                       dt.Constraints.Remove(con);
+                       Assert.AreEqual(-1, dt.Constraints.IndexOf(con), "CN20");
+
+               }
+
+               [Test] public void IndexOf_ByName()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints[0].ConstraintName="name1";
+                       Assert.AreEqual(0, dt.Constraints.IndexOf("name1"), "CN21");
+
+                       //Add new constraint
+                       Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
+                       con.ConstraintName="name2";
+
+                       dt.Constraints.Add(con);
+                       Assert.AreEqual(1, dt.Constraints.IndexOf("name2"), "CN22");
+
+                       //Remove it and try to look for it 
+
+                       dt.Constraints.Remove(con);
+                       Assert.AreEqual(-1, dt.Constraints.IndexOf("name2"), "CN23");
+
+               }
+
+               [Test] public void IsReadOnly()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       Assert.AreEqual(false, dt.Constraints.IsReadOnly, "CN24"); 
+               }
+
+               [Test] public void IsSynchronized()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       Assert.AreEqual(false, dt.Constraints.IsSynchronized, "CN25");
+        
+                       ConstraintCollection col = (ConstraintCollection)dt.Constraints.SyncRoot;
+
+       //              lock(dt.Constraints.SyncRoot)
+       //              {
+                       //      Assert.AreEqual(true, col.IsSynchronized, "CN26");
+
+                       //}
+               }
+
+               [Test] public void Remove()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints.Remove(dt.Constraints[0]);
+                       Assert.AreEqual(0, dt.Constraints.Count, "CN27");
+               }
+
+               [Test] public void Remove_ByNameSimple()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints[0].ConstraintName = "constraint1";
+                       dt.Constraints.Remove("constraint1");
+                       Assert.AreEqual(0, dt.Constraints.Count, "CN28");
+               }
+
+               [Test] public void Remove_ByNameWithAdd()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       dt.Constraints[0].ConstraintName = "constraint1";
+                       Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
+                       dt.Constraints.Add(con);
+                       dt.Constraints.Remove(con);
+
+                       Assert.AreEqual(1, dt.Constraints.Count, "CN29");
+                       Assert.AreEqual("constraint1", dt.Constraints[0].ConstraintName, "CN30");
+               }
+
+               [Test] public void Remove_CollectionChangedEvent()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       CollectionChangedFlag = false;
+                       dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
+                       dt.Constraints.Remove(dt.Constraints[0]);
+                       Assert.AreEqual(true, CollectionChangedFlag, "CN31"); //Checking that event has raised
+               }
+
+               [Test] public void Remove_ByNameCollectionChangedEvent()
+               {
+                       DataTable dt = DataProvider.CreateUniqueConstraint();
+                       CollectionChangedFlag = false;
+                       dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
+                       dt.Constraints.Remove("constraint1");
+                       Assert.AreEqual(true, CollectionChangedFlag, "CN32"); //Checking that event has raised
+
+               }
+
+               [Test] public void add_CollectionChanged()
+               {
+                       DataTable dt = DataProvider.CreateParentDataTable();
+                       CollectionChangedFlag = false;
+                       dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);     
+                       dt = DataProvider.CreateUniqueConstraint(dt);
+                       Assert.AreEqual(true, CollectionChangedFlag, "CN33"); 
+               }
+
+               private void Constraints_CollectionChangedHandler(object sender, CollectionChangeEventArgs e)
+               {
+                       CollectionChangedFlag = true;
+               }
+       }
+}
index 3b17ae8a890a875da87afb9b68d6a6b636bf6cb7..0dda37c530bf3191c080714f6eaa5dce7b741ed8 100755 (executable)
@@ -271,6 +271,16 @@ namespace MonoTests.System.Data.SqlClient
                         Assert.AreEqual (25, dt.Rows [3] [0], "#2 current should be ai");
                         Assert.AreEqual (25, dt.Rows [3] [0, DataRowVersion.Original], "#3 original should be ai");
 
+                       dt.LoadDataRow (new object [] {25, 20, "mono test"}, LoadOption.Upsert);
+                       dt.LoadDataRow (new object [] {25, 20, "mono test 2"}, LoadOption.Upsert);
+                       dt.LoadDataRow (new object [] {null, 20, "mono test aaa"}, LoadOption.Upsert);
+                       
+                       Assert.AreEqual (5, dt.Rows.Count, "#4 has not added a new row");
+                       Assert.AreEqual (25, dt.Rows [3] [0], "#5 current should be ai");
+                       Assert.AreEqual (25, dt.Rows [3] [0, DataRowVersion.Original], "#6 original should be ai");
+
+                       Assert.AreEqual (30, dt.Rows [4] [0], "#7 current should be ai");
+
                 }
         }
 }
index fddd383fd640316ff5c05fd0859f572717c5bc85..c2c5edfe8167488d7ff03c2faf665565df70a63e 100644 (file)
@@ -1,4 +1,26 @@
-2005-05-24 Kornél Pál <kornelpal@hotmail.com>
+2005-05-28  Kornél Pál <kornelpal@hotmail.com>
+
+       * ComIStreamMarshaler.cs: GC.SuppressFinalize(this) is not called in
+         destructors. Some methods renamed. Removed unnecessary variables.
+
+2005-05-25  Jonathan Gilbert  <logic@deltaq.org>
+
+       * Image.cs: Added retrieveGDIPalette () and storeGDIPalette ()
+         and modified the Palette property to call them. This non-
+         persistent behaviour was discovered by trial and error with
+         Microsoft's implementation. In fact, the Palette property
+         does not behave like a property at all! It is the only way an
+         instance of System.Drawing.Imaging.ColorPalette can be created,
+         and it reflects a backing store that is only updated when the
+         property 'set' method is called. Also updated Clone () since
+         the palette is no longer cached at image load time.
+       * Image.cs: Added IsIndexedPixelFormat () in the same vein as
+         Image::IsAlphaPixelFormat and Image::IsCanonicalPixelFormat.
+         As such a function is not listed in MSDN nor given in
+         Microsoft's implementation, I have made it a private function
+         within the class that uses it.
+
+2005-05-24  Kornél Pál <kornelpal@hotmail.com>
 
        * Graphics.cs: Revised DrawString methods
 
@@ -7,7 +29,7 @@
        * Graphics.cs: Fixed bug #74762, DrawString was crashing on s.Length
          if s was null.
 
-2005-05-20 Kornél Pál <kornelpal@hotmail.com>
+2005-05-20  Kornél Pál <kornelpal@hotmail.com>
 
        * Image.cs: Uses MemoryStream wrapping on all platforms if needed
        * gdipFunctions.cs: Modified conditional compilation syntax
index 3a350e6818e2cd6e436aec37f5ccdbca9bbaebb6..519266d4ae73b2726ecbfebe4d7540b4a8bea485 100644 (file)
@@ -174,14 +174,15 @@ namespace System.Drawing
 
                        ~ManagedToNativeWrapper()
                        {
-                               Dispose();
+                               Dispose(false);
                        }
 
-                       private void Dispose()
+                       private void Dispose(bool disposing)
                        {
                                Marshal.FreeHGlobal(comInterface);
                                gcHandle.Free();
-                               GC.SuppressFinalize(this);
+                               if (disposing)
+                                       GC.SuppressFinalize(this);
                        }
 
                        internal static IStream GetUnderlyingInterface(IntPtr comInterface, bool outParam)
@@ -199,7 +200,7 @@ namespace System.Drawing
                                        return null;
                        }
 
-                       internal static IntPtr CreateInterface(IStream managedInterface)
+                       internal static IntPtr GetInterface(IStream managedInterface)
                        {
                                IntPtr comInterface;
 
@@ -213,14 +214,14 @@ namespace System.Drawing
                                return comInterface;
                        }
 
-                       internal static void DisposeInterface(IntPtr comInterface)
+                       internal static void ReleaseInterface(IntPtr comInterface)
                        {
                                if (comInterface != IntPtr.Zero)
                                {
                                        IntPtr vtable = Marshal.ReadIntPtr(comInterface);
 
                                        if (vtable == comVtable)
-                                               ManagedToNativeWrapper.Release(comInterface);
+                                               Release(comInterface);
                                        else
                                        {
                                                ReleaseSlot releaseSlot = (ReleaseSlot)Marshal.PtrToStructure((IntPtr)((long)vtable + (long)(IntPtr.Size * 2)), typeof(ReleaseSlot));
@@ -298,7 +299,7 @@ namespace System.Drawing
                                        lock (thisObject)
                                        {
                                                if ((thisObject.refCount != 0) && (--thisObject.refCount == 0))
-                                                       thisObject.Dispose();
+                                                       thisObject.Dispose(true);
 
                                                return thisObject.refCount;
                                        }
@@ -489,14 +490,10 @@ namespace System.Drawing
                                {
 #endif
                                        IStream newInterface;
-                                       IntPtr newWrapper;
 
                                        ppstm = IntPtr.Zero;
-
                                        GetObject(@this).managedInterface.Clone(out newInterface);
-
-                                       newWrapper = ManagedToNativeWrapper.CreateInterface(newInterface);
-                                       ppstm = newWrapper;
+                                       ppstm = ManagedToNativeWrapper.GetInterface(newInterface);
                                        return S_OK;
 #if MAP_EX_TO_HR
                                }
@@ -517,23 +514,22 @@ namespace System.Drawing
 
                        private NativeToManagedWrapper(IntPtr comInterface, bool outParam)
                        {
-                               IntPtr comVtable = Marshal.ReadIntPtr(comInterface);
-
                                this.comInterface = comInterface;
-                               managedVtable = (IStreamVtbl)Marshal.PtrToStructure(comVtable, typeof(IStreamVtbl));
+                               managedVtable = (IStreamVtbl)Marshal.PtrToStructure(Marshal.ReadIntPtr(comInterface), typeof(IStreamVtbl));
                                if (!outParam)
                                        managedVtable.AddRef(comInterface);
                        }
 
                        ~NativeToManagedWrapper()
                        {
-                               Dispose();
+                               Dispose(false);
                        }
 
-                       private void Dispose()
+                       private void Dispose(bool disposing)
                        {
                                managedVtable.Release(comInterface);
-                               GC.SuppressFinalize(this);
+                               if (disposing)
+                                       GC.SuppressFinalize(this);
                        }
 
                        internal static IntPtr GetUnderlyingInterface(IStream managedInterface)
@@ -549,7 +545,7 @@ namespace System.Drawing
                                        return IntPtr.Zero;
                        }
 
-                       internal static IStream CreateInterface(IntPtr comInterface, bool outParam)
+                       internal static IStream GetInterface(IntPtr comInterface, bool outParam)
                        {
                                IStream managedInterface;
 
@@ -563,75 +559,75 @@ namespace System.Drawing
                                return managedInterface;
                        }
 
-                       internal static void DisposeInterface(IStream managedInterface)
+                       internal static void ReleaseInterface(IStream managedInterface)
                        {
-                               if (managedInterface != null && managedInterface is NativeToManagedWrapper)
-                                       ((NativeToManagedWrapper)managedInterface).Dispose();
+                               if (managedInterface is NativeToManagedWrapper)
+                                       ((NativeToManagedWrapper)managedInterface).Dispose(true);
                        }
 
                        // Mono does not implement Marshal.ThrowExceptionForHR
-                       private static void CheckHResult(int result)
+                       private static void ThrowExceptionForHR(int result)
                        {
-                               if (result != S_OK)
+                               if (result < 0)
                                        throw new COMException(null, result);
                        }
 
                        public void Read(byte[] pv, int cb, IntPtr pcbRead)
                        {
-                               CheckHResult(managedVtable.Read(comInterface, pv, cb, pcbRead));
+                               ThrowExceptionForHR(managedVtable.Read(comInterface, pv, cb, pcbRead));
                        }
 
                        public void Write(byte[] pv, int cb, IntPtr pcbWritten)
                        {
-                               CheckHResult(managedVtable.Write(comInterface, pv, cb, pcbWritten));
+                               ThrowExceptionForHR(managedVtable.Write(comInterface, pv, cb, pcbWritten));
                        }
 
                        public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition)
                        {
-                               CheckHResult(managedVtable.Seek(comInterface, dlibMove, dwOrigin, plibNewPosition));
+                               ThrowExceptionForHR(managedVtable.Seek(comInterface, dlibMove, dwOrigin, plibNewPosition));
                        }
 
                        public void SetSize(long libNewSize)
                        {
-                               CheckHResult(managedVtable.SetSize(comInterface, libNewSize));
+                               ThrowExceptionForHR(managedVtable.SetSize(comInterface, libNewSize));
                        }
 
                        public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
                        {
-                               CheckHResult(managedVtable.CopyTo(comInterface, pstm, cb, pcbRead, pcbWritten));
+                               ThrowExceptionForHR(managedVtable.CopyTo(comInterface, pstm, cb, pcbRead, pcbWritten));
                        }
 
                        public void Commit(int grfCommitFlags)
                        {
-                               CheckHResult(managedVtable.Commit(comInterface, grfCommitFlags));
+                               ThrowExceptionForHR(managedVtable.Commit(comInterface, grfCommitFlags));
                        }
 
                        public void Revert()
                        {
-                               CheckHResult(managedVtable.Revert(comInterface));
+                               ThrowExceptionForHR(managedVtable.Revert(comInterface));
                        }
 
                        public void LockRegion(long libOffset, long cb, int dwLockType)
                        {
-                               CheckHResult(managedVtable.LockRegion(comInterface, libOffset, cb, dwLockType));
+                               ThrowExceptionForHR(managedVtable.LockRegion(comInterface, libOffset, cb, dwLockType));
                        }
 
                        public void UnlockRegion(long libOffset, long cb, int dwLockType)
                        {
-                               CheckHResult(managedVtable.UnlockRegion(comInterface, libOffset, cb, dwLockType));
+                               ThrowExceptionForHR(managedVtable.UnlockRegion(comInterface, libOffset, cb, dwLockType));
                        }
 
                        public void Stat(out STATSTG pstatstg, int grfStatFlag)
                        {
-                               CheckHResult(managedVtable.Stat(comInterface, out pstatstg, grfStatFlag));
+                               ThrowExceptionForHR(managedVtable.Stat(comInterface, out pstatstg, grfStatFlag));
                        }
 
                        public void Clone(out IStream ppstm)
                        {
                                IntPtr newInterface;
 
-                               CheckHResult(managedVtable.Clone(comInterface, out newInterface));
-                               ppstm = NativeToManagedWrapper.CreateInterface(newInterface, true);
+                               ThrowExceptionForHR(managedVtable.Clone(comInterface, out newInterface));
+                               ppstm = NativeToManagedWrapper.GetInterface(newInterface, true);
                        }
                }
 
@@ -649,27 +645,27 @@ namespace System.Drawing
                public IntPtr MarshalManagedToNative(object managedObj)
                {
 #if RECURSIVE_WRAPPING
-                       managedObj = NativeToManagedWrapper.CreateInterface(ManagedToNativeWrapper.CreateInterface((IStream)managedObj), true);
+                       managedObj = NativeToManagedWrapper.GetInterface(ManagedToNativeWrapper.GetInterface((IStream)managedObj), true);
 #endif
-                       return ManagedToNativeWrapper.CreateInterface((IStream)managedObj);
+                       return ManagedToNativeWrapper.GetInterface((IStream)managedObj);
                }
 
                public void CleanUpNativeData(IntPtr pNativeData)
                {
-                       ManagedToNativeWrapper.DisposeInterface(pNativeData);
+                       ManagedToNativeWrapper.ReleaseInterface(pNativeData);
                }
 
                public object MarshalNativeToManaged(IntPtr pNativeData)
                {
 #if RECURSIVE_WRAPPING
-                       pNativeData = ManagedToNativeWrapper.CreateInterface(NativeToManagedWrapper.CreateInterface(pNativeData, true));
+                       pNativeData = ManagedToNativeWrapper.GetInterface(NativeToManagedWrapper.GetInterface(pNativeData, true));
 #endif
-                       return NativeToManagedWrapper.CreateInterface(pNativeData, false);
+                       return NativeToManagedWrapper.GetInterface(pNativeData, false);
                }
 
                public void CleanUpManagedData(object managedObj)
                {
-                       NativeToManagedWrapper.DisposeInterface((IStream)managedObj);
+                       NativeToManagedWrapper.ReleaseInterface((IStream)managedObj);
                }
 
                public int GetNativeDataSize()
index 4e772f5d7c014a8f96b8c1556d260799ff03ad5c..54432fc76dbfa0d1e917df1dc699001ce66c332f 100644 (file)
@@ -75,6 +75,12 @@ public abstract class Image : MarshalByRefObject, IDisposable , ICloneable, ISer
                        }
                }
        }
+
+       private static bool IsIndexedPixelFormat(PixelFormat pixfmt)
+       {
+               return ((pixfmt & PixelFormat.Indexed) != 0);
+       }
+
        
        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
        {
@@ -526,43 +532,57 @@ public abstract class Image : MarshalByRefObject, IDisposable , ICloneable, ISer
        [Browsable (false)]
        public ColorPalette Palette {
                get {                                                   
-                       int size = 0;
-                       IntPtr palbuff;
-                       
-                       Status status = GDIPlus.GdipGetImagePaletteSize (nativeObject, out  size);
-                       GDIPlus.CheckStatus (status);                   
-                                               
-                       palbuff = Marshal.AllocHGlobal (size);
-                       
-                       try {                           
-                               status = GDIPlus.GdipGetImagePalette (nativeObject, palbuff, size);
-                               GDIPlus.CheckStatus (status);
-                                               
-                               ColorPalette colpal = new ColorPalette ();
-                               colpal.setFromGDIPalette (palbuff);
-                               
-                               return colpal;
-                       }
-                       
-                       finally {
-                               Marshal.FreeHGlobal (palbuff);
-                       }
-                       
+                       return retrieveGDIPalette();
                }
                set {
-                       IntPtr palbuff = value.getGDIPalette ();
-                       
-                       try {
-                               Status status = GDIPlus.GdipSetImagePalette (nativeObject, palbuff);
-                               GDIPlus.CheckStatus (status);   
-                       }
-                       
-                       finally {
-                               Marshal.FreeHGlobal (palbuff);
-                       }
-                       
+                       storeGDIPalette(value);
+               }
+       }
+
+       internal ColorPalette retrieveGDIPalette()
+       {
+               ColorPalette ret = new ColorPalette();
+               if (!IsIndexedPixelFormat (PixelFormat)) {
+                       return ret;
+               }
+               Status st;
+               int bytes;
+
+               st = GDIPlus.GdipGetImagePaletteSize (nativeObject, out bytes);
+               GDIPlus.CheckStatus (st);
+               IntPtr palette_data = Marshal.AllocHGlobal (bytes);
+               try {
+                       st = GDIPlus.GdipGetImagePalette (nativeObject, palette_data, bytes);
+                       GDIPlus.CheckStatus (st);
+                       ret.setFromGDIPalette (palette_data);
+                       return ret;
+               }
+
+               finally {
+                       Marshal.FreeHGlobal (palette_data);
                }
        }
+
+       internal void storeGDIPalette(ColorPalette palette)
+       {
+               if (palette == null) {
+                       throw new ArgumentNullException("palette");
+               }
+               IntPtr palette_data = palette.getGDIPalette();
+               if (palette_data == IntPtr.Zero) {
+                       return;
+               }
+
+               try {
+                       Status st = GDIPlus.GdipSetImagePalette (nativeObject, palette_data);
+                       GDIPlus.CheckStatus (st);
+               }
+
+               finally {
+                       Marshal.FreeHGlobal(palette_data);
+               }
+       }
+
                
        public SizeF PhysicalDimension {
                get {
index 10fe7602f9ed14c8763b3538472d3f78a456c808..936746c857c9797cfc2b9afc4fa494f4ad2ce187 100644 (file)
@@ -47,7 +47,7 @@ namespace System.Web.Services.Configuration
        
        class WSConfig
        {
-               static WSConfig instance;
+               volatile static WSConfig instance;
                WSProtocol protocols;
                string wsdlHelpPage;
                string filePath;
@@ -55,6 +55,7 @@ namespace System.Web.Services.Configuration
                ArrayList extensionImporterTypes = new ArrayList();
                ArrayList extensionReflectorTypes = new ArrayList();
                ArrayList formatExtensionTypes = new ArrayList();
+               static readonly object lockobj = new object ();
                
                public WSConfig (WSConfig parent, object context)
                {
@@ -142,7 +143,7 @@ namespace System.Web.Services.Configuration
                                if (instance != null)
                                        return instance;
 
-                               lock (typeof (WSConfig)) {
+                               lock (lockobj) {
                                        if (instance != null)
                                                return instance;
 
index 85cddbcc6f1c8c15da21ffd80c913f75e3966e0a..70ba59587aa6cf80b36deb24737d188719a01905 100644 (file)
@@ -1,3 +1,13 @@
+2005-05-26  Lluis Sanchez Gual <lluis@novell.com>
+
+       * System.Web.dll.sources: Added new files:
+               System.Web.UI.WebControls/SiteMapNodeItem.cs
+               System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs
+               System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs
+               System.Web.UI.WebControls/SiteMapPath.cs
+               System.Web.UI/NonVisualControlAttribute.cs
+               System.Web/StaticSiteMapProvider.cs
+
 2005-05-21  Sebastien Pouliot  <sebastien@ximian.com>
 
        * System.Web_test.dll.sources: Added tests for FormsAuthentication.
index a7fe0060fb728e806e2eaae2d68945c8aa0cd879..3bb18e1337974bcd8e5b37f0c88a01d9c8e0456e 100644 (file)
@@ -45,14 +45,15 @@ namespace System.Web.Configuration
                static WebDefaultConfig config;
                static string machineConfigPath;
                const BindingFlags privStatic = BindingFlags.NonPublic | BindingFlags.Static;
-                       
+               static readonly object lockobj = new object ();
+               
                private WebConfigurationSettings ()
                {
                }
 
                public static void Init ()
                {
-                       lock (typeof (WebConfigurationSettings)) {
+                       lock (lockobj) {
                                if (config != null)
                                        return;
 
@@ -88,7 +89,7 @@ namespace System.Web.Configuration
 
                public static string MachineConfigPath {
                        get {
-                               lock (typeof (WebConfigurationSettings)) {
+                               lock (lockobj) {
                                        if (machineConfigPath != null)
                                                return machineConfigPath;
 
index 33fb18a6d7e6bcb6f4684d3a0f005b22022de1c9..99a0f536a52541cf1d7fe543dd5d63b15631fd4d 100644 (file)
@@ -38,9 +38,10 @@ namespace System.Web.Configuration
 {
        class WebControlsConfig
        {
-               static WebControlsConfig instance;
+               volatile static WebControlsConfig instance;
                string scriptsVDir;
                string configFilePath;
+               static readonly object lockobj = new object ();
                
                public WebControlsConfig (WebControlsConfig parent, object context)
                {
@@ -87,7 +88,7 @@ namespace System.Web.Configuration
                                if (instance != null)
                                        return instance;
 
-                               lock (typeof (WebControlsConfig)) {
+                               lock (lockobj) {
                                        if (instance != null)
                                                return instance;
 
index e5c1b1dd9166d443ed6bdee8dc17a26e8f17723c..f9b520340f8311b32ca2751fb7d1693bc233e9fd 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-27 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * RemoteStateServer.cs:
+       * HttpSessionState.cs:
+       * SessionSQLServerHandler.cs:
+       * SessionInProcHandler.cs:
+       * SessionStateServerHandler.cs: remove abandoned sessions in the 
+       ReleseRequest state. Fixes bug #75051.
+
 2005-04-20 Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * SessionSQLServerHandler.cs:
index 03fcacbb118a33b1361e171c4f17f940ae179f35..901c923401c59ee981a9deae1ece6a5af87d4fa3 100644 (file)
@@ -46,7 +46,7 @@ public sealed class HttpSessionState : ICollection, IEnumerable
        private bool _isCookieless;
        private SessionStateMode _mode;
        private bool _isReadonly;
-       private bool _abandoned;
+       internal bool _abandoned;
 
        internal HttpSessionState (string id,
                                   SessionDictionary dict,
index a35b84e198e008916ed7b5ebdbe40d5478b549b5..2eccf50af8fbe892bdd8797ddcb1bccd43d63711 100644 (file)
@@ -70,6 +70,11 @@ namespace System.Web.SessionState {
                        item.Touch ();
                        return item;
                }
+
+               internal void Remove (string id)
+               {
+                       table.Remove (id);
+               }
        }
 }
 
index e0a327f822811ab385c71a2188de3fc282113677..800a5ca70e2305bc50cdc9487499b50efcd3a03a 100644 (file)
@@ -50,7 +50,14 @@ namespace System.Web.SessionState
                        this.config = config;
                }
 
-               public void UpdateHandler (HttpContext context, SessionStateModule module) { }
+               public void UpdateHandler (HttpContext context, SessionStateModule module)
+               {
+                       HttpSessionState session = context.Session;
+                       if (session == null || session.IsReadOnly || !session._abandoned)
+                               return;
+
+                       HttpRuntime.Cache.Remove ("@@@InProc@" + session.SessionID);
+               }
 
                public HttpSessionState UpdateContext (HttpContext context, SessionStateModule module,
                                                        bool required, bool read_only, ref bool isNew)
index 7b6ba2a4c4baace3e38c3bc6acad1a30aeb05c9f..46abec917c3fef24d4d00f73860d4c680d5e2e89 100644 (file)
@@ -81,13 +81,17 @@ namespace System.Web.SessionState {
 
                public void UpdateHandler (HttpContext context, SessionStateModule module)
                {
-                       if (context.Session == null || context.Session.IsReadOnly)
+                       HttpSessionState session = context.Session;
+                       if (session == null || session.IsReadOnly)
                                return;
 
-                       string id = context.Session.SessionID;
-                       SessionDictionary dict = context.Session.SessionDictionary;
-
-                       UpdateSession (id, dict);
+                       string id = session.SessionID;
+                       if (!session._abandoned) {
+                               SessionDictionary dict = session.SessionDictionary;
+                               UpdateSession (id, dict);
+                       } else {
+                               DeleteSession (id);
+                       }
                }
 
                public HttpSessionState UpdateContext (HttpContext context, SessionStateModule module,
@@ -218,6 +222,18 @@ namespace System.Web.SessionState {
                        command.ExecuteNonQuery ();
                }
 
+               private void DeleteSession (string id)
+               {
+                       IDbCommand command = cnc.CreateCommand ();
+                       IDataParameterCollection param;
+
+                       string update = "DELETE FROM ASPStateTempSessions WHERE SessionId = :SessionID";
+                       command.CommandText = update;
+                       param = command.Parameters;
+                       param.Add (CreateParam (command, DbType.String, ":SessionID", id));
+                       command.ExecuteNonQuery ();
+               }
+
                private IDataParameter CreateParam (IDbCommand command, DbType type,
                                string name, object value)
                {
index deda72d2b8e653cd60e6b0a48a94635e5f835928..936879dce6c1de7a40c2c9ab682a4603572fa3fc 100644 (file)
@@ -60,13 +60,18 @@ namespace System.Web.SessionState {
 
                public void UpdateHandler (HttpContext context, SessionStateModule module)
                {
-                       if (context.Session == null || context.Session.IsReadOnly)
+                       HttpSessionState session = context.Session;
+                       if (session == null || session.IsReadOnly)
                                return;
                        
-                       string id = context.Session.SessionID;
-                       SessionDictionary dict = context.Session.SessionDictionary;
-                       HttpStaticObjectsCollection sobjs = context.Session.StaticObjects;
-                       state_server.Update (id, dict.ToByteArray (), sobjs.ToByteArray ());
+                       string id = session.SessionID;
+                       if (!session._abandoned) {
+                               SessionDictionary dict = session.SessionDictionary;
+                               HttpStaticObjectsCollection sobjs = session.StaticObjects;
+                               state_server.Update (id, dict.ToByteArray (), sobjs.ToByteArray ());
+                       } else {
+                               state_server.Remove (id);
+                       }
                }
 
                public HttpSessionState UpdateContext (HttpContext context, SessionStateModule module,
index fc53cf9d78d1f893a76ef88dea9a8df148f57ea3..b158cd40218e9cbe3d9881113dd8c347d2696c3f 100644 (file)
@@ -1,3 +1,36 @@
+2005-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * PagedDataSource.cs: patch by Suresh Kumar that makes PageCount return
+       1 when there's a datasource and 0 pages. Closes bug #73864.
+
+2005-05-26  Lluis Sanchez Gual <lluis@novell.com>
+
+       * DataListItem.cs:
+       * GridViewRow.cs:
+       * DataGridItem.cs:
+       * RepeaterItem.cs:
+       * FormView.cs:
+       * MenuItemTemplateContainer.cs:
+       * DetailsView.cs: Track changes in the IDataItemContainer interface.
+       
+       * CommandField.cs: Added CausesValidation property. Set that
+       property value to all buttons of the field.
+       
+       * SqlDataSourceView.cs:
+       * CollectionDataSource.cs:
+       * XmlDataSourceView.cs: Properly initialize the base class.
+       
+       * SiteMapDataSource.cs:
+       * SiteMapHierarchicalDataSourceView.cs:
+       * SiteMapNodeItem.cs:
+       * SiteMapDataSourceView.cs:
+       * SiteMapPath.cs: Mostly implemented.
+       
+       * HierarchicalDataBoundControl.cs: Always bind the control when the
+       page is loaded for the first time.
+       
+       * TreeView.cs: Properly bind the control when loaded from a callback.
+
 2005-05-21  Ben Maurer  <bmaurer@ximian.com>
 
        * BaseDataList.cs: Caption is in 1.1 too, though not
index 8b22f01dbb5f85e3b50abe10b729ae2072604b9c..6819a7c94f21e4cfffc5b4c9b0f51d10e6504cf0 100644 (file)
@@ -56,7 +56,7 @@ namespace System.Web.UI.WebControls
                
                public DataSourceView GetView (string viewName)
                {
-                       return new CollectionDataSourceView (collection);
+                       return new CollectionDataSourceView (this, viewName, collection);
                }
                
                public ICollection GetViewNames ()
@@ -69,7 +69,8 @@ namespace System.Web.UI.WebControls
        {
                IEnumerable collection;
 
-               public CollectionDataSourceView (IEnumerable collection)
+               public CollectionDataSourceView (IDataSource owner, string viewName, IEnumerable collection)
+               : base (owner, viewName)
                {
                        this.collection = collection;
                }
index 3fa83323ff13d7c8b58da5f42761edd71465349e..6169c6c666374c8b69a0d7ef6e16a3b56302c878 100644 (file)
@@ -71,6 +71,19 @@ namespace System.Web.UI.WebControls {
                        }
                }
 
+           [DefaultValueAttribute (true)]\r
+               public override bool CausesValidation {
+                       get {
+                               object ob = ViewState ["CausesValidation"];
+                               if (ob != null) return (bool) ob;
+                               return true;
+                       }
+                       set {
+                               ViewState ["CausesValidation"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
                [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
                [WebCategoryAttribute ("Appearance")]
                [UrlPropertyAttribute]
@@ -329,39 +342,46 @@ namespace System.Web.UI.WebControls {
                        if (cellType == DataControlCellType.DataCell)
                        {
                                if ((rowState & DataControlRowState.Edit) != 0) {
-                                       cell.Controls.Add (new DataControlButton (Control, UpdateText, UpdateImageUrl, DataControlCommands.UpdateCommandName, index, false));
+                                       cell.Controls.Add (CreateButton (UpdateText, UpdateImageUrl, DataControlCommands.UpdateCommandName, index));
                                        if (ShowCancelButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, CancelText, CancelImageUrl, DataControlCommands.CancelCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (CancelText, CancelImageUrl, DataControlCommands.CancelCommandName, index));
                                        }
                                } else if ((rowState & DataControlRowState.Insert) != 0) {
-                                       cell.Controls.Add (new DataControlButton (Control, InsertText, InsertImageUrl, DataControlCommands.InsertCommandName, index, false));
+                                       cell.Controls.Add (CreateButton (InsertText, InsertImageUrl, DataControlCommands.InsertCommandName, index));
                                        if (ShowCancelButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, CancelText, CancelImageUrl, DataControlCommands.CancelCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (CancelText, CancelImageUrl, DataControlCommands.CancelCommandName, index));
                                        }
                                } else {
                                        if (ShowEditButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, EditText, EditImageUrl, DataControlCommands.EditCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (EditText, EditImageUrl, DataControlCommands.EditCommandName, index));
                                        }
                                        if (ShowDeleteButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, DeleteText, DeleteImageUrl, DataControlCommands.DeleteCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (DeleteText, DeleteImageUrl, DataControlCommands.DeleteCommandName, index));
                                        }
                                        if (ShowSelectButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, SelectText, SelectImageUrl, DataControlCommands.SelectCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (SelectText, SelectImageUrl, DataControlCommands.SelectCommandName, index));
                                        }
                                        if (ShowInsertButton) {
                                                AddSeparator (cell);
-                                               cell.Controls.Add (new DataControlButton (Control, NewText, NewImageUrl, DataControlCommands.NewCommandName, index, false));
+                                               cell.Controls.Add (CreateButton (NewText, NewImageUrl, DataControlCommands.NewCommandName, index));
                                        }
                                }
                        } else
                                base.InitializeCell (cell, cellType, rowState, rowIndex);
                }
                
+               DataControlButton CreateButton (string text, string image, string command, string arg)
+               {
+                       DataControlButton c = new DataControlButton (Control, text, image, command, arg, false);
+                       c.CausesValidation = CausesValidation;
+                       return c;
+               }
+               
                void AddSeparator (DataControlFieldCell cell)
                {
                        if (cell.Controls.Count > 0) {
@@ -400,6 +420,10 @@ namespace System.Web.UI.WebControls {
                        field.UpdateImageUrl = UpdateImageUrl;
                        field.UpdateText = UpdateText;
                }
+               
+               public override void ValidateSupportsCallback ()
+               {
+               }
        }
 }
 #endif
index a56266e016e44ccfb11384ad53f14945d17d7959..a173348bd3ce9c3e207206df64554b9f4eb2a1bd 100644 (file)
@@ -89,7 +89,17 @@ namespace System.Web.UI.WebControls
                        {\r
                                return itemType;\r
                        }\r
-               }\r
+               }
+               \r
+#if NET_2_0
+               int IDataItemContainer.DataItemIndex {
+                       get { return dataSetIndex; }
+               }
+
+               int IDataItemContainer.DisplayIndex {
+                       get { return itemIndex; }
+               }
+#endif\r
 \r
                protected override bool OnBubbleEvent(object source, EventArgs e)\r
                {\r
index f8235ae57cac684cebd3c3a76e4265508a9ab2b4..0e0b861ab0e045cd4bce94c7e1c4addacfa14dba 100644 (file)
@@ -85,6 +85,16 @@ namespace System.Web.UI.WebControls
                        }\r
                }\r
 \r
+#if NET_2_0
+               int IDataItemContainer.DataItemIndex {
+                       get { return itemIndex; }
+               }
+
+               int IDataItemContainer.DisplayIndex {
+                       get { return itemIndex; }
+               }
+#endif
+\r
                public virtual void RenderItem (HtmlTextWriter writer, bool extractRows, bool tableLayout)\r
                {\r
                        if (extractRows){\r
index e496a708628146c0f9c5d91d6826ca6d86477a4c..5c3e9d5df9744d2ec342a20b7c5f9e965cd7e3b2 100644 (file)
@@ -872,6 +872,10 @@ namespace System.Web.UI.WebControls
                        get { return PageIndex; }
                }               
        
+               int IDataItemContainer.DisplayIndex {
+                       get { return PageIndex; }
+               }               
+       
                public virtual bool IsBindableType (Type type)
                {
                        return type.IsPrimitive || type == typeof(string) || type == typeof(DateTime) || type == typeof(Guid);
index 1202ba40dc91ed911b2abf828b38637fb02d32eb..400c4dfb7ca8a8a6d201692314d83456950ea334 100644 (file)
@@ -45,8 +45,8 @@ namespace System.Web.UI.WebControls
 {\r
        public class FontUnitConverter : TypeConverter\r
        {\r
-               static StandardValuesCollection valuesCollection;\r
-               static string creatingValues = "creating value collection";\r
+               static volatile StandardValuesCollection valuesCollection;\r
+               static readonly object lockobj = new object ();\r
 \r
                public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\r
                {\r
@@ -120,7 +120,7 @@ namespace System.Web.UI.WebControls
                        if (valuesCollection != null)\r
                                return valuesCollection;\r
 \r
-                       lock (creatingValues) {\r
+                       lock (lockobj) {\r
                                if (valuesCollection != null)\r
                                        return valuesCollection;\r
 \r
index 4672393ca4d6da3bb9e28d8f380378c13eadb082..1ec70fa6ee7ba254e5c959f7aaa6f2353a802698 100644 (file)
@@ -759,6 +759,10 @@ namespace System.Web.UI.WebControls
                        get { return PageIndex; }
                }               
        
+               int IDataItemContainer.DisplayIndex {
+                       get { return PageIndex; }
+               }               
+       
                public virtual bool IsBindableType (Type type)
                {
                        return type.IsPrimitive || type == typeof(string) || type == typeof(DateTime) || type == typeof(Guid);
index 5eca4d1b4daba726f3a797ee62765a17778f5d13..9a783eabead4654e3f6a561f6139ef660c1e5c5c 100644 (file)
@@ -83,13 +83,13 @@ namespace System.Web.UI.WebControls
                        get { return DataItem; }
                }
                
-/*             int IDataItemContainer.DataItemIndex {
+               int IDataItemContainer.DataItemIndex {
                        get { return DataItemIndex; }
                }
                
                int IDataItemContainer.DisplayIndex {
                        get { return RowIndex; }
-               }*/     
+               }
                
                protected override bool OnBubbleEvent (object source, EventArgs e)
                {
index c0f58fcd8dec586848ea8c809f86998a60ed8c2e..a04c1bfc41b2c3130e5b71ef18199d848b491dea 100644 (file)
@@ -86,6 +86,9 @@ namespace System.Web.UI.WebControls
 
                protected override void OnLoad (EventArgs e)
                {
+                       if (IsBoundUsingDataSourceID && (!Page.IsPostBack || !EnableViewState))
+                               RequiresDataBinding = true;
+               
                        IHierarchicalDataSource ds = GetDataSource ();
                        if (ds != null && DataSourceID != "")
                                ds.DataSourceChanged += new EventHandler (OnDataSourceChanged);
index e0cd20763f34bfba433b3c4393957b214c96490f..c3a81e1713beb8ff05a672e0c73e4e490c3a5be6 100644 (file)
@@ -64,7 +64,15 @@ namespace System.Web.UI.WebControls
                        set { dataItem = value; }
                }
                
-               public object ItemIndex {
+               public int ItemIndex {
+                       get { return index; }
+               }
+               
+               int IDataItemContainer.DataItemIndex {
+                       get { return index; }
+               }
+
+               int IDataItemContainer.DisplayIndex {
                        get { return index; }
                }
        }
index d6357e1f4859ffbc3a747ac4d265130fbc39dca5..5e9cfc6a6d38e20a5b1be3ba44918fb38de5868f 100644 (file)
@@ -278,8 +278,8 @@ namespace System.Web.UI.WebControls
                                        if(!IsPagingEnabled)
                                                return 1;
                                         
-                                       int total = DataSourceCount;
-                                       return (total + pageSize - 1)/pageSize;
+                                       int total = (DataSourceCount + pageSize - 1) / pageSize;
+                                       return (total > 0 ? total : 1);
                                }
                                return 0;
                        }
index b853f4840c178b703f7b68f180a843a1b9451995..12f11aabaf36ee0ad71a2797a7c3a53c32dacd7d 100644 (file)
@@ -74,6 +74,16 @@ namespace System.Web.UI.WebControls
                        }\r
                }\r
 \r
+#if NET_2_0\r
+               int IDataItemContainer.DataItemIndex {
+                       get { return itemIndex; }
+               }
+               
+               int IDataItemContainer.DisplayIndex {
+                       get { return itemIndex; }
+               }
+#endif
+
                public virtual ListItemType ItemType\r
                {\r
                        get\r
index 269cb62006e8d97cf39d8e862f814ac04950f06b..7c0e6f83045b5868ed1c545a3fb307f6d7160cf7 100644 (file)
@@ -33,6 +33,7 @@
 using System;
 using System.Collections;
 using System.Web.UI;
+using System.Web.Util;
 using System.ComponentModel;
 
 namespace System.Web.UI.WebControls
@@ -42,35 +43,157 @@ namespace System.Web.UI.WebControls
        [ParseChildrenAttribute (true)]
        public class SiteMapDataSource : HierarchicalDataSourceControl, IDataSource, IListSource
        {
-               [MonoTODO]
-               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
-               [BrowsableAttribute (false)]
-               public DataSourceView GetView (string viewName)
-               {
-                       throw new NotImplementedException ();
-               }
+               static string[] emptyNames = new string[] { string.Empty };
+               
+               SiteMapProvider provider;
                
-               [MonoTODO]
-               public ICollection GetViewNames ()
+               public virtual ICollection GetViewNames ()
                {
-                       throw new NotImplementedException ();
+                       return emptyNames;
                }
                
-               [MonoTODO]
                public IList GetList ()
                {
-                       throw new NotImplementedException ();
+                       return ListSourceHelper.GetList (this);
                }
                
-               [MonoTODO]
+           [BrowsableAttribute (false)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]\r
                public bool ContainsListCollection {
-                       get { throw new NotImplementedException (); }
+                       get { return ListSourceHelper.ContainsListCollection (this); }
+               }
+               
+               event EventHandler IDataSource.DataSourceChanged {
+                       add { ((IHierarchicalDataSource)this).DataSourceChanged += value; }
+                       remove { ((IHierarchicalDataSource)this).DataSourceChanged -= value; }
+               }
+               
+           [BrowsableAttribute (false)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]\r
+               public SiteMapProvider Provider {
+                       get {
+                               if (provider == null) {
+                                       if (this.SiteMapProvider.Length == 0) {
+                                               provider = SiteMap.Provider;
+                                               if (provider == null)
+                                                       throw new HttpException ("There is no default provider configured for the site.");
+                                       } else {
+                                               provider = SiteMap.Providers [this.SiteMapProvider];
+                                               if (provider == null)
+                                                       throw new HttpException ("SiteMap provider '" + this.SiteMapProvider + "' not found.");
+                                       }
+                               }
+                               return provider;
+                       }
+                       set {
+                               provider = value;
+                               OnDataSourceChanged (EventArgs.Empty);
+                       }
+               }
+               
+           [DefaultValueAttribute ("")]\r
+               public string SiteMapProvider {
+                       get {
+                               object o = ViewState ["SiteMapProvider"];
+                               if (o != null) return (string) o;
+                               else return string.Empty;
+                       }
+                       set {
+                               ViewState ["SiteMapProvider"] = value;
+                               OnDataSourceChanged (EventArgs.Empty);
+                       }
+               }
+               
+           [DefaultValueAttribute ("")]\r
+           [EditorAttribute ("System.Web.UI.Design.UrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
+           [UrlPropertyAttribute]\r
+               public string StartingNodeUrl {
+                       get {
+                               object o = ViewState ["StartingNodeUrl"];
+                               if (o != null) return (string) o;
+                               else return string.Empty;
+                       }
+                       set {
+                               ViewState ["StartingNodeUrl"] = value;
+                               OnDataSourceChanged (EventArgs.Empty);
+                       }
+               }
+               
+           [DefaultValueAttribute (false)]\r
+               public bool StartFromCurrentNode {
+                       get {
+                               object o = ViewState ["StartFromCurrentNode"];
+                               if (o != null) return (bool) o;
+                               else return false;
+                       }
+                       set {
+                               ViewState ["StartFromCurrentNode"] = value;
+                               OnDataSourceChanged (EventArgs.Empty);
+                       }
                }
                
-               [MonoTODO]
-               public event EventHandler DataSourceChanged {
-                       add { throw new NotImplementedException (); }
-                       remove { throw new NotImplementedException (); }
+           [DefaultValueAttribute (true)]\r
+               public bool ShowStartingNode {
+                       get {
+                               object o = ViewState ["ShowStartingNode"];
+                               if (o != null) return (bool) o;
+                               else return true;
+                       }
+                       set {
+                               ViewState ["ShowStartingNode"] = value;
+                               OnDataSourceChanged (EventArgs.Empty);
+                       }
+               }
+
+               public DataSourceView GetView (string viewName)
+               {
+                       SiteMapNode node = GetStartNode (viewName);
+                       if (node == null)
+                               return new SiteMapDataSourceView (this, viewName, SiteMapNodeCollection.EmptyList);
+                       else if (ShowStartingNode)
+                               return new SiteMapDataSourceView (this, viewName, node);
+                       else
+                               return new SiteMapDataSourceView (this, viewName, node.ChildNodes);
+               }
+
+               protected override HierarchicalDataSourceView GetHierarchicalView (string viewPath)
+               {
+                       SiteMapNode node = GetStartNode (viewPath);
+                       if (node == null)
+                               return new SiteMapHierarchicalDataSourceView (SiteMapNodeCollection.EmptyList);
+                       else if (ShowStartingNode || node == null)
+                               return new SiteMapHierarchicalDataSourceView (node);
+                       else
+                               return new SiteMapHierarchicalDataSourceView (node.ChildNodes);
+               }
+               
+               SiteMapNode GetStartNode (string viewPath)
+               {
+                       if (viewPath != null && viewPath.Length != 0) {
+                               string url = MapUrl (StartingNodeUrl);
+                               return Provider.FindSiteMapNode (url);
+                       }
+                       else if (StartFromCurrentNode) {
+                               if (StartingNodeUrl.Length != 0)
+                                       throw new InvalidOperationException ("StartingNodeUrl can't be set if StartFromCurrentNode is set to true.");
+                               return Provider.CurrentNode;
+                       }
+                       else if (StartingNodeUrl.Length != 0) {
+                               string url = MapUrl (StartingNodeUrl);
+                               SiteMapNode node = Provider.FindSiteMapNode (url);
+                               if (node == null) throw new ArgumentException ("Can't find a site map node for the url: " + StartingNodeUrl);
+                               return node;
+                       }
+                       else
+                               return Provider.RootNode;
+               }
+               
+               string MapUrl (string url)
+               {
+                       if (UrlUtils.IsRelativeUrl (url))
+                               return UrlUtils.Combine (HttpRuntime.AppDomainAppVirtualPath, url);
+                       else
+                               return UrlUtils.ResolveVirtualPathFromAppAbsolute (url);
                }
        }
 }
index 3d1cb531398429b1597c82650a754823f9318e9a..a86906c2b4e68c115d2b937b59fda87f26ffd6be 100644 (file)
@@ -4,6 +4,7 @@
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
 //     Sanjay Gupta (gsanjay@novell.com)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
 // (C) 2003 Ben Maurer
 // (C) 2004 Novell, Inc. (http://www.novell.com)
@@ -36,32 +37,33 @@ using System.Collections.Specialized;
 using System.Text;
 using System.Web.UI;
 
-namespace System.Web.UI.WebControls {
-       public class SiteMapDataSourceView : DataSourceView {
-               public SiteMapDataSourceView (SiteMapDataSource owner, string viewName, SiteMapNode node) : this (owner, viewName, new SiteMapNodeCollection (node)) {}
+namespace System.Web.UI.WebControls
+{
+       public class SiteMapDataSourceView : DataSourceView
+       {
+               SiteMapNodeCollection collection;
+               
+               public SiteMapDataSourceView (SiteMapDataSource owner, string viewName, SiteMapNode node)
+               : this (owner, viewName, new SiteMapNodeCollection (node))
+               {
+               }
+               
                public SiteMapDataSourceView (SiteMapDataSource owner, string viewName, SiteMapNodeCollection collection)
+               : base (owner, viewName)
                {
                        this.collection = collection;
-                       this.viewName = viewName;
-                       this.owner = owner;
                }
                
-               [MonoTODO]
                public IEnumerable Select (DataSourceSelectArguments arguments)
                {
-                       throw new NotImplementedException ();
+                       return ExecuteSelect (arguments);
                }
 
-               [MonoTODO]
-               protected internal override IEnumerable ExecuteSelect (
-                                               DataSourceSelectArguments arguments)
+               protected internal override IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
                {
-                       throw new NotImplementedException ();
+                       arguments.RaiseUnsupportedCapabilitiesError (this);
+                       return collection;
                }
-               
-               SiteMapNodeCollection collection;
-               string viewName;
-               SiteMapDataSource owner;
        }
 }
 #endif
index 8de1b8d982bd522e33d4683e3531aeb35e5935bc..ea757684b5ab37841284af7b9bcfb833cff601a7 100644 (file)
@@ -35,19 +35,21 @@ namespace System.Web.UI.WebControls
 {
        public class SiteMapHierarchicalDataSourceView : HierarchicalDataSourceView
        {
-               public SiteMapHierarchicalDataSourceView (SiteMapNode node) : this (new SiteMapNodeCollection (node)) {}
+               SiteMapNodeCollection collection;
+               
+               public SiteMapHierarchicalDataSourceView (SiteMapNode node) : this (new SiteMapNodeCollection (node))
+               {
+               }
+               
                public SiteMapHierarchicalDataSourceView (SiteMapNodeCollection collection)
                {
                        this.collection = collection;
                }
 
-               [MonoTODO]
                public override IHierarchicalEnumerable Select ()
                {
-                       throw new NotImplementedException ();
+                       return collection;
                }
-
-               SiteMapNodeCollection collection;
        }
 }
 #endif
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItem.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItem.cs
new file mode 100644 (file)
index 0000000..6144280
--- /dev/null
@@ -0,0 +1,79 @@
+//
+// System.Web.UI.WebControls.SiteMapNodeItem.cs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 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.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+namespace System.Web.UI.WebControls
+{
+       public class SiteMapNodeItem: WebControl, IDataItemContainer, INamingContainer
+       {
+               int itemIndex;
+               SiteMapNodeItemType itemType;
+               SiteMapNode node;
+               
+               public SiteMapNodeItem (int itemIndex, SiteMapNodeItemType itemType)
+               {
+                       this.itemIndex = itemIndex;
+                       SetItemType (itemType);
+               }
+               
+               protected internal virtual void SetItemType (SiteMapNodeItemType itemType)
+               {
+                       this.itemType = itemType;
+               }
+               
+               public virtual int ItemIndex {
+                       get { return itemIndex; }
+               }
+               
+               public virtual SiteMapNodeItemType ItemType {
+                       get { return itemType; }
+               }
+               
+               public virtual SiteMapNode SiteMapNode {
+                       get { return node; }
+                       set { node = value; }
+               }
+               
+               object IDataItemContainer.DataItem {
+                       get { return node; }
+               }
+               
+               int IDataItemContainer.DataItemIndex {
+                       get { return itemIndex; }
+               }
+               
+               int IDataItemContainer.DisplayIndex {
+                       get { return itemIndex; }
+               }
+       }
+}
+
+#endif
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapPath.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapPath.cs
new file mode 100644 (file)
index 0000000..6939bb4
--- /dev/null
@@ -0,0 +1,465 @@
+//
+// System.Web.UI.WebControls.SiteMapPath.cs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 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.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.ComponentModel;
+
+namespace System.Web.UI.WebControls
+{
+       public class SiteMapPath: CompositeControl
+       {
+               SiteMapProvider provider;
+               
+               Style currentNodeStyle;
+               Style nodeStyle;
+               Style pathSeparatorStyle;
+               Style rootNodeStyle;
+               
+               ITemplate currentNodeTemplate;
+               ITemplate nodeTemplate;
+               ITemplate pathSeparatorTemplate;
+               ITemplate rootNodeTemplate;
+
+               private static readonly object ItemCreatedEvent = new object();
+               private static readonly object ItemDataBoundEvent = new object();
+               
+               public event SiteMapNodeItemEventHandler ItemCreated {
+                       add { Events.AddHandler (ItemCreatedEvent, value); }
+                       remove { Events.RemoveHandler (ItemCreatedEvent, value); }
+               }
+               
+               public event SiteMapNodeItemEventHandler ItemDataBound {
+                       add { Events.AddHandler (ItemDataBoundEvent, value); }
+                       remove { Events.RemoveHandler (ItemDataBoundEvent, value); }
+               }
+               
+               protected virtual void OnItemCreated (SiteMapNodeItemEventArgs e)
+               {
+                       if (Events != null) {
+                               SiteMapNodeItemEventHandler eh = (SiteMapNodeItemEventHandler) Events [ItemCreatedEvent];
+                               if (eh != null) eh (this, e);
+                       }
+               }
+               
+               protected virtual void OnItemDataBound (SiteMapNodeItemEventArgs e)
+               {
+                       if (Events != null) {
+                               SiteMapNodeItemEventHandler eh = (SiteMapNodeItemEventHandler) Events [ItemDataBoundEvent];
+                               if (eh != null) eh (this, e);
+                       }
+               }
+               
+           [DefaultValueAttribute (null)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]\r
+           [NotifyParentPropertyAttribute (true)]\r
+           [PersistenceModeAttribute (PersistenceMode.InnerProperty)]\r
+               public Style CurrentNodeStyle {
+                       get {
+                               if (currentNodeStyle == null) {
+                                       currentNodeStyle = new Style ();
+                                       if (IsTrackingViewState)
+                                               ((IStateManager)currentNodeStyle).TrackViewState ();
+                               }
+                               return currentNodeStyle;
+                       }
+               }
+       
+               [DefaultValue (null)]
+               [TemplateContainer (typeof(SiteMapNodeItem), BindingDirection.OneWay)]
+               [PersistenceMode (PersistenceMode.InnerProperty)]
+           [Browsable (false)]
+               public virtual ITemplate CurrentNodeTemplate {
+                       get { return currentNodeTemplate; }
+                       set { currentNodeTemplate = value; UpdateControls (); }
+               }
+               
+           [DefaultValueAttribute (null)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]\r
+           [NotifyParentPropertyAttribute (true)]\r
+           [PersistenceModeAttribute (PersistenceMode.InnerProperty)]\r
+               public Style NodeStyle {
+                       get {
+                               if (nodeStyle == null) {
+                                       nodeStyle = new Style ();
+                                       if (IsTrackingViewState)
+                                               ((IStateManager)nodeStyle).TrackViewState ();
+                               }
+                               return nodeStyle;
+                       }
+               }
+       
+               [DefaultValue (null)]
+               [TemplateContainer (typeof(SiteMapNodeItem), BindingDirection.OneWay)]
+               [PersistenceMode (PersistenceMode.InnerProperty)]
+           [Browsable (false)]
+               public virtual ITemplate NodeTemplate {
+                       get { return nodeTemplate; }
+                       set { nodeTemplate = value; UpdateControls (); }
+               }
+               
+           [DefaultValueAttribute (-1)]\r
+           [ThemeableAttribute (false)]\r
+               public virtual int ParentLevelsDisplayed {
+                       get {
+                               object ob = ViewState ["ParentLevelsDisplayed"];
+                               if (ob != null) return (int) ob;
+                               else return -1;
+                       }
+                       set {
+                               if (value < -1) throw new ArgumentOutOfRangeException ("value");
+                               ViewState ["ParentLevelsDisplayed"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute (PathDirection.RootToCurrent)]\r
+               public virtual PathDirection PathDirection {
+                       get {
+                               object ob = ViewState ["PathDirection"];
+                               if (ob != null) return (PathDirection) ob;
+                               else return PathDirection.RootToCurrent;
+                       }
+                       set {
+                               if (value != PathDirection.RootToCurrent && value != PathDirection.CurrentToRoot)
+                                       throw new ArgumentOutOfRangeException ("value");
+                               ViewState ["PathDirection"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute (" > ")]\r
+           [LocalizableAttribute (true)]\r
+               public virtual string PathSeparator {
+                       get {
+                               object ob = ViewState ["PathSeparator"];
+                               if (ob != null) return (string) ob;
+                               else return " > ";
+                       }
+                       set {
+                               ViewState ["PathSeparator"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute (null)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]\r
+           [NotifyParentPropertyAttribute (true)]\r
+           [PersistenceModeAttribute (PersistenceMode.InnerProperty)]\r
+               public Style PathSeparatorStyle {
+                       get {
+                               if (pathSeparatorStyle == null) {
+                                       pathSeparatorStyle = new Style ();
+                                       if (IsTrackingViewState)
+                                               ((IStateManager)pathSeparatorStyle).TrackViewState ();
+                               }
+                               return pathSeparatorStyle;
+                       }
+               }
+       
+               [DefaultValue (null)]
+               [TemplateContainer (typeof(SiteMapNodeItem), BindingDirection.OneWay)]
+               [PersistenceMode (PersistenceMode.InnerProperty)]
+           [Browsable (false)]
+               public virtual ITemplate PathSeparatorTemplate {
+                       get { return pathSeparatorTemplate; }
+                       set { pathSeparatorTemplate = value; UpdateControls (); }
+               }
+               
+           [BrowsableAttribute (false)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]\r
+               public SiteMapProvider Provider {
+                       get {
+                               if (provider == null) {
+                                       if (this.SiteMapProvider.Length == 0) {
+                                               provider = SiteMap.Provider;
+                                               if (provider == null)
+                                                       throw new HttpException ("There is no default provider configured for the site.");
+                                       } else {
+                                               provider = SiteMap.Providers [this.SiteMapProvider];
+                                               if (provider == null)
+                                                       throw new HttpException ("SiteMap provider '" + this.SiteMapProvider + "' not found.");
+                                       }
+                               }
+                               return provider;
+                       }
+                       set {
+                               provider = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute (false)]\r
+               public virtual bool RenderCurrentNodeAsLink {
+                       get {
+                               object o = ViewState ["RenderCurrentNodeAsLink"];
+                               if (o != null) return (bool) o;
+                               else return false;
+                       }
+                       set {
+                               ViewState ["RenderCurrentNodeAsLink"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute (null)]\r
+           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]\r
+           [NotifyParentPropertyAttribute (true)]\r
+           [PersistenceModeAttribute (PersistenceMode.InnerProperty)]\r
+               public Style RootNodeStyle {
+                       get {
+                               if (rootNodeStyle == null) {
+                                       rootNodeStyle = new Style ();
+                                       if (IsTrackingViewState)
+                                               ((IStateManager)rootNodeStyle).TrackViewState ();
+                               }
+                               return rootNodeStyle;
+                       }
+               }
+       
+               [DefaultValue (null)]
+               [TemplateContainer (typeof(SiteMapNodeItem), BindingDirection.OneWay)]
+               [PersistenceMode (PersistenceMode.InnerProperty)]
+           [Browsable (false)]
+               public virtual ITemplate RootNodeTemplate {
+                       get { return rootNodeTemplate; }
+                       set { rootNodeTemplate = value; UpdateControls (); }
+               }
+               
+           [DefaultValueAttribute (true)]\r
+           [ThemeableAttribute (false)]\r
+               public virtual bool ShowToolTips {
+                       get {
+                               object o = ViewState ["ShowToolTips"];
+                               if (o != null) return (bool) o;
+                               else return true;
+                       }
+                       set {
+                               ViewState ["ShowToolTips"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+           [DefaultValueAttribute ("")]\r
+           [ThemeableAttribute (false)]\r
+               public string SiteMapProvider {
+                       get {
+                               object o = ViewState ["SiteMapProvider"];
+                               if (o != null) return (string) o;
+                               else return string.Empty;
+                       }
+                       set {
+                               ViewState ["SiteMapProvider"] = value;
+                               UpdateControls ();
+                       }
+               }
+               
+               void UpdateControls ()
+               {
+                       ChildControlsCreated = false;
+               }
+               
+               protected override void CreateChildControls ()
+               {
+                       Controls.Clear ();
+                       CreateControlHierarchy ();
+               }
+               
+               protected virtual void CreateControlHierarchy ()
+               {
+                       ArrayList nodes = new ArrayList ();
+                       SiteMapNode node = Provider.CurrentNode;
+                       if (node == null) return;
+                       
+                       int levels = ParentLevelsDisplayed != -1 ? ParentLevelsDisplayed + 1 : int.MaxValue;
+                       
+                       while (node != null && levels > 0) {
+                               if (nodes.Count > 0) {
+                                       SiteMapNodeItem sep = new SiteMapNodeItem (nodes.Count, SiteMapNodeItemType.PathSeparator);
+                                       InitializeItem (sep);
+                                       SiteMapNodeItemEventArgs sargs = new SiteMapNodeItemEventArgs (sep);
+                                       OnItemCreated (sargs);
+                                       nodes.Add (sep);
+                               }
+
+                               SiteMapNodeItemType nt;
+                               if (nodes.Count == 0)
+                                       nt = SiteMapNodeItemType.Current;
+                               else if (node.ParentNode == null)
+                                       nt = SiteMapNodeItemType.Root;
+                               else
+                                       nt = SiteMapNodeItemType.Parent;
+                                       
+                               SiteMapNodeItem it = new SiteMapNodeItem (nodes.Count, nt);
+                               it.SiteMapNode = node;
+                               InitializeItem (it);
+                               
+                               SiteMapNodeItemEventArgs args = new SiteMapNodeItemEventArgs (it);
+                               OnItemCreated (args);
+                               
+                               it.DataBind ();
+                               OnItemDataBound (args);
+                               
+                               nodes.Add (it);
+                               node = node.ParentNode;
+                               levels--;
+                       }
+                       
+                       if (PathDirection == PathDirection.RootToCurrent) {
+                               for (int n=nodes.Count - 1; n>=0; n--)
+                                       Controls.Add ((Control)nodes[n]);
+                       } else {
+                               for (int n=0; n<nodes.Count; n++)
+                                       Controls.Add ((Control)nodes[n]);
+                       }
+               }
+               
+               protected virtual void InitializeItem (SiteMapNodeItem item)
+               {
+                       switch (item.ItemType) {
+                               case SiteMapNodeItemType.Root:
+                                       if (RootNodeTemplate != null) {
+                                               item.ApplyStyle (NodeStyle);
+                                               item.ApplyStyle (RootNodeStyle);
+                                               RootNodeTemplate.InstantiateIn (item);
+                                       }
+                                       else {
+                                               WebControl c = CreateNodeControl (true, item);
+                                               c.ApplyStyle (NodeStyle);
+                                               c.ApplyStyle (RootNodeStyle);
+                                               item.Controls.Add (c);
+                                       }
+                                       break;
+
+                               case SiteMapNodeItemType.Current:
+                                       if (CurrentNodeTemplate != null) {
+                                               item.ApplyStyle (NodeStyle);
+                                               item.ApplyStyle (CurrentNodeStyle);
+                                               CurrentNodeTemplate.InstantiateIn (item);
+                                       }
+                                       else {
+                                               WebControl c = CreateNodeControl (RenderCurrentNodeAsLink, item);
+                                               c.ApplyStyle (NodeStyle);
+                                               c.ApplyStyle (CurrentNodeStyle);
+                                               item.Controls.Add (c);
+                                       }
+                                       break;
+                                       
+                               case SiteMapNodeItemType.Parent:
+                                       if (NodeTemplate != null) {
+                                               item.ApplyStyle (NodeStyle);
+                                               NodeTemplate.InstantiateIn (item);
+                                       }
+                                       else {
+                                               WebControl c = CreateNodeControl (true, item);
+                                               c.ApplyStyle (NodeStyle);
+                                               item.Controls.Add (c);
+                                       }
+                                       break;
+                                       
+                               case SiteMapNodeItemType.PathSeparator:
+                                       if (PathSeparatorTemplate != null) {
+                                               item.ApplyStyle (PathSeparatorStyle);
+                                               PathSeparatorTemplate.InstantiateIn (item);
+                                       }
+                                       else {
+                                               Label h = new Label ();
+                                               h.Text = PathSeparator;
+                                               h.ApplyStyle (PathSeparatorStyle);
+                                               item.Controls.Add (h);
+                                       }
+                                       break;
+                       }
+               }
+               
+               WebControl CreateNodeControl (bool link, SiteMapNodeItem item)
+               {
+                       if (link) {
+                               HyperLink h = new HyperLink ();
+                               h.Text = item.SiteMapNode.Title;
+                               h.NavigateUrl = item.SiteMapNode.Url;
+                               if (ShowToolTips)
+                                       h.ToolTip = item.SiteMapNode.Description;
+                               return h;
+                       }
+                       else {
+                               Label h = new Label ();
+                               h.Text = item.SiteMapNode.Title;
+                               if (ShowToolTips)
+                                       h.ToolTip = item.SiteMapNode.Description;
+                               return h;
+                       }
+               }
+               
+               protected override void LoadViewState (object savedState)
+               {
+                       if (savedState == null) {
+                               base.LoadViewState (null);
+                               return;
+                       }
+                       
+                       object[] states = (object[]) savedState;
+                       base.LoadViewState (states [0]);
+                       
+                       if (states[1] != null) ((IStateManager)CurrentNodeStyle).LoadViewState (states[1]);
+                       if (states[2] != null) ((IStateManager)NodeStyle).LoadViewState (states[2]);
+                       if (states[3] != null) ((IStateManager)PathSeparatorStyle).LoadViewState (states[3]);
+                       if (states[4] != null) ((IStateManager)RootNodeStyle).LoadViewState (states[4]);
+               }
+               
+               protected override object SaveViewState ()
+               {
+                       object[] state = new object [5];
+                       state [0] = base.SaveViewState ();
+                       
+                       if (currentNodeStyle != null) state [1] = ((IStateManager)currentNodeStyle).SaveViewState ();
+                       if (nodeStyle != null) state [2] = ((IStateManager)nodeStyle).SaveViewState ();
+                       if (pathSeparatorStyle != null) state [3] = ((IStateManager)pathSeparatorStyle).SaveViewState ();
+                       if (rootNodeStyle != null) state [4] = ((IStateManager)rootNodeStyle).SaveViewState ();
+                       
+                       for (int n=0; n<state.Length; n++)
+                               if (state [n] != null) return state;
+                       return null;
+               }
+               
+               protected override void TrackViewState ()
+               {
+                       base.TrackViewState();
+                       if (currentNodeStyle != null) ((IStateManager)currentNodeStyle).TrackViewState();
+                       if (nodeStyle != null) ((IStateManager)nodeStyle).TrackViewState();
+                       if (pathSeparatorStyle != null) ((IStateManager)pathSeparatorStyle).TrackViewState();
+                       if (rootNodeStyle != null) ((IStateManager)rootNodeStyle).TrackViewState();
+               }
+       }
+}
+
+#endif
index c65e1f69449c194fe7370b9234d17d3b1900373f..6a949d3714c89188d5e5de53f609310e6e986ae6 100644 (file)
@@ -46,6 +46,7 @@ namespace System.Web.UI.WebControls {
                HttpContext context;
 
                public SqlDataSourceView (SqlDataSource owner, string name, HttpContext context)
+               : base (owner, name)
                {
                        this.owner = owner;
                        this.name = name;
index 4ced053f607168f46c08c91d28d5a4f57df1c992..cafa92ce35f7a182e7853fcb149fb027fdc04797 100644 (file)
@@ -840,6 +840,9 @@ namespace System.Web.UI.WebControls
                
                protected virtual string RaiseCallbackEvent (string eventArgs)
                {
+                       RequiresDataBinding = true;
+                       EnsureDataBound ();
+                       
                        TreeNode node = FindNodeByPos (eventArgs);
                        ArrayList levelLines = new ArrayList ();
                        TreeNode nd = node;
@@ -900,6 +903,7 @@ namespace System.Web.UI.WebControls
                
                protected virtual bool LoadPostData (string postDataKey, NameValueCollection postCollection)
                {
+                       RequiresDataBinding = true;
                        EnsureDataBound ();
                        
                        bool res = false;
index 5254beba2bd1b46761e1cb902de2a80a78aa532c..8ab656ad7754a9807e83f17c1ffc3afa592ddee3 100644 (file)
@@ -42,6 +42,7 @@ namespace System.Web.UI.WebControls
                ArrayList nodes;
        
                public XmlDataSourceView (XmlDataSource owner, string name, XmlNodeList nodes)
+               : base (owner, name)
                {
                        // Why do they pass owner?
                        this.name = name;
index ac3278c6f1652608243e6bdc8aa1b193e0a65601..be3ecde85c686a587945b01f93f7ca8b816c0a62 100755 (executable)
@@ -97,7 +97,7 @@ namespace System.Web.UI {
                        foreach (string key in bag.Keys) {
                                string value = bag [key] as string;
                                if (value != null)
-                                       writer.WriteAttribute (key, value);
+                                       writer.WriteAttribute (key, value, true);
                        }
                }
        }
index a14e676076d291d37ffe1ac4a12b470561786f3c..81a3fb78af4c708f7d106f5559338c80d43df4c3 100644 (file)
@@ -1,3 +1,16 @@
+2005-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * AttributeCollection.cs: html-encode attribute values. Fixes
+       bug #73771.
+
+2005-05-26  Lluis Sanchez Gual <lluis@novell.com>
+
+       * DataSourceView.cs: Fix api.
+       * NonVisualControlAttribute.cs: Implemented.
+       * IDataItemContainer.cs: Added missing properties.
+       * Control.cs: Added new EnableTheming and SkinID properties.
+       * HierarchicalDataSourceControl.cs: Implemented missing methods.
+
 2005-05-13  Lluis Sanchez Gual <lluis@novell.com>
 
        * ControlCollection.cs: Added internal setter for ReadOnly.
index ff805396bee10743f310d3e6bddae7250a2ad58d..c1c00f115dabf8a540bb679c3e790b1862ad812f 100644 (file)
@@ -97,6 +97,9 @@ namespace System.Web.UI
                const int VIEWSTATE_LOADED      = 1 << 13;
                const int LOADED                = 1 << 14;
                const int PRERENDERED           = 1 << 15;
+#if NET_2_0
+               const int ENABLE_THEMING        = 1 << 15;
+#endif
                /*************/
                
                static Control ()
@@ -810,19 +813,24 @@ namespace System.Web.UI
                }
 
 
-                public virtual bool HasControls ()
-                {
-                        return (_controls != null && _controls.Count > 0);
-                }
+               public virtual bool HasControls ()
+               {
+                   return (_controls != null && _controls.Count > 0);
+               }
 
-                public void RenderControl(HtmlTextWriter writer)
-                {
-                        if ((stateMask & VISIBLE) != 0)
-                                Render(writer);
-                }
+#if NET_2_0
+               public virtual
+#else
+               public
+#endif
+               void RenderControl (HtmlTextWriter writer)
+               {
+                   if ((stateMask & VISIBLE) != 0)
+                           Render(writer);
+               }
 
-                public string ResolveUrl(string relativeUrl)
-                {
+               public string ResolveUrl (string relativeUrl)
+               {
                        if (relativeUrl == null)
                                throw new ArgumentNullException ("relativeUrl");
 
@@ -1043,6 +1051,21 @@ namespace System.Web.UI
                }\r
 \r
 #if NET_2_0
+
+               string skinId = string.Empty;
+               
+               public virtual bool EnableTheming
+               {
+                       get { return (stateMask & ENABLE_THEMING) != 0; }
+                       set { SetMask (ENABLE_THEMING, value); }
+               }
+               
+               public virtual string SkinID
+               {
+                       get { return skinId; }
+                       set { skinId = value; }
+               }
+               
                protected string GetWebResourceUrl (string resourceName)
                {
                        return Page.ClientScript.GetWebResourceUrl (GetType(), resourceName); 
index d7e8cf6c2c92f7dbb812568bfa2a180c37244067..ddcca295f05db9904f2e514285f5728b787e73f6 100644 (file)
@@ -42,12 +42,7 @@ namespace System.Web.UI {
                IDataSource dataSourceOwner;
                string viewName = String.Empty;
 
-               [MonoTODO ("Extra method to keep things compiling")]
-               protected DataSourceView()
-               {                       
-               }
-
-               protected DataSourceView(IDataSource owner, string viewName)
+               protected DataSourceView (IDataSource owner, string viewName)
                {
                        this.dataSourceOwner = owner;
                        this.viewName = viewName;
@@ -147,7 +142,7 @@ namespace System.Web.UI {
                        callBack (selectList);
                }
 
-               public virtual int Update(IDictionary keys, IDictionary values,
+               public virtual void Update(IDictionary keys, IDictionary values,
                        IDictionary oldValues, DataSourceViewOperationCallback callBack)
                {
                        if (callBack == null)
@@ -163,8 +158,6 @@ namespace System.Web.UI {
 
                        if (!callBack (rowAffected, passOn) && passOn != null)
                                throw passOn;
-
-                       return rowAffected;
                } 
                
                public virtual bool CanDelete { get { return false; } }
index 0485907dc29b0fdbbac58037b4e19bfc1033ee88..c81d027e2e9165c60377bf9eee11794bc9758d2d 100644 (file)
@@ -3,8 +3,10 @@
 //
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
-// (C) 2003 Ben Maurer
+//  (C) 2003 Ben Maurer
+//  (C) 2005 Novell, Inc (http://www.novell.com)
 //
 
 //
 using System.Collections;
 using System.Collections.Specialized;
 using System.Text;
+using System.ComponentModel;
+
+namespace System.Web.UI
+{
+       [NonVisualControlAttribute]\r
+       [DesignerAttribute ("System.Web.UI.Design.HierarchicalDataSourceDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.IDesigner")]\r
+//     [ControlBuilderAttribute (typeof(DataSourceControlBuilder))]\r
+       [BindableAttribute (false)]\r
+       public abstract class HierarchicalDataSourceControl : Control, IHierarchicalDataSource
+       {
+               static object dataSourceChanged = new object ();
 
-namespace System.Web.UI {
-       public abstract class HierarchicalDataSourceControl : Control, IHierarchicalDataSource {
                protected HierarchicalDataSourceControl()
                {
                }
@@ -49,15 +60,42 @@ namespace System.Web.UI {
                        return this.GetHierarchicalView (viewPath);
                }
                
-               //public override bool EnablePersonalization { get; set; }
-               //public override bool EnableTheming { get; set; }
-               //public override string SkinID { get; set; }
+               public override bool EnableTheming {
+                       get { return false; }
+                       set { throw new NotSupportedException (); }
+               }
+               
+               public override string SkinID {
+                       get { return string.Empty; }
+                       set { throw new NotSupportedException (); }
+               }
+               
                public override bool Visible { 
                        get { return false; }
                        set { throw new NotSupportedException (); }
                }
 
-               static object dataSourceChanged = new object ();
+               protected override ControlCollection CreateControlCollection ()
+               {
+                       return new EmptyControlCollection (this);
+               }
+               
+               public override Control FindControl (string id)
+               {
+                       if (id == ID) return this;
+                       else return null;
+               }
+               
+               public override bool HasControls ()
+               {
+                       return false;
+               }
+               
+               public override void Focus ()
+               {
+                       throw new NotSupportedException ();
+               }
+               
                event EventHandler System.Web.UI.IHierarchicalDataSource.DataSourceChanged {
                        add { Events.AddHandler (dataSourceChanged, value); }
                        remove { Events.RemoveHandler (dataSourceChanged, value); }
@@ -69,6 +107,11 @@ namespace System.Web.UI {
                        if (eh != null)
                                eh (this, e);
                }
+               
+               public override void RenderControl (HtmlTextWriter writer)
+               {
+                       // nop
+               }
        }
        
 
index 67fb97074a1d3589934bc1eed408f6c7cab5d624..9f58aca71fc3cb00888b5d63870f47c666338028 100644 (file)
@@ -33,12 +33,11 @@ using System;
 
 namespace System.Web.UI
 {
-       public interface IDataItemContainer
+       public interface IDataItemContainer: INamingContainer
        {
                object DataItem { get; }
-/*             int DataItemIndex { get; }
+               int DataItemIndex { get; }
                int DisplayIndex { get; }
-*/
        }
 }
 #endif
diff --git a/mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs b/mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs
new file mode 100644 (file)
index 0000000..ffc2a84
--- /dev/null
@@ -0,0 +1,76 @@
+//
+// System.Web.UI.WebControls.NonVisualControlAttribute.cs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 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_2_0
+
+using System;
+
+namespace System.Web.UI
+{
+       public sealed class NonVisualControlAttribute: Attribute
+       {
+               public static readonly NonVisualControlAttribute Visual = new NonVisualControlAttribute (false);
+               public static readonly NonVisualControlAttribute NonVisual = new NonVisualControlAttribute (true);
+               public static readonly NonVisualControlAttribute Default = Visual;
+               
+               bool nonVisual;
+               
+               public NonVisualControlAttribute (): this (true)
+               {
+               }
+               
+               public NonVisualControlAttribute (bool nonVisual)
+               {
+                       this.nonVisual = nonVisual; 
+               }
+               
+               public override bool Equals (object obj)
+               {
+                       NonVisualControlAttribute ot = obj as NonVisualControlAttribute;
+                       return ot != null && ot.nonVisual == nonVisual;
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return GetType().GetHashCode () + nonVisual.GetHashCode ();
+               }
+               
+               public override bool IsDefaultAttribute ()
+               {
+                       return Equals (Default);
+               }
+               
+               public bool IsNonVisual {
+                       get { return nonVisual; }
+               }
+       }
+}
+
+#endif
index ef815fc3bf499cfc82da0433aebcab132451f963..61f4744467f1364a59108d155976c74da2a23ddc 100755 (executable)
@@ -528,8 +528,12 @@ System.Web.UI.WebControls/SessionParameter.cs
 System.Web.UI.WebControls/SiteMapDataSource.cs
 System.Web.UI.WebControls/SiteMapDataSourceView.cs
 System.Web.UI.WebControls/SiteMapHierarchicalDataSourceView.cs
+System.Web.UI.WebControls/SiteMapNodeItem.cs
+System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs
+System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs
 System.Web.UI.WebControls/SiteMapNodeItemType.cs
 System.Web.UI.WebControls/SiteMapNodeType.cs
+System.Web.UI.WebControls/SiteMapPath.cs
 System.Web.UI.WebControls/SortDirection.cs
 System.Web.UI.WebControls/SqlDataSource.cs
 System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs
@@ -748,6 +752,7 @@ System.Web.UI/LiteralControl.cs
 System.Web.UI/LosFormatter.cs
 System.Web.UI/MasterPage.cs
 System.Web.UI/MasterPageParser.cs
+System.Web.UI/NonVisualControlAttribute.cs
 System.Web.UI/ObjectConverter.cs
 System.Web.UI/ObjectStateFormatter.cs
 System.Web.UI/ObjectTag.cs
@@ -893,6 +898,7 @@ System.Web/SiteMapProvider.cs
 System.Web/SiteMapProviderCollection.cs
 System.Web/SiteMapResolveEventArgs.cs
 System.Web/StaticFileHandler.cs
+System.Web/StaticSiteMapProvider.cs
 System.Web/TODOAttribute.cs
 System.Web/TimeoutManager.cs
 System.Web/TraceContext.cs
index 23c8ec8a37d954fc73b07c86504472bb77fed50b..ac6441614f140132b0aed00971f9cb957c580cca 100644 (file)
@@ -143,11 +143,19 @@ namespace System.Web
        
        class CapabilitiesLoader : MarshalByRefObject
        {
-               static bool loaded;
+               static volatile bool loaded;
                static ICollection alldata;
                static Hashtable defaultCaps;
+               static readonly object lockobj = new object ();
                private CapabilitiesLoader () {}
 
+               static CapabilitiesLoader ()
+               {
+                       defaultCaps = new Hashtable ();
+                       defaultCaps.Add ("frames", "True");
+                       defaultCaps.Add ("tables", "True");
+               }
+                       
                public static Hashtable GetCapabilities (string userAgent)
                {
                        Init ();
@@ -155,15 +163,14 @@ namespace System.Web
                                userAgent = userAgent.Trim ();
 
                        if (alldata == null || userAgent == null || userAgent == "")
-                               return DefaultCapabilities;
+                               return defaultCaps;
 
                        foreach (BrowserData bd in alldata) {
-                               if (bd.IsMatch (userAgent)) {
+                               if (bd.IsMatch (userAgent))
                                        return bd.GetProperties (new Hashtable ());
-                               }
                        }
                        
-                       return DefaultCapabilities;
+                       return defaultCaps;
                }
 
                static void Init ()
@@ -171,7 +178,7 @@ namespace System.Web
                        if (loaded)
                                return;
 
-                       lock (typeof (CapabilitiesLoader)) {
+                       lock (lockobj) {
                                if (loaded)
                                        return;
 
@@ -240,20 +247,6 @@ namespace System.Web
                                data.Add (keyvalue [0], keyvalue [1]);
                        }
                }
-
-               static Hashtable DefaultCapabilities {
-                       get {
-                               lock (typeof (CapabilitiesLoader)) {
-                                       if (defaultCaps != null)
-                                               return defaultCaps;
-
-                                       defaultCaps = new Hashtable ();
-                                       defaultCaps.Add ("frames", "True");
-                                       defaultCaps.Add ("tables", "True");
-                                       return defaultCaps;
-                               }
-                       }
-               }
        }
 }
 
index 45020e96314dbb3ef79eb4415f535b3508772b55..2833aabc3e0d42ed49a14ba64082a09ea4d3ccd5 100644 (file)
@@ -1,3 +1,20 @@
+2005-05-26  Lluis Sanchez Gual <lluis@novell.com>
+
+       * SiteMapNodeCollection.cs: Implemented missing methods. The collection
+       does not inherit from CollectionBase any more.
+       * SiteMapNode.cs: Track api changes.
+       * SiteMapProvider.cs: Moved several methods to the new
+       StaticSiteMapProvider class. Other fixes.
+       * XmlSiteMapProvider.cs: Watch changes in the xml files. Other fixes.
+       * SiteMapProviderCollection.cs: Minor fixes.
+       * SiteMap.cs: Added missing event. Avoid double check lock.
+       * StaticSiteMapProvider.cs: New class that implements some of the
+       funtionality of SiteMapProvider.
+
+2005-05-25  Ben Maurer  <bmaurer@ximian.com>
+
+       * MimeTypes.cs: Remove extra spaces, they were typos. Fixes 75049.
+
 2005-05-13 Atsushi Enomoto <atsishi@ximian.com>
 
        * HttpUtility.cs : UrlDecodeToBytes() incorrectly decoded escaped 
        * HttpContext.cs: reverting Pedro's patch and sending mail with test
        to mono-devel.
 
-2004-06-09  Pedro Martínez Juliá  <yoros@wanadoo.es>
+2004-06-09  Pedro Martnez Juli  <yoros@wanadoo.es>
 
        * HttpContext: User property returns its own "user" value because
        the context can walk through different Threads. When "User" property
 2004-06-01  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * HttpWorkerRequest.cs: the hashtables are now case-insensitive. Thanks
-       to Markus Kräutner.
+       to Markus Krutner.
 
 2004-05-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
 
        * HttpServerUtility.cs: Fix build breaker.
 
-2002-03-28  Wictor Wilén  <wictor@iBizkit.se>
+2002-03-28  Wictor Wiln  <wictor@iBizkit.se>
 
        * HttpServerUtils.cs : Added some more functionality
        
index 4a1e1a56eb94c427ec14cfbcfaf983b8f057ad22..fa8025100a417bee1cd10d4a9bbfe15b0dad1a73 100644 (file)
@@ -159,8 +159,8 @@ namespace System.Web
                        mimeTypes.Add ("html", "text/html");
                        mimeTypes.Add ("htmls", "text/html");
                        mimeTypes.Add ("htt", "text/webviewhtml");
-                       mimeTypes.Add ("htx ", "text/html");
-                       mimeTypes.Add ("ice ", "x-conference/x-cooltalk");
+                       mimeTypes.Add ("htx", "text/html");
+                       mimeTypes.Add ("ice", "x-conference/x-cooltalk");
                        mimeTypes.Add ("ico", "image/x-icon");
                        mimeTypes.Add ("idc", "text/plain");
                        mimeTypes.Add ("ief", "image/ief");
@@ -169,42 +169,42 @@ namespace System.Web
                        mimeTypes.Add ("igs", "application/iges");
                        mimeTypes.Add ("ima", "application/x-ima");
                        mimeTypes.Add ("imap", "application/x-httpd-imap");
-                       mimeTypes.Add ("inf ", "application/inf");
+                       mimeTypes.Add ("inf", "application/inf");
                        mimeTypes.Add ("ins", "application/x-internett-signup");
-                       mimeTypes.Add ("ip ", "application/x-ip2");
+                       mimeTypes.Add ("ip", "application/x-ip2");
                        mimeTypes.Add ("isu", "video/x-isvideo");
                        mimeTypes.Add ("it", "audio/it");
                        mimeTypes.Add ("iv", "application/x-inventor");
                        mimeTypes.Add ("ivr", "i-world/i-vrml");
                        mimeTypes.Add ("ivy", "application/x-livescreen");
-                       mimeTypes.Add ("jam ", "audio/x-jam");
+                       mimeTypes.Add ("jam", "audio/x-jam");
                        mimeTypes.Add ("jav", "text/plain");
                        mimeTypes.Add ("java", "text/plain");
-                       mimeTypes.Add ("jcm ", "application/x-java-commerce");
+                       mimeTypes.Add ("jcm", "application/x-java-commerce");
                        mimeTypes.Add ("jfif", "image/jpeg");
                        mimeTypes.Add ("jfif-tbnl", "image/jpeg");
                        mimeTypes.Add ("jpe", "image/jpeg");
                        mimeTypes.Add ("jpeg", "image/jpeg");
                        mimeTypes.Add ("jps", "image/x-jps");
-                       mimeTypes.Add ("js ", "application/x-javascript");
+                       mimeTypes.Add ("js", "application/x-javascript");
                        mimeTypes.Add ("jut", "image/jutvision");
                        mimeTypes.Add ("kar", "audio/midi");
                        mimeTypes.Add ("ksh", "text/x-script.ksh");
-                       mimeTypes.Add ("la ", "audio/nspaudio");
+                       mimeTypes.Add ("la", "audio/nspaudio");
                        mimeTypes.Add ("lam", "audio/x-liveaudio");
-                       mimeTypes.Add ("latex ", "application/x-latex");
+                       mimeTypes.Add ("latex", "application/x-latex");
                        mimeTypes.Add ("list", "text/plain");
                        mimeTypes.Add ("lma", "audio/nspaudio");
-                       mimeTypes.Add ("log ", "text/plain");
-                       mimeTypes.Add ("lsp ", "application/x-lisp");
-                       mimeTypes.Add ("lst ", "text/plain");
+                       mimeTypes.Add ("log", "text/plain");
+                       mimeTypes.Add ("lsp", "application/x-lisp");
+                       mimeTypes.Add ("lst", "text/plain");
                        mimeTypes.Add ("lsx", "text/x-la-asf");
                        mimeTypes.Add ("ltx", "application/x-latex");
                        mimeTypes.Add ("m", "text/plain");
                        mimeTypes.Add ("m1v", "video/mpeg");
                        mimeTypes.Add ("m2a", "audio/mpeg");
                        mimeTypes.Add ("m2v", "video/mpeg");
-                       mimeTypes.Add ("m3u ", "audio/x-mpequrl");
+                       mimeTypes.Add ("m3u", "audio/x-mpequrl");
                        mimeTypes.Add ("man", "application/x-troff-man");
                        mimeTypes.Add ("map", "application/x-navimap");
                        mimeTypes.Add ("mar", "text/plain");
@@ -213,15 +213,15 @@ namespace System.Web
                        mimeTypes.Add ("mcd", "application/mcad");
                        mimeTypes.Add ("mcf", "image/vasa");
                        mimeTypes.Add ("mcp", "application/netmc");
-                       mimeTypes.Add ("me ", "application/x-troff-me");
+                       mimeTypes.Add ("me", "application/x-troff-me");
                        mimeTypes.Add ("mht", "message/rfc822");
                        mimeTypes.Add ("mhtml", "message/rfc822");
                        mimeTypes.Add ("mid", "audio/midi");
                        mimeTypes.Add ("midi", "audio/midi");
                        mimeTypes.Add ("mif", "application/x-mif");
-                       mimeTypes.Add ("mime ", "message/rfc822");
+                       mimeTypes.Add ("mime", "message/rfc822");
                        mimeTypes.Add ("mjf", "audio/x-vnd.AudioExplosion.MjuiceMediaFile");
-                       mimeTypes.Add ("mjpg ", "video/x-motion-jpeg");
+                       mimeTypes.Add ("mjpg", "video/x-motion-jpeg");
                        mimeTypes.Add ("mm", "application/base64");
                        mimeTypes.Add ("mme", "application/base64");
                        mimeTypes.Add ("mod", "audio/mod");
@@ -266,9 +266,9 @@ namespace System.Web
                        mimeTypes.Add ("p7m", "application/pkcs7-mime");
                        mimeTypes.Add ("p7r", "application/x-pkcs7-certreqresp");
                        mimeTypes.Add ("p7s", "application/pkcs7-signature");
-                       mimeTypes.Add ("part ", "application/pro_eng");
+                       mimeTypes.Add ("part", "application/pro_eng");
                        mimeTypes.Add ("pas", "text/pascal");
-                       mimeTypes.Add ("pbm ", "image/x-portable-bitmap");
+                       mimeTypes.Add ("pbm", "image/x-portable-bitmap");
                        mimeTypes.Add ("pcl", "application/x-pcl");
                        mimeTypes.Add ("pct", "image/x-pict");
                        mimeTypes.Add ("pcx", "image/x-pcx");
@@ -283,7 +283,7 @@ namespace System.Web
                        mimeTypes.Add ("pl", "text/plain");
                        mimeTypes.Add ("plx", "application/x-PiXCLscript");
                        mimeTypes.Add ("pm", "image/x-xpixmap");
-                       mimeTypes.Add ("pm4 ", "application/x-pagemaker");
+                       mimeTypes.Add ("pm4", "application/x-pagemaker");
                        mimeTypes.Add ("pm5", "application/x-pagemaker");
                        mimeTypes.Add ("png", "image/png");
                        mimeTypes.Add ("pnm", "application/x-portable-anymap");
@@ -298,12 +298,12 @@ namespace System.Web
                        mimeTypes.Add ("prt", "application/pro_eng");
                        mimeTypes.Add ("ps", "application/postscript");
                        mimeTypes.Add ("pvu", "paleovu/x-pv");
-                       mimeTypes.Add ("pwz ", "application/vnd.ms-powerpoint");
-                       mimeTypes.Add ("py ", "text/x-script.phyton");
-                       mimeTypes.Add ("pyc ", "applicaiton/x-bytecode.python");
-                       mimeTypes.Add ("qcp ", "audio/vnd.qcelp");
-                       mimeTypes.Add ("qd3 ", "x-world/x-3dmf");
-                       mimeTypes.Add ("qd3d ", "x-world/x-3dmf");
+                       mimeTypes.Add ("pwz", "application/vnd.ms-powerpoint");
+                       mimeTypes.Add ("py", "text/x-script.phyton");
+                       mimeTypes.Add ("pyc", "applicaiton/x-bytecode.python");
+                       mimeTypes.Add ("qcp", "audio/vnd.qcelp");
+                       mimeTypes.Add ("qd3", "x-world/x-3dmf");
+                       mimeTypes.Add ("qd3d", "x-world/x-3dmf");
                        mimeTypes.Add ("qif", "image/x-quicktime");
                        mimeTypes.Add ("qt", "video/quicktime");
                        mimeTypes.Add ("qtc", "video/x-qtc");
@@ -313,17 +313,17 @@ namespace System.Web
                        mimeTypes.Add ("ram", "audio/x-pn-realaudio");
                        mimeTypes.Add ("ras", "application/x-cmu-raster");
                        mimeTypes.Add ("rast", "image/cmu-raster");
-                       mimeTypes.Add ("rexx ", "text/x-script.rexx");
+                       mimeTypes.Add ("rexx", "text/x-script.rexx");
                        mimeTypes.Add ("rf", "image/vnd.rn-realflash");
-                       mimeTypes.Add ("rgb ", "image/x-rgb");
+                       mimeTypes.Add ("rgb", "image/x-rgb");
                        mimeTypes.Add ("rm", "application/vnd.rn-realmedia");
                        mimeTypes.Add ("rmi", "audio/mid");
-                       mimeTypes.Add ("rmm ", "audio/x-pn-realaudio");
+                       mimeTypes.Add ("rmm", "audio/x-pn-realaudio");
                        mimeTypes.Add ("rmp", "audio/x-pn-realaudio");
                        mimeTypes.Add ("rng", "application/ringing-tones");
-                       mimeTypes.Add ("rnx ", "application/vnd.rn-realplayer");
+                       mimeTypes.Add ("rnx", "application/vnd.rn-realplayer");
                        mimeTypes.Add ("roff", "application/x-troff");
-                       mimeTypes.Add ("rp ", "image/vnd.rn-realpix");
+                       mimeTypes.Add ("rp", "image/vnd.rn-realpix");
                        mimeTypes.Add ("rpm", "audio/x-pn-realaudio-plugin");
                        mimeTypes.Add ("rss", "text/xml");
                        mimeTypes.Add ("rt", "text/richtext");
@@ -331,37 +331,37 @@ namespace System.Web
                        mimeTypes.Add ("rtx", "text/richtext");
                        mimeTypes.Add ("rv", "video/vnd.rn-realvideo");
                        mimeTypes.Add ("s", "text/x-asm");
-                       mimeTypes.Add ("s3m ", "audio/s3m");
-                       mimeTypes.Add ("sbk ", "application/x-tbook");
+                       mimeTypes.Add ("s3m", "audio/s3m");
+                       mimeTypes.Add ("sbk", "application/x-tbook");
                        mimeTypes.Add ("scm", "application/x-lotusscreencam");
                        mimeTypes.Add ("sdml", "text/plain");
-                       mimeTypes.Add ("sdp ", "application/sdp");
+                       mimeTypes.Add ("sdp", "application/sdp");
                        mimeTypes.Add ("sdr", "application/sounder");
                        mimeTypes.Add ("sea", "application/sea");
                        mimeTypes.Add ("set", "application/set");
-                       mimeTypes.Add ("sgm ", "text/sgml");
+                       mimeTypes.Add ("sgm", "text/sgml");
                        mimeTypes.Add ("sgml", "text/sgml");
                        mimeTypes.Add ("sh", "text/x-script.sh");
                        mimeTypes.Add ("shar", "application/x-bsh");
-                       mimeTypes.Add ("shtml ", "text/html");
+                       mimeTypes.Add ("shtml", "text/html");
                        mimeTypes.Add ("sid", "audio/x-psid");
                        mimeTypes.Add ("sit", "application/x-sit");
                        mimeTypes.Add ("skd", "application/x-koan");
-                       mimeTypes.Add ("skm ", "application/x-koan");
-                       mimeTypes.Add ("skp ", "application/x-koan");
-                       mimeTypes.Add ("skt ", "application/x-koan");
-                       mimeTypes.Add ("sl ", "application/x-seelogo");
-                       mimeTypes.Add ("smi ", "application/smil");
-                       mimeTypes.Add ("smil ", "application/smil");
+                       mimeTypes.Add ("skm", "application/x-koan");
+                       mimeTypes.Add ("skp", "application/x-koan");
+                       mimeTypes.Add ("skt", "application/x-koan");
+                       mimeTypes.Add ("sl", "application/x-seelogo");
+                       mimeTypes.Add ("smi", "application/smil");
+                       mimeTypes.Add ("smil", "application/smil");
                        mimeTypes.Add ("snd", "audio/basic");
                        mimeTypes.Add ("sol", "application/solids");
-                       mimeTypes.Add ("spc ", "application/x-pkcs7-certificates");
+                       mimeTypes.Add ("spc", "application/x-pkcs7-certificates");
                        mimeTypes.Add ("spl", "application/futuresplash");
                        mimeTypes.Add ("spr", "application/x-sprite");
-                       mimeTypes.Add ("sprite ", "application/x-sprite");
+                       mimeTypes.Add ("sprite", "application/x-sprite");
                        mimeTypes.Add ("src", "application/x-wais-source");
                        mimeTypes.Add ("ssi", "text/x-server-parsed-html");
-                       mimeTypes.Add ("ssm ", "application/streamingmedia");
+                       mimeTypes.Add ("ssm", "application/streamingmedia");
                        mimeTypes.Add ("sst", "application/vnd.ms-pki.certstore");
                        mimeTypes.Add ("step", "application/step");
                        mimeTypes.Add ("stl", "application/sla");
@@ -403,10 +403,10 @@ namespace System.Web
                        mimeTypes.Add ("vcs", "text/x-vCalendar");
                        mimeTypes.Add ("vda", "application/vda");
                        mimeTypes.Add ("vdo", "video/vdo");
-                       mimeTypes.Add ("vew ", "application/groupwise");
+                       mimeTypes.Add ("vew", "application/groupwise");
                        mimeTypes.Add ("viv", "video/vivo");
                        mimeTypes.Add ("vivo", "video/vivo");
-                       mimeTypes.Add ("vmd ", "application/vocaltec-media-desc");
+                       mimeTypes.Add ("vmd", "application/vocaltec-media-desc");
                        mimeTypes.Add ("vmf", "application/vocaltec-media-file");
                        mimeTypes.Add ("voc", "audio/voc");
                        mimeTypes.Add ("vos", "video/vosaic");
@@ -418,7 +418,7 @@ namespace System.Web
                        mimeTypes.Add ("vrt", "x-world/x-vrt");
                        mimeTypes.Add ("vsd", "application/x-visio");
                        mimeTypes.Add ("vst", "application/x-visio");
-                       mimeTypes.Add ("vsw ", "application/x-visio");
+                       mimeTypes.Add ("vsw", "application/x-visio");
                        mimeTypes.Add ("w60", "application/wordperfect6.0");
                        mimeTypes.Add ("w61", "application/wordperfect6.1");
                        mimeTypes.Add ("w6w", "application/msword");
@@ -430,13 +430,13 @@ namespace System.Web
                        mimeTypes.Add ("wk1", "application/x-123");
                        mimeTypes.Add ("wmf", "windows/metafile");
                        mimeTypes.Add ("wml", "text/vnd.wap.wml");
-                       mimeTypes.Add ("wmlc ", "application/vnd.wap.wmlc");
+                       mimeTypes.Add ("wmlc", "application/vnd.wap.wmlc");
                        mimeTypes.Add ("wmls", "text/vnd.wap.wmlscript");
-                       mimeTypes.Add ("wmlsc ", "application/vnd.wap.wmlscriptc");
-                       mimeTypes.Add ("word ", "application/msword");
+                       mimeTypes.Add ("wmlsc", "application/vnd.wap.wmlscriptc");
+                       mimeTypes.Add ("word", "application/msword");
                        mimeTypes.Add ("wp", "application/wordperfect");
                        mimeTypes.Add ("wp5", "application/wordperfect");
-                       mimeTypes.Add ("wp6 ", "application/wordperfect");
+                       mimeTypes.Add ("wp6", "application/wordperfect");
                        mimeTypes.Add ("wpd", "application/wordperfect");
                        mimeTypes.Add ("wq1", "application/x-lotus");
                        mimeTypes.Add ("wri", "application/mswrite");
@@ -444,7 +444,7 @@ namespace System.Web
                        mimeTypes.Add ("wrz", "model/vrml");
                        mimeTypes.Add ("wsc", "text/scriplet");
                        mimeTypes.Add ("wsrc", "application/x-wais-source");
-                       mimeTypes.Add ("wtk ", "application/x-wintalk");
+                       mimeTypes.Add ("wtk", "application/x-wintalk");
                        mimeTypes.Add ("xbm", "image/x-xbitmap");
                        mimeTypes.Add ("xdr", "video/x-amt-demorun");
                        mimeTypes.Add ("xgz", "xgl/drawing");
@@ -453,7 +453,7 @@ namespace System.Web
                        mimeTypes.Add ("xla", "application/excel");
                        mimeTypes.Add ("xlb", "application/excel");
                        mimeTypes.Add ("xlc", "application/excel");
-                       mimeTypes.Add ("xld ", "application/excel");
+                       mimeTypes.Add ("xld", "application/excel");
                        mimeTypes.Add ("xlk", "application/excel");
                        mimeTypes.Add ("xll", "application/excel");
                        mimeTypes.Add ("xlm", "application/excel");
index c175ebaff1ee639a6792d75ab166a2155c13baf2..116237e5917a7cdee0b13f1e46ecfa058c680f63 100644 (file)
@@ -35,7 +35,7 @@ using System.Text;
 using System.Configuration.Provider;
 
 namespace System.Web {
-       public sealed class SiteMap {
+       public abstract class SiteMap {
        
                internal SiteMap ()
                {
@@ -44,16 +44,14 @@ namespace System.Web {
                [MonoTODO ("Get everything from the config")]
                private static void Init ()
                {
-                       if (provider == null) {
-                               lock (locker) {
-                                       if (provider == null) {
-                                               providers = new SiteMapProviderCollection ();
-                                               provider = new XmlSiteMapProvider ();
-                                               NameValueCollection attributes = new NameValueCollection ();
-                                               attributes.Add ("siteMapFile", "app.sitemap");
-                                               ((ProviderBase)provider).Initialize ("AspNetXmlSiteMapProvider", attributes);
-                                               providers.Add ((ProviderBase)provider);
-                                       }
+                       lock (locker) {
+                               if (provider == null) {
+                                       providers = new SiteMapProviderCollection ();
+                                       provider = new XmlSiteMapProvider ();
+                                       NameValueCollection attributes = new NameValueCollection ();
+                                       attributes.Add ("siteMapFile", "Web.sitemap");
+                                       ((ProviderBase)provider).Initialize ("AspNetXmlSiteMapProvider", attributes);
+                                       providers.Add ((ProviderBase)provider);
                                }
                        }
                }
@@ -78,6 +76,11 @@ namespace System.Web {
                        }
                }
                
+               public event SiteMapResolveEventHandler SiteMapResolve {
+                       add { Provider.SiteMapResolve += value; }
+                       remove { Provider.SiteMapResolve -= value; }
+               }
+               
                static SiteMapProvider provider;
                static SiteMapProviderCollection providers;
                static object locker = new object ();
index 545fa2f9f1b3aa4e98e15d6acb105364d8336183..783068f9ea148a5580ffd5ce6a166483d512a668 100644 (file)
@@ -41,14 +41,16 @@ namespace System.Web {
        
                private SiteMapNode () {}
                
-               public SiteMapNode (SiteMapProvider provider, string key) : this (provider, key, null, null, null, null, null, null) {}
-               public SiteMapNode (SiteMapProvider provider, string key, string url) : this (provider, key, url, null, null, null, null, null) {}
-               public SiteMapNode (SiteMapProvider provider, string key, string url, string title) : this (provider, key, url, title, null, null, null, null) {}
-               public SiteMapNode (SiteMapProvider provider, string key, string url, string title, string description) : this (provider, key, url, title, description, null, null, null) {}
-               public SiteMapNode (SiteMapProvider provider, string key, string url, string title, string description, IList roles, NameValueCollection attributes, NameValueCollection resourceKeys)
+               public SiteMapNode (SiteMapProvider provider, string key) : this (provider, key, null, null, null, null, null, null, null) {}
+               public SiteMapNode (SiteMapProvider provider, string key, string url) : this (provider, key, url, null, null, null, null, null, null) {}
+               public SiteMapNode (SiteMapProvider provider, string key, string url, string title) : this (provider, key, url, title, null, null, null, null, null) {}
+               public SiteMapNode (SiteMapProvider provider, string key, string url, string title, string description) : this (provider, key, url, title, description, null, null, null, null) {}
+               public SiteMapNode (SiteMapProvider provider, string key, string url, string title, string description, IList roles, NameValueCollection attributes, NameValueCollection explicitResourceKeys, string implicitResourceKey)
                {
                        if (provider == null)
                                throw new ArgumentNullException ("provider");
+                       if (key == null)
+                               throw new ArgumentNullException ("key");
                        
                        this.provider = provider;
                        this.key = key;
@@ -57,7 +59,8 @@ namespace System.Web {
                        this.description = description;
                        this.roles = roles;
                        this.attributes = attributes;
-                       this.resourceKeys = resourceKeys;
+                       this.resourceKeys = explicitResourceKeys;
+                       this.implicitResourceKey = implicitResourceKey;
                }
 
                public SiteMapDataSourceView GetDataSourceView (SiteMapDataSource owner, string viewName)
@@ -70,10 +73,9 @@ namespace System.Web {
                        return new SiteMapHierarchicalDataSourceView (this);
                }
                
-               [MonoTODO]
                public bool IsAccessibleToUser (System.Web.HttpContext ctx)
                {
-                       throw new NotImplementedException ();
+                       return provider.IsAccessibleToUser (ctx, this);
                }
                
                public override string ToString()
@@ -81,7 +83,9 @@ namespace System.Web {
                        return Title;
                }
 
-               public virtual bool HasChildNodes { get { return ChildNodes != null && ChildNodes.Count != 0; } }
+               public virtual bool HasChildNodes {
+                       get { return ChildNodes != null && ChildNodes.Count != 0; }
+               }
 
                public SiteMapNodeCollection GetAllNodes ()
                {
@@ -161,10 +165,15 @@ namespace System.Web {
                        }
                }
                
-               [MonoTODO ("set")]
                public virtual SiteMapNodeCollection ChildNodes {
-                       get { return provider.GetChildNodes (this); } 
-                       set { CheckWritable (); }
+                       get {
+                               if (childNodes != null) return childNodes;
+                               return provider.GetChildNodes (this);
+                       } 
+                       set {
+                               CheckWritable ();
+                               childNodes = value;
+                       }
                }
 
                public virtual SiteMapNode RootNode { get { return provider.RootProvider.RootNode; }  }
@@ -179,7 +188,7 @@ namespace System.Web {
                }
                
                [MonoTODO]
-               protected string GetExplicitResourceString (string attributeName, bool b)
+               protected string GetExplicitResourceString (string attributeName, string defaultValue, bool throwIfNotFound)
                {
                        return null;
                }
@@ -196,13 +205,18 @@ namespace System.Web {
                        get {
                                string val = null;
                                if (provider.EnableLocalization) {
-                                       val = GetExplicitResourceString (key, true);
+                                       val = GetExplicitResourceString (key, null, true);
                                        if (val == null) val = GetImplicitResourceString (key);
                                }
                                if (val != null) return null;
                                if (attributes != null) return attributes [key];
                                return null;
                        }
+                       set {
+                               CheckWritable ();
+                               if (attributes == null) attributes = new NameValueCollection ();
+                               attributes [key] = value;
+                       }
                }
                
                object ICloneable.Clone ()
@@ -275,6 +289,7 @@ namespace System.Web {
                        set { CheckWritable (); attributes = value; }
                }
                
+               [Localizable (true)]
                public virtual string Description {
                        get { return description != null ? description : ""; }
                        set { CheckWritable (); description = value; }
@@ -344,6 +359,8 @@ namespace System.Web {
                bool readOnly;
                string resourceKey;
                SiteMapNode parent;
+               string implicitResourceKey;
+               SiteMapNodeCollection childNodes;
                #endregion
                
        }
index 79e685c1eb1f336766713e7eed391f18d7447fa6..2c5bd5e1478e33a4bb0f306ea56b37e122dec5e6 100644 (file)
@@ -3,8 +3,10 @@
 //
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
 //  (C) 2003 Ben Maurer
+//  (C) 2005 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -33,13 +35,82 @@ using System.Collections;
 using System.Collections.Specialized;
 using System.Text;
 using System.Web.UI;
+using System.Web.UI.WebControls;
 
-namespace System.Web {
-       public class SiteMapNodeCollection : CollectionBase, IHierarchicalEnumerable {
-               public SiteMapNodeCollection () {}
-               public SiteMapNodeCollection (SiteMapNode value) { Add (value); }
-               public SiteMapNodeCollection (SiteMapNode[] values) { AddRangeInternal (values); }
-               public SiteMapNodeCollection (SiteMapNodeCollection values) { AddRangeInternal (values); }
+namespace System.Web
+{
+       public class SiteMapNodeCollection : IList, IHierarchicalEnumerable
+       {
+               ArrayList list;
+               internal static SiteMapNodeCollection EmptyList;
+               
+               static SiteMapNodeCollection ()
+               {
+                       EmptyList = new SiteMapNodeCollection ();
+                       EmptyList.list = ArrayList.ReadOnly (new ArrayList ());
+               }
+               
+               public SiteMapNodeCollection ()
+               {
+               }
+               
+               public SiteMapNodeCollection (int capacity)
+               {
+                       list = new ArrayList (capacity);
+               }
+               
+               public SiteMapNodeCollection (SiteMapNode value)
+               {
+                       Add (value);
+               }
+               
+               public SiteMapNodeCollection (SiteMapNode[] values)
+               {
+                       AddRangeInternal (values);
+               }
+               
+               public SiteMapNodeCollection (SiteMapNodeCollection values)
+               {
+                       AddRangeInternal (values);
+               }
+               
+               internal static SiteMapNodeCollection EmptyCollection {
+                       get { return EmptyList; }
+               }
+               
+               ArrayList List {
+                       get {
+                               if (list == null) list = new ArrayList ();
+                               return list;
+                       }
+               }
+               
+               public virtual int Count {
+                       get { return list == null ? 0 : list.Count; }
+               }
+               
+               public virtual bool IsSynchronized {
+                       get { return false; }
+               }
+               
+               public virtual object SyncRoot {
+                       get { return this; }
+               }
+               
+               public virtual IEnumerator GetEnumerator ()
+               {
+                       return list != null ? list.GetEnumerator () : Type.EmptyTypes.GetEnumerator ();
+               }
+               
+               public virtual void Clear ()
+               {
+                       if (list != null) list.Clear ();
+               }
+               
+               public virtual void RemoveAt (int index)
+               {
+                       List.RemoveAt (index);
+               }
                
                public virtual int Add (SiteMapNode value)
                {
@@ -50,22 +121,22 @@ namespace System.Web {
                
                public virtual void AddRange (System.Web.SiteMapNode[] value)
                {
-                       this.OnAddRange (value);
                        this.AddRangeInternal (value);
                }
                
                public virtual void AddRange (SiteMapNodeCollection value)
                {
-                       this.OnAddRange (value);
                        this.AddRangeInternal (value);
                }
                
-               private void AddRangeInternal (IList value)
+               internal virtual void AddRangeInternal (IList value)
                {
                        if (value == null)
                                throw new ArgumentNullException ("value");
-                       this.InnerList.AddRange (value);
+
+                       List.AddRange (value);
                }
+
                public bool Contains (SiteMapNode value)
                {
                        return this.List.Contains (value);
@@ -76,11 +147,6 @@ namespace System.Web {
                        this.List.CopyTo (array, index);
                }
                
-//             public SiteMapDataSourceView GetDataSourceView ()
-//             {
-//                     return new SiteMapDataSourceView (this);
-//             }
-               
                public int IndexOf (SiteMapNode value)
                {
                        return this.List.IndexOf (value);
@@ -91,20 +157,20 @@ namespace System.Web {
                        this.List.Insert (index, value);
                }
                
-               protected virtual void OnAddRange (IList value)
+               protected virtual void OnValidate (object value)
                {
-               }
-               
-               protected override void OnValidate (object value)
-               {
-                       base.OnValidate (value);
-                       if (value as SiteMapNode == null)
+                       if (!(value is SiteMapNode))
                                throw new ArgumentException ("Invalid type");
                }
-               
+
                public static SiteMapNodeCollection ReadOnly (SiteMapNodeCollection collection)
                {
-                       return new ReadOnlySiteMapNodeCollection (collection);
+                       SiteMapNodeCollection col = new SiteMapNodeCollection ();
+                       if (collection.list != null)
+                               col.list = ArrayList.ReadOnly (collection.list);
+                       else
+                               col.list = ArrayList.ReadOnly (new ArrayList ());
+                       return col;
                }
                
                public virtual void Remove (SiteMapNode value)
@@ -112,11 +178,21 @@ namespace System.Web {
                        this.List.Remove (value);
                }
                
-               IHierarchyData System.Web.UI.IHierarchicalEnumerable.GetHierarchyData (object enumeratedItem)
+               public virtual IHierarchyData GetHierarchyData (object enumeratedItem)
                {
                        return enumeratedItem as IHierarchyData;
                }
                
+               public SiteMapDataSourceView GetDataSourceView (SiteMapDataSource owner, string viewName)
+               {
+                       return new SiteMapDataSourceView (owner, viewName, this);
+               }
+               
+               public SiteMapHierarchicalDataSourceView GetHierarchicalDataSourceView ()
+               {
+                       return new SiteMapHierarchicalDataSourceView (this);
+               }
+               
                public virtual SiteMapNode this [int index] {
                        get { return (SiteMapNode) this.List [index]; }
                        set { this.List [index] = value; }
@@ -127,21 +203,46 @@ namespace System.Web {
                }
 
                public virtual bool IsReadOnly {
-                       get { return List.IsReadOnly; }
+                       get { return list != null && list.IsReadOnly; }
+               }
+               
+               object IList.this [int index] {
+                       get { return List [index]; }
+                       set { OnValidate (value); List [index] = value; }
+               }
+               
+               int IList.Add (object value)
+               {
+                       OnValidate (value);
+                       return List.Add (value);
+               }
+               
+               bool IList.Contains (object value)
+               {
+                       return List.Contains (value);
+               }
+               
+               int IList.IndexOf (object value)
+               {
+                       return List.IndexOf (value);
+               }
+               
+               void IList.Insert (int index, object value)
+               {
+                       OnValidate (value);
+                       List.Insert (index, value);
+               }
+               
+               void IList.Remove (object value)
+               {
+                       OnValidate (value);
+                       List.Remove (value);
+               }
+               
+               void ICollection.CopyTo (Array array, int index)
+               {
+                       List.CopyTo (array, index);
                }
-
-               private class ReadOnlySiteMapNodeCollection : SiteMapNodeCollection {
-                       
-                       internal ReadOnlySiteMapNodeCollection (SiteMapNodeCollection collection) : base (collection) {}
-
-                       protected override void OnAddRange (IList value) { throw new NotSupportedException ("Readonly collection"); }
-                       protected override void OnClear () { throw new NotSupportedException ("Readonly collection"); }
-                       protected override void OnInsert (int index, object value) { throw new NotSupportedException ("Readonly collection"); }
-                       protected override void OnRemove (int index, object value) { throw new NotSupportedException ("Readonly collection"); }
-                       protected override void OnSet (int index, object oldValue, object newValue) { throw new NotSupportedException ("Readonly collection"); }
-                       public override bool IsReadOnly { get { return true; } }
-               }
-                
        }
 }
 #endif
index f65a07687c09fb8d1f1e740e8753ba0476e36e68..731c2773fed56c4ff25886cd2bd19aebb43dbd1c 100644 (file)
@@ -3,8 +3,10 @@
 //
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
 // (C) 2003 Ben Maurer
+// (C) 2005 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -40,214 +42,200 @@ namespace System.Web {
        public abstract class SiteMapProvider : ProviderBase {
                
                bool enableLocalization;
+               SiteMapProvider parentProvider;
+               SiteMapProvider rootProviderCache;
+               bool securityTrimming;
+               object resolveLock = new Object();
+               bool resolving;
                
-               public void AddNode (SiteMapNode node)
+               protected virtual void AddNode (SiteMapNode node)
                {
                        AddNode (node, null);
                }
                
-               public void AddNode (SiteMapNode node, SiteMapNode parentNode)
+               internal protected virtual void AddNode (SiteMapNode node, SiteMapNode parentNode)
                {
                        if (node == null)
                                throw new ArgumentNullException ("node");
+               }
+
+               public virtual SiteMapNode FindSiteMapNode (HttpContext context)
+               {
+                       if (context == null)
+                               throw new ArgumentNullException ("context");
                        
-                       lock (this) {
-                               string url = node.Url;
-                               if (url != null && url.Length > 0) {
-                                       
-                                       
-                                               if (UrlUtils.IsRelativeUrl (url))
-                                                       url = UrlUtils.Combine (HttpRuntime.AppDomainAppVirtualPath, url);
-                                               else
-                                                       url = UrlUtils.ResolveVirtualPathFromAppAbsolute (url);
-                                               
-                                               if (FindSiteMapNode (url) != null)
-                                                       throw new InvalidOperationException ();
-                                       
-                                       UrlToNode [url] = node;
-                               }
-                               
-                               if (parentNode != null) {
-                                       NodeToParent [node] = parentNode;
-                                       if (NodeToChildren [parentNode] == null)
-                                               NodeToChildren [parentNode] = new SiteMapNodeCollection ();
-                                       
-                                       ((SiteMapNodeCollection) NodeToChildren [parentNode]).Add (node);
-                               }
-                       }
+                       SiteMapNode ret = this.FindSiteMapNode (context.Request.RawUrl);
+                       if (ret == null)
+                               ret = this.FindSiteMapNode (context.Request.Path);
+                       return ret;
                }
+
+               public abstract SiteMapNode FindSiteMapNode (string rawUrl);
                
-               Hashtable nodeToParent;
-               Hashtable NodeToParent {
-                       get {
-                               if (nodeToParent == null) {
-                                       lock (this) {
-                                               if (nodeToParent == null)
-                                                       nodeToParent = new Hashtable ();
-                                       }
-                               }
-                               return nodeToParent;
-                       }
+               public virtual SiteMapNode FindSiteMapNodeFromKey (string key)
+               {
+                       if (key == null)
+                               throw new ArgumentNullException ("key");
+                       
+                       return null;
                }
+
+               public abstract SiteMapNodeCollection GetChildNodes (SiteMapNode node);
                
-               Hashtable nodeToChildren;
-               Hashtable NodeToChildren {
-                       get {
-                               if (nodeToChildren == null) {
-                                       lock (this) {
-                                               if (nodeToChildren == null)
-                                                       nodeToChildren = new Hashtable ();
-                                       }
-                               }
-                               return nodeToChildren;
-                       }
-               }
+               public abstract SiteMapNode GetParentNode (SiteMapNode node);
                
-               Hashtable urlToNode;
-               Hashtable UrlToNode {
-                       get {
-                               if (urlToNode == null) {
-                                       lock (this) {
-                                               if (urlToNode == null) {
-                                                       urlToNode = new Hashtable (
-                                                               CaseInsensitiveHashCodeProvider.DefaultInvariant,
-                                                               CaseInsensitiveComparer.DefaultInvariant
-                                                       );
-                                               }
-                                       }
-                               }
-                               return urlToNode;
-                       }
+               public virtual SiteMapNode GetCurrentNodeAndHintAncestorNodes (int upLevel)
+               {
+                       if (upLevel < -1) throw new ArgumentOutOfRangeException ("upLevel");
+
+                       return CurrentNode;
                }
                
-               protected virtual void Clear ()
+               public virtual SiteMapNode GetCurrentNodeAndHintNeighborhoodNodes (int upLevel, int downLevel)
                {
-                       lock (this) {
-                               if (urlToNode != null)
-                                       urlToNode.Clear ();
-                               if (nodeToChildren != null)
-                                       nodeToChildren.Clear ();
-                               if (nodeToParent != null)
-                                       nodeToParent.Clear ();
-                       }
+                       if (upLevel < -1) throw new ArgumentOutOfRangeException ("upLevel");
+                       if (downLevel < -1) throw new ArgumentOutOfRangeException ("downLevel");
+                       
+                       return CurrentNode;
                }
-
-               public virtual SiteMapNode FindSiteMapNode (string rawUrl)
+               
+               public virtual SiteMapNode GetParentNodeRelativeToCurrentNodeAndHintDownFromParent (int walkupLevels, int relativeDepthFromWalkup)
                {
-                       if (rawUrl == null)
-                               throw new ArgumentNullException ("rawUrl");
+                       if (walkupLevels < 0) throw new ArgumentOutOfRangeException ("walkupLevels");
+                       if (relativeDepthFromWalkup < 0) throw new ArgumentOutOfRangeException ("relativeDepthFromWalkup");
                        
-                       if (rawUrl.Length > 0) {
-                               this.BuildSiteMap();
-                               rawUrl = UrlUtils.ResolveVirtualPathFromAppAbsolute (rawUrl);
-                               return (SiteMapNode) UrlToNode [rawUrl];
-                       }
-                       return null;
+                       SiteMapNode node = GetCurrentNodeAndHintAncestorNodes (walkupLevels);
+                       for (int n=0; n<walkupLevels && node != null; n++)
+                               node = GetParentNode (node);
+                               
+                       if (node == null) return null;
+
+                       HintNeighborhoodNodes (node, 0, relativeDepthFromWalkup);
+                       return node;
                }
                
-               public virtual SiteMapNodeCollection GetChildNodes (SiteMapNode node)
+               public virtual SiteMapNode GetParentNodeRelativeToNodeAndHintDownFromParent (SiteMapNode node, int walkupLevels, int relativeDepthFromWalkup)
                {
-                       if (node == null)
-                               throw new ArgumentNullException ("node");
+                       if (walkupLevels < 0) throw new ArgumentOutOfRangeException ("walkupLevels");
+                       if (relativeDepthFromWalkup < 0) throw new ArgumentOutOfRangeException ("relativeDepthFromWalkup");
+                       if (node == null) throw new ArgumentNullException ("node");
                        
-                       this.BuildSiteMap();
-                       SiteMapNodeCollection ret = (SiteMapNodeCollection) NodeToChildren [node];
-                       
-                       if (ret != null)
-                               return SiteMapNodeCollection.ReadOnly (ret);
+                       HintAncestorNodes (node, walkupLevels);
+                       for (int n=0; n<walkupLevels && node != null; n++)
+                               node = GetParentNode (node);
+                               
+                       if (node == null) return null;
                        
-                       return null;
+                       HintNeighborhoodNodes (node, 0, relativeDepthFromWalkup);
+                       return node;
                }
                
-               public virtual SiteMapNode GetParentNode(SiteMapNode node) {
-                       if (node == null)
-                               throw new ArgumentNullException ("node");
-                       this.BuildSiteMap();
-                       return (SiteMapNode) NodeToParent [node];
+               protected internal abstract SiteMapNode GetRootNodeCore ();
+               
+               protected static SiteMapNode GetRootNodeCoreFromProvider (SiteMapProvider provider)
+               {
+                       return provider.GetRootNodeCore ();
                }
                
-               public void RemoveNode (SiteMapNode node)
+               public virtual void HintAncestorNodes (SiteMapNode node, int upLevel)
+               {
+                       if (upLevel < -1) throw new ArgumentOutOfRangeException ("upLevel");
+                       if (node == null) throw new ArgumentNullException ("node");
+               }
+               
+               public virtual void HintNeighborhoodNodes (SiteMapNode node, int upLevel, int downLevel)
+               {
+                       if (upLevel < -1) throw new ArgumentOutOfRangeException ("upLevel");
+                       if (downLevel < -1) throw new ArgumentOutOfRangeException ("downLevel");
+                       if (node == null) throw new ArgumentNullException ("node");
+               }
+               
+               public virtual void RemoveNode (SiteMapNode node)
                {
-       
                        if (node == null)
                                throw new ArgumentNullException("node");
-                       
-                       lock (this) {
-                               SiteMapNode parent = (SiteMapNode) NodeToParent [node];
-                               if (NodeToParent.Contains (node))
-                                       NodeToParent.Remove (node);
-                               
-                               if (node.Url != null && node.Url.Length > 0 && UrlToNode.Contains (node.Url))
-                                       UrlToNode.Remove (node.Url);
-                               
-                               if (parent != null) {
-                                       SiteMapNodeCollection siblings = (SiteMapNodeCollection) NodeToChildren [node];
-                                       if (siblings != null && siblings.Contains (node))
-                                               siblings.Remove (node);
-                               }
-                       }
                }
 
                public override void Initialize (string name, NameValueCollection attributes)
-               { 
-                       if (attributes != null)
-                               description = attributes ["description"];
+               {
+                       base.Initialize (name, attributes);
+                       if (attributes["securityTrimmingEnabled"] != null)
+                               securityTrimming = (bool) Convert.ChangeType (attributes ["securityTrimmingEnabled"], typeof(bool));
+               }
                
+               [MonoTODO]
+               public virtual bool IsAccessibleToUser (HttpContext context, SiteMapNode node)
+               {
+                       return true;
                }
                
                public virtual SiteMapNode CurrentNode {
                        get {
-                               SiteMapNode ret;
-                               
                                if (HttpContext.Current != null) {
-                                       ret = this.FindSiteMapNode (HttpContext.Current.Request.RawUrl);
-                                       if (ret == null)
-                                               ret = this.FindSiteMapNode (HttpContext.Current.Request.Path);
-
-                                       return ret;
-                               }
-                               
-                               return null;
+                                       SiteMapNode ret = ResolveSiteMapNode (HttpContext.Current);
+                                       if (ret != null) return ret;
+                                       return FindSiteMapNode (HttpContext.Current);
+                               } else
+                                       return null;
                        }
                }
                
-               string description;
-               public virtual string Description {
-                       get { return description != null ? description : "SiteMapProvider"; }
-               }
-               
-               SiteMapProvider parentProvider;
                public virtual SiteMapProvider ParentProvider {
                        get { return parentProvider; }
                        set { parentProvider = value; }
                }
                
-               SiteMapProvider rootProviderCache;
                public virtual SiteMapProvider RootProvider {
                        get {
-                               if (rootProviderCache == null) {
-                                       lock (this) {
-                                               if (rootProviderCache == null) {
-                                                       SiteMapProvider current = this;
-                                                       while (current.ParentProvider != null)
-                                                               current = current.ParentProvider;
-                                                       
-                                                       rootProviderCache = current;
-                                               }
+                               lock (this) {
+                                       if (rootProviderCache == null) {
+                                               SiteMapProvider current = this;
+                                               while (current.ParentProvider != null)
+                                                       current = current.ParentProvider;
+                                               
+                                               rootProviderCache = current;
                                        }
                                }
                                return rootProviderCache;
                        }
                }
                
+               protected SiteMapNode ResolveSiteMapNode (HttpContext context)
+               {
+                       SiteMapResolveEventArgs args = new SiteMapResolveEventArgs (context, this);
+                       if (SiteMapResolve != null) {
+                               lock (resolveLock) {
+                                       if (resolving) return null;
+                                       resolving = true;
+                                       SiteMapNode r = SiteMapResolve (this, args);
+                                       resolving = false;
+                                       return r;
+                               }
+                       }
+                       else
+                               return null;
+               }
+               
                public bool EnableLocalization {
                        get { return enableLocalization; }
                        set { enableLocalization = value; }
                }
+               
+               public bool SecurityTrimmingEnabled {
+                       get { return securityTrimming; }
+               }
 
-               public abstract SiteMapNode BuildSiteMap ();
-               public abstract SiteMapNode RootNode { get; }
+               public virtual SiteMapNode RootNode {
+                       get {
+                               SiteMapNode node = GetRootNodeCore ();
+                               if (IsAccessibleToUser (HttpContext.Current, node))
+                                       return node;
+                               else
+                                       return null;
+                       }
+               }
        
+               public event SiteMapResolveEventHandler SiteMapResolve;
        }
 }
 #endif
index a081829c9f93512d22f4b22075f3f72697bc947b..324744fe987bc2806195b0c1bf98536aefeb2880 100644 (file)
@@ -3,8 +3,10 @@
 //
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
-// (C) 2003 Ben Maurer
+//  (C) 2003 Ben Maurer
+//  (C) 2005 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -36,7 +38,7 @@ using System.Configuration.Provider;
 using System.Web.UI;
 
 namespace System.Web {
-       public class SiteMapProviderCollection : ProviderCollection
+       public sealed class SiteMapProviderCollection : ProviderCollection
        {
                public SiteMapProviderCollection () {}
                
@@ -44,22 +46,27 @@ namespace System.Web {
                {
                        if (provider == null)
                                throw new ArgumentNullException ("provider");
-                       if ((provider as SiteMapProvider) == null)
+                       if (!(provider is SiteMapProvider))
                                throw new InvalidOperationException(String.Format ("{0} must implement {1} to act as a site map provider", provider.GetType (), typeof (SiteMapProvider)));
-                       
+                       if (this [provider.Name] != null)
+                               throw new ArgumentException ("Duplicate site map providers");
                        base.Add (provider);
                }
                
-               public virtual void AddArray (ProviderBase[] providerArray)
-               {                       
-                       foreach (ProviderBase p in providerArray) {
-                               if (this [p.Name] != null)
-                                       throw new ArgumentException ("Duplicate site map providers");
+               public void Add (SiteMapProvider provider)
+               {
+                       Add ((ProviderBase)provider);
+               }
+               
+               public void AddArray (SiteMapProvider[] providerArray)
+               {
+                       foreach (SiteMapProvider p in providerArray)
                                Add (p);
-                       }
                }
                
-               public new SiteMapProvider this [string name] { get { return (SiteMapProvider) base [name]; } }
+               public new SiteMapProvider this [string name] {
+                       get { return (SiteMapProvider) base [name]; }
+               }
        }
 }
 #endif
diff --git a/mcs/class/System.Web/System.Web/StaticSiteMapProvider.cs b/mcs/class/System.Web/System.Web/StaticSiteMapProvider.cs
new file mode 100644 (file)
index 0000000..cb119ca
--- /dev/null
@@ -0,0 +1,228 @@
+//
+// System.Web.StaticSiteMapProvider.cs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+// (C) 2005 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_2_0
+using System.Collections;
+using System.Collections.Specialized;
+using System.Text;
+using System.Configuration.Provider;
+using System.Web.Util;
+using System.Globalization;
+
+namespace System.Web
+{
+       public abstract class StaticSiteMapProvider : SiteMapProvider
+       {
+               Hashtable nodeToParent;
+               Hashtable nodeToChildren;
+               Hashtable urlToNode;
+               Hashtable keyToNode;
+               
+               internal protected override void AddNode (SiteMapNode node, SiteMapNode parentNode)
+               {
+                       if (node == null)
+                               throw new ArgumentNullException ("node");
+                       
+                       lock (this) {
+                               string url = node.Url;
+                               if (url != null && url.Length > 0) {
+                                       if (UrlUtils.IsRelativeUrl (url))
+                                               url = UrlUtils.Combine (HttpRuntime.AppDomainAppVirtualPath, url);
+                                       else
+                                               url = UrlUtils.ResolveVirtualPathFromAppAbsolute (url);
+                                       
+                                       if (FindSiteMapNode (url) != null)
+                                               throw new InvalidOperationException ();
+                               
+                                       UrlToNode [url] = node;
+                               }
+                               
+                               if (FindSiteMapNodeFromKey (node.Key) != null)
+                                       throw new InvalidOperationException (string.Format ("A node with key {0} already exists.",node.Key));
+                               KeyToNode [node.Key] = node;
+                               
+                               if (parentNode != null) {
+                                       NodeToParent [node] = parentNode;
+                                       if (NodeToChildren [parentNode] == null)
+                                               NodeToChildren [parentNode] = new SiteMapNodeCollection ();
+                                       
+                                       ((SiteMapNodeCollection) NodeToChildren [parentNode]).Add (node);
+                               }
+                       }
+               }
+               
+               Hashtable NodeToParent {
+                       get {
+                               lock (this) {
+                                       if (nodeToParent == null)
+                                               nodeToParent = new Hashtable ();
+                               }
+                               return nodeToParent;
+                       }
+               }
+               
+               Hashtable NodeToChildren {
+                       get {
+                               lock (this) {
+                                       if (nodeToChildren == null)
+                                               nodeToChildren = new Hashtable ();
+                               }
+                               return nodeToChildren;
+                       }
+               }
+               
+               Hashtable UrlToNode {
+                       get {
+                               lock (this) {
+                                       if (urlToNode == null) {
+                                               urlToNode = new Hashtable (
+                                                       CaseInsensitiveHashCodeProvider.DefaultInvariant,
+                                                       CaseInsensitiveComparer.DefaultInvariant
+                                               );
+                                       }
+                               }
+                               return urlToNode;
+                       }
+               }
+               
+               Hashtable KeyToNode {
+                       get {
+                               lock (this) {
+                                       if (keyToNode == null)
+                                               keyToNode = new Hashtable ();
+                               }
+                               return keyToNode;
+                       }
+               }
+               
+               protected virtual void Clear ()
+               {
+                       lock (this) {
+                               if (urlToNode != null)
+                                       urlToNode.Clear ();
+                               if (nodeToChildren != null)
+                                       nodeToChildren.Clear ();
+                               if (nodeToParent != null)
+                                       nodeToParent.Clear ();
+                               if (keyToNode != null)
+                                       keyToNode.Clear ();
+                       }
+               }
+
+               public override SiteMapNode FindSiteMapNode (string rawUrl)
+               {
+                       if (rawUrl == null)
+                               throw new ArgumentNullException ("rawUrl");
+                       
+                       if (rawUrl.Length > 0) {
+                               this.BuildSiteMap();
+                               rawUrl = UrlUtils.ResolveVirtualPathFromAppAbsolute (rawUrl);
+                               SiteMapNode node = (SiteMapNode) UrlToNode [rawUrl];
+                               if (node != null && IsAccessibleToUser (HttpContext.Current, node))
+                                       return node;
+                       }
+                       return null;
+               }
+
+               public override SiteMapNodeCollection GetChildNodes (SiteMapNode node)
+               {
+                       if (node == null)
+                               throw new ArgumentNullException ("node");
+                       
+                       this.BuildSiteMap();
+                       SiteMapNodeCollection col = (SiteMapNodeCollection) NodeToChildren [node];
+                       if (col == null) return SiteMapNodeCollection.EmptyCollection;
+                       
+                       SiteMapNodeCollection ret = null;
+                       for (int n=0; n<col.Count; n++) {
+                               if (!IsAccessibleToUser (HttpContext.Current, col[n])) {
+                                       if (ret == null) {
+                                               ret = new SiteMapNodeCollection ();
+                                               for (int m=0; m<n; m++)
+                                                       ret.Add (col[m]);
+                                       }
+                               } else if (ret != null)
+                                       ret.Add (col[n]);
+                       }
+                       
+                       if (ret != null) {
+                               if (ret.Count > 0)
+                                       return SiteMapNodeCollection.ReadOnly (ret);
+                       } else
+                               return SiteMapNodeCollection.ReadOnly (col);
+                       
+                       return null;
+               }
+               
+               public override SiteMapNode GetParentNode (SiteMapNode node)
+               {
+                       if (node == null)
+                               throw new ArgumentNullException ("node");
+                       this.BuildSiteMap();
+                       SiteMapNode parent = (SiteMapNode) NodeToParent [node];
+                       return parent != null && IsAccessibleToUser (HttpContext.Current, parent) ? parent : null;
+               }
+               
+               public override void RemoveNode (SiteMapNode node)
+               {
+                       if (node == null)
+                               throw new ArgumentNullException("node");
+                       
+                       lock (this) {
+                               SiteMapNode parent = (SiteMapNode) NodeToParent [node];
+                               if (NodeToParent.Contains (node))
+                                       NodeToParent.Remove (node);
+                               
+                               if (node.Url != null && node.Url.Length > 0 && UrlToNode.Contains (node.Url))
+                                       UrlToNode.Remove (node.Url);
+                               
+                               if (parent != null) {
+                                       SiteMapNodeCollection siblings = (SiteMapNodeCollection) NodeToChildren [node];
+                                       if (siblings != null && siblings.Contains (node))
+                                               siblings.Remove (node);
+                               }
+                       }
+               }
+               
+               public override SiteMapNode FindSiteMapNodeFromKey (string key)
+               {
+                       if (key == null)
+                               throw new ArgumentNullException ("key");
+                       
+                       SiteMapNode ret = (SiteMapNode) KeyToNode [key];
+                       return ret != null && IsAccessibleToUser (HttpContext.Current, ret) ? ret : null;
+               }
+
+               public abstract SiteMapNode BuildSiteMap ();
+       }
+}
+#endif
+
index 6e0f8d54a2795738953bb4796d2a407baba19b93..729b9bc9c91fda8ea5e8ead15cd4fbff1cc247b0 100644 (file)
@@ -3,8 +3,10 @@
 //
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
 //
 // (C) 2003 Ben Maurer
+// (C) 2005 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -37,10 +39,15 @@ using System.Xml;
 using System.Web.Util;
 using System.IO;
 
-namespace System.Web {
-       public class XmlSiteMapProvider : SiteMapProvider, IDisposable {
+namespace System.Web
+{
+       public class XmlSiteMapProvider : StaticSiteMapProvider, IDisposable
+       {
                static readonly char [] seperators = { ';', ',' };
                bool building;
+               string file;
+               SiteMapNode root = null;
+               FileSystemWatcher watcher;
                
                public override SiteMapNode BuildSiteMap ()
                {
@@ -52,15 +59,23 @@ namespace System.Web {
                                return null;
                        
                        lock (this) {
-                               building = true;
-                               if (root != null)
-                                       return root;
-                               XmlDocument d = new XmlDocument ();
-                               d.Load (file);
-                               
-                               root = BuildSiteMapRecursive (d.SelectSingleNode ("/siteMap/siteMapNode"));
-                               AddNode (root);
-                               building = false;
+                               try {
+                                       building = true;
+                                       if (root != null)
+                                               return root;
+                                       XmlDocument d = new XmlDocument ();
+                                       d.Load (file);
+                                       
+                                       XmlNode nod = d.DocumentElement ["siteMapNode"];
+                                       if (nod == null)
+                                               throw new HttpException ("Invalid site map file: " + Path.GetFileName (file));
+                                               
+                                       root = BuildSiteMapRecursive (nod);
+                                               
+                                       AddNode (root);
+                               } finally {
+                                       building = false;
+                               }
                                return root;
                        }
                }
@@ -78,7 +93,6 @@ namespace System.Web {
                [MonoTODO]
                SiteMapNode BuildSiteMapRecursive (XmlNode xmlNode)
                {
-
                        if (xmlNode.Name != "siteMapNode")
                                throw new ConfigurationException ("incorrect element name", xmlNode);
                        
@@ -98,7 +112,7 @@ namespace System.Web {
                                string roles = GetOptionalAttribute (xmlNode, "roles");
                                
                                ArrayList keywordsList = new ArrayList ();
-                               if (keywords != null) {
+                               if (keywords != null && keywords.Length > 0) {
                                        foreach (string s in keywords.Split (seperators)) {
                                                string ss = s.Trim ();
                                                if (ss.Length > 0)
@@ -107,7 +121,7 @@ namespace System.Web {
                                }
                                
                                ArrayList rolesList = new ArrayList ();
-                               if (roles != null) {
+                               if (roles != null && roles.Length > 0) {
                                        foreach (string s in roles.Split (seperators)) {
                                                string ss = s.Trim ();
                                                if (ss.Length > 0)
@@ -115,10 +129,10 @@ namespace System.Web {
                                        }
                                }
                                
-                               SiteMapNode node = new SiteMapNode (this, null, url, title, description,
+                               SiteMapNode node = new SiteMapNode (this, url, url, title, description,
                                        /*ArrayList.ReadOnly (keywordsList), */ArrayList.ReadOnly (rolesList), null,
-                                       null); // TODO what do they want for attributes
-                               
+                                       null, null); // TODO what do they want for attributes
+                                       
                                foreach (XmlNode child in xmlNode.ChildNodes) {
                                        if (child.NodeType != XmlNodeType.Element)
                                                continue;
@@ -135,10 +149,9 @@ namespace System.Web {
                        root = null;
                }
 
-               [MonoTODO]
                public void Dispose ()
                {
-                       // what do i do?
+                       watcher.Dispose ();
                }
                
                [MonoTODO]
@@ -160,6 +173,19 @@ namespace System.Web {
                                file = Path.Combine(HttpRuntime.AppDomainAppPath, file);
                        else
                                file = UrlUtils.ResolvePhysicalPathFromAppAbsolute (file);
+                               
+                       if (File.Exists (file)) {
+                               watcher = new FileSystemWatcher ();
+                               watcher.Path = Path.GetFullPath (Path.GetDirectoryName (file));
+                               watcher.Filter = Path.GetFileName (file);
+                               watcher.Changed += new FileSystemEventHandler (OnFileChanged);
+                               watcher.EnableRaisingEvents = true;
+                       }
+               }
+               
+               void OnFileChanged (object sender, FileSystemEventArgs args)
+               {
+                       Clear ();
                }
 
                public override SiteMapNode RootNode {
@@ -169,8 +195,10 @@ namespace System.Web {
                        }
                }
                
-               string file;
-               SiteMapNode root = null;
+               protected internal override SiteMapNode GetRootNodeCore ()
+               {
+                       return BuildSiteMap ();
+               }
        }
 
 }
index 8a628dd35a52570f28aceb4fef35dd4cdcb67664..334cbfce1bb8ce77aac50830edd43c219bb38b75 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-25  Raja R Harinath  <rharinath@novell.com>
+
+       * Makefile (EXTRA_DISTFILES): Remove System.Xml.Query/skeleton-2.0.cs.
+
 2005-05-23  Atsushi Enomoto  <atsushi@ximian.com>
 
        * System.Xml.Query : removed the whole directory (removed from .net 2.0)
index 90cbb9f25217d2f58a6f8bd382a5bebb4354221f..0d6ea3bf1ae17131e1c9696ba861c2e4b1e377f0 100644 (file)
@@ -40,7 +40,6 @@ EXTRA_DISTFILES = \
        $(wildcard System.Xml.Serialization/standalone_tests/*.cs) \
        $(wildcard System.Xml.Serialization/standalone_tests/*.output) \
        System.Xml.XPath/Parser.jay     \
-       System.Xml.Query/skeleton-2.0.cs        \
        Test/Microsoft.Test.csproj      \
        Test/Mono.Test.csproj           \
        Test/MonoMicro.Test.csproj      \
index 358c884e8f9321a57c5a2b39e020596b0c5cca90..6cbe24cf02ef7fe3f1b56062aba12df3e2164881 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-25  Andrew Skiba  <andrews@mainsoft.com>
+
+       * W3C : directory added
+
 2005-05-10  Atsushi Enomoto <atsushi@ximian.com>
 
        * XmlValidatingReaderTests.cs : fixed TestPreserveEntityNotOnDotNet()
diff --git a/mcs/class/System.XML/Test/System.Xml/W3C/ChangeLog b/mcs/class/System.XML/Test/System.Xml/W3C/ChangeLog
new file mode 100644 (file)
index 0000000..fe80067
--- /dev/null
@@ -0,0 +1,3 @@
+2005-05-25  Andrew Skiba  <andrews@mainsoft.com>
+
+       * README : added
diff --git a/mcs/class/System.XML/Test/System.Xml/W3C/README b/mcs/class/System.XML/Test/System.Xml/W3C/README
new file mode 100644 (file)
index 0000000..cfb2d03
--- /dev/null
@@ -0,0 +1 @@
+This directory contains XML W3C Conformance Test Suite. See http://www.w3.org/XML/Test/ for more details
index b9f220e7228638bb724033d595fb84301ee0ee63..075d0ea9b6585259398ad03aa603d49e89b10515 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-28  Kornél Pál <kornelpal@hotmail.com>
+
+       * System_test.dll.sources: Added TimerTest.cs.
+
 2005-05-20  Sebastien Pouliot  <sebastien@ximian.com>
 
        * System_test.dll.sources: Added new CAS unit tests for NetworkStream,
 
        * list list.unix: Removed Compiler classes that are being moved to their own assembly
 
-2002-12-05 Alejandro Sánchez Acosta  <raciel@gnome.org>
+2002-12-05 Alejandro Sánchez Acosta  <raciel@gnome.org>
 
        * list.unix: updated.
 
-2002-11-30 Alejandro Sánchez Acosta  <raciel@es.gnu.org>
+2002-11-30 Alejandro Sánchez Acosta  <raciel@es.gnu.org>
 
        * list.unix: Changed.
        * System.ComponentModel.Design: Added
index d15b1abbaae6d956bd58f52348e21e59bc31f34c..e603dfd9ef37647df1183c778733908fb25115f0 100755 (executable)
@@ -37,12 +37,13 @@ namespace System.ComponentModel {
        public class CategoryAttribute : Attribute
        {
                private string category;
-               private bool IsLocalized = false;
+               private bool IsLocalized;
 
-               static CategoryAttribute action, appearance, behaviour, data,   def;
-               static CategoryAttribute design, drag_drop,  focus,     format, key;
-               static CategoryAttribute layout, mouse,      window_style;
+               static volatile CategoryAttribute action, appearance, behaviour, data,   def;
+               static volatile CategoryAttribute design, drag_drop,  focus,     format, key;
+               static volatile CategoryAttribute layout, mouse,      window_style;
 
+               static object lockobj = new object ();
 
                public CategoryAttribute ()
                {
@@ -60,7 +61,7 @@ namespace System.ComponentModel {
                                if (action != null)
                                        return action;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (action == null)
                                                action = new CategoryAttribute ("Action");
                                }
@@ -73,7 +74,7 @@ namespace System.ComponentModel {
                                if (appearance != null)
                                        return appearance;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (appearance == null)
                                                appearance = new CategoryAttribute ("Appearance");
                                }
@@ -86,7 +87,7 @@ namespace System.ComponentModel {
                                if (behaviour != null)
                                        return behaviour;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (behaviour == null)
                                                behaviour = new CategoryAttribute ("Behavior");
                                }
@@ -99,7 +100,7 @@ namespace System.ComponentModel {
                                if (data != null)
                                        return data;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (data == null)
                                                data = new CategoryAttribute ("Data");
                                }
@@ -112,7 +113,7 @@ namespace System.ComponentModel {
                                if (def != null)
                                        return def;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (def == null)
                                                def = new CategoryAttribute ();
                                }
@@ -125,7 +126,7 @@ namespace System.ComponentModel {
                                if (design != null)
                                        return design;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (design == null)
                                                design = new CategoryAttribute ("Design");
                                }
@@ -138,7 +139,7 @@ namespace System.ComponentModel {
                                if (drag_drop != null)
                                        return drag_drop;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (drag_drop == null)
                                                drag_drop = new CategoryAttribute ("Drag Drop");
                                }
@@ -151,7 +152,7 @@ namespace System.ComponentModel {
                                if (focus != null)
                                        return focus;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (focus == null)
                                                focus = new CategoryAttribute ("Focus");
                                }
@@ -164,7 +165,7 @@ namespace System.ComponentModel {
                                if (format != null)
                                        return format;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (format == null)
                                                format = new CategoryAttribute ("Format");
                                }
@@ -177,7 +178,7 @@ namespace System.ComponentModel {
                                if (key != null)
                                        return key;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (key == null)
                                                key = new CategoryAttribute ("Key");
                                }
@@ -190,7 +191,7 @@ namespace System.ComponentModel {
                                if (layout != null)
                                        return layout;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (layout == null)
                                                layout = new CategoryAttribute ("Layout");
                                }
@@ -203,7 +204,7 @@ namespace System.ComponentModel {
                                if (mouse != null)
                                        return mouse;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (mouse == null)
                                                mouse = new CategoryAttribute ("Mouse");
                                }
@@ -216,7 +217,7 @@ namespace System.ComponentModel {
                                if (window_style != null)
                                        return window_style;
 
-                               lock (typeof (CategoryAttribute)) {
+                               lock (lockobj) {
                                        if (window_style == null)
                                                window_style = new CategoryAttribute ("Window Style");
                                }
index 77c0661308b4a5806ec848069e9d25a53da87a82..332e78f8b0606af2ee718fb49705395c9e3aff6b 100644 (file)
@@ -36,8 +36,10 @@ namespace System.ComponentModel
 {
        public sealed class LicenseManager
        {
-               private static LicenseContext mycontext = null;
-               private static object contextLockUser = null;
+               static LicenseContext mycontext;
+               static object contextLockUser;
+               
+               static object lockObject = new object ();
 
                private LicenseManager ()
                {
@@ -45,7 +47,7 @@ namespace System.ComponentModel
 
                public static LicenseContext CurrentContext {
                        get {
-                               lock (typeof(LicenseManager)) {
+                               lock (lockObject) {
                                        //Tests indicate a System.ComponentModel.Design.RuntimeLicenseContext should be returned.
                                        if  (mycontext==null)
                                                mycontext = new Design.RuntimeLicenseContext();
@@ -53,7 +55,7 @@ namespace System.ComponentModel
                                }
                        } 
                        set { 
-                               lock (typeof(LicenseManager)) {
+                               lock (lockObject) {
                                        if (contextLockUser==null) {
                                                mycontext = value;
                                        } else {
@@ -80,17 +82,17 @@ namespace System.ComponentModel
                                                        object[] args)
                {
                        object newObject = null;
-                       lock (typeof (LicenseManager)) {
-                               object lockObject = new object ();
+                       lock (lockObject) {
+                               object contextUser = new object ();
                                LicenseContext oldContext = CurrentContext;
                                CurrentContext = creationContext;
-                               LockContext (lockObject);
+                               LockContext (contextUser);
                                try {
                                        newObject = Activator.CreateInstance (type, args);
                                } catch (Reflection.TargetInvocationException exception) {
                                        throw exception.InnerException;
                                } finally {
-                                       UnlockContext (lockObject);
+                                       UnlockContext (contextUser);
                                        CurrentContext = oldContext;
                                }
                        }
@@ -131,14 +133,14 @@ namespace System.ComponentModel
 
                public static void LockContext (object contextUser)
                {
-                       lock (typeof (LicenseManager)) {
+                       lock (lockObject) {
                                contextLockUser = contextUser;
                        }
                }
 
                public static void UnlockContext (object contextUser)
                {
-                       lock (typeof(LicenseManager)) {
+                       lock (lockObject) {
                                //Ignore if we're not locked
                                if (contextLockUser == null)
                                        return;
index b02def2f17c4a5462ce9a282d2f69fb58622289b..fe8070ca4fed26d427495c15c792a8ffbe8d5801 100644 (file)
@@ -46,19 +46,14 @@ namespace System.Configuration
 {
        public sealed class ConfigurationSettings
        {
-               static IConfigurationSystem config;
-                       
+               static IConfigurationSystem config = DefaultConfig.GetInstance ();
+               static object lockobj = new object ();
                private ConfigurationSettings ()
                {
                }
 
                public static object GetConfig (string sectionName)
                {
-                       lock (typeof (ConfigurationSettings)) {
-                               if (config == null)
-                                       config = DefaultConfig.GetInstance ();
-                       }
-
                        return config.GetConfig (sectionName);
                }
 
@@ -98,10 +93,7 @@ namespace System.Configuration
                        if (newSystem == null)
                                throw new ArgumentNullException ("newSystem");
 
-                       lock (typeof (ConfigurationSettings)) {
-                               if (config == null)
-                                       config = DefaultConfig.GetInstance ();
-
+                       lock (lockobj) {
                                IConfigurationSystem old = config;
                                config = newSystem;
                                return old;
@@ -115,20 +107,15 @@ namespace System.Configuration
        //
        class DefaultConfig : IConfigurationSystem
        {
-               static DefaultConfig instance;
+               static readonly DefaultConfig instance = new DefaultConfig ();
                ConfigurationData config;
-
+               
                private DefaultConfig ()
                {
                }
 
                public static DefaultConfig GetInstance ()
                {
-                       lock (typeof (DefaultConfig)) {
-                               if (instance == null)
-                                       instance = new DefaultConfig ();
-                       }
-
                        return instance;
                }
 
index 7815c5c0cf4845ae2f758a045e2cb563ee96656c..9549d015731c090c274bde77f6da75cb402c5980 100755 (executable)
@@ -1,3 +1,9 @@
+2005-05-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * FAMWatcher.cs: move the call to StartMonitoringDirectory out of any
+       locks. Before, for a high amount of subdirectories (~500) it hanged
+       after filling the write buffer of FAM socket. Fixes bug #74398.
+
 2005-04-05  Lluis Sanchez Gual  <lluis@novell.com>
 
        * FAMWatcher.cs: Fix cast exception when disposing watchers.
index bc4bca41edc747213a208f0d95363f780de937a5..1a02cdb1b62641097b83bcaf82afae2ed45c69e4 100644 (file)
@@ -63,18 +63,17 @@ namespace System.IO {
                {
                }
                
+               // Locked by caller
                public static bool GetInstance (out IFileWatcher watcher)
                {
-                       lock (typeof (DefaultWatcher)) {
-                               if (instance != null) {
-                                       watcher = instance;
-                                       return true;
-                               }
-
-                               instance = new DefaultWatcher ();
+                       if (instance != null) {
                                watcher = instance;
                                return true;
                        }
+
+                       instance = new DefaultWatcher ();
+                       watcher = instance;
+                       return true;
                }
                
                public void StartDispatching (FileSystemWatcher fsw)
index c6d1a61aad8335067f2e386adb0464e25d818b70..c2998f3fcecb820f4a20842080ecbb6670b31a31 100644 (file)
@@ -82,31 +82,30 @@ namespace System.IO {
                {
                }
                
+               // Locked by caller
                public static bool GetInstance (out IFileWatcher watcher)
                {
-                       lock (typeof (FAMWatcher)) {
-                               if (failed == true) {
-                                       watcher = null;
-                                       return false;
-                               }
-
-                               if (instance != null) {
-                                       watcher = instance;
-                                       return true;
-                               }
-
-                               watches = Hashtable.Synchronized (new Hashtable ());
-                               requests = Hashtable.Synchronized (new Hashtable ());
-                               if (FAMOpen (out conn) == -1) {
-                                       failed = true;
-                                       watcher = null;
-                                       return false;
-                               }
+                       if (failed == true) {
+                               watcher = null;
+                               return false;
+                       }
 
-                               instance = new FAMWatcher ();
+                       if (instance != null) {
                                watcher = instance;
                                return true;
                        }
+
+                       watches = Hashtable.Synchronized (new Hashtable ());
+                       requests = Hashtable.Synchronized (new Hashtable ());
+                       if (FAMOpen (out conn) == -1) {
+                               failed = true;
+                               watcher = null;
+                               return false;
+                       }
+
+                       instance = new FAMWatcher ();
+                       watcher = instance;
+                       return true;
                }
                
                public void StartDispatching (FileSystemWatcher fsw)
@@ -132,8 +131,8 @@ namespace System.IO {
                                        data.SubDirs = new Hashtable ();
 
                                data.Enabled = true;
+                               StartMonitoringDirectory (data);
                                lock (this) {
-                                       StartMonitoringDirectory (data);
                                        watches [fsw] = data;
                                        requests [data.Request.ReqNum] = data;
                                        stop = false;
@@ -224,6 +223,7 @@ namespace System.IO {
 
                void ProcessEvents ()
                {
+                       ArrayList newdirs = null;
                        lock (this) {
                                do {
                                        int code;
@@ -286,6 +286,9 @@ namespace System.IO {
                                                }
 
                                                if (fa == FileAction.Added && Directory.Exists (datadir)) {
+                                                       if (newdirs == null)
+                                                               newdirs = new ArrayList (4);
+
                                                        FAMData fd = new FAMData ();
                                                        fd.FSW = fsw;
                                                        fd.Directory = datadir;
@@ -293,15 +296,8 @@ namespace System.IO {
                                                        fd.IncludeSubdirs = true;
                                                        fd.SubDirs = new Hashtable ();
                                                        fd.Enabled = true;
-
-                                                       lock (instance) {
-                                                               StartMonitoringDirectory (fd);
-                                                       }
-
-                                                       lock (data) {
-                                                               data.SubDirs [datadir] = fd;
-                                                       }
-
+                                                       newdirs.Add (fd);
+                                                       newdirs.Add (data);
                                                        requests [fd.Request.ReqNum] = fd;
                                                }
                                        }
@@ -318,6 +314,20 @@ namespace System.IO {
                                        }
                                } while (FAMPending (ref conn) > 0);
                        }
+
+
+                       if (newdirs != null) {
+                               int count = newdirs.Count;
+                               for (int n = 0; n < count; n++) {
+                                       FAMData newdir = (FAMData) newdirs [n];
+                                       FAMData parent = (FAMData) newdirs [n + 1];
+                                       StartMonitoringDirectory (newdir);
+                                       lock (parent) {
+                                               parent.SubDirs [newdir.Directory] = newdir;
+                                       }
+                               }
+                               newdirs.Clear ();
+                       }
                }
 
                ~FAMWatcher ()
index e4018da121066702c4b881f7e59770a51b775630..d3d421ccc21e40ba9d2e166e9914c0156a2fcc27 100644 (file)
@@ -57,6 +57,7 @@ namespace System.IO {
                bool disposed;
                string mangledFilter;
                static IFileWatcher watcher;
+               static object lockobj = new object ();
 
                #endregion // Fields
 
@@ -104,7 +105,7 @@ namespace System.IO {
 
                void InitWatcher ()
                {
-                       lock (typeof (FileSystemWatcher)) {
+                       lock (lockobj) {
                                if (watcher != null)
                                        return;
 
index 803629effcdc3f7e2f31c405466e92e896687d7c..d26c30e22f7935e391891119397ce1a9449770fb 100644 (file)
@@ -93,32 +93,31 @@ namespace System.IO {
                {
                }
                
+               // Locked by caller
                public static bool GetInstance (out IFileWatcher watcher)
                {
-                       lock (typeof (KeventWatcher)) {
-                               if (failed == true) {
-                                       watcher = null;
-                                       return false;
-                               }
-
-                               if (instance != null) {
-                                       watcher = instance;
-                                       return true;
-                               }
-
-                               watches = Hashtable.Synchronized (new Hashtable ());
-                               requests = Hashtable.Synchronized (new Hashtable ());
-                               conn = kqueue();
-                               if (conn == -1) {
-                                       failed = true;
-                                       watcher = null;
-                                       return false;
-                               }
+                       if (failed == true) {
+                               watcher = null;
+                               return false;
+                       }
 
-                               instance = new KeventWatcher ();
+                       if (instance != null) {
                                watcher = instance;
                                return true;
                        }
+
+                       watches = Hashtable.Synchronized (new Hashtable ());
+                       requests = Hashtable.Synchronized (new Hashtable ());
+                       conn = kqueue();
+                       if (conn == -1) {
+                               failed = true;
+                               watcher = null;
+                               return false;
+                       }
+
+                       instance = new KeventWatcher ();
+                       watcher = instance;
+                       return true;
                }
                
                public void StartDispatching (FileSystemWatcher fsw)
index e7b53592e122e5c2d7075759cbfb592018202ba0..dc5e848f13db29ba6de6a3c38a5eca2be1c14ed5 100644 (file)
@@ -35,6 +35,7 @@ namespace System.IO {
                {
                }
                
+               // Locked by caller
                public static bool GetInstance (out IFileWatcher watcher)
                {
                        throw new NotSupportedException ();
index 208628cba486fe8f1cb2fd81b9cebeea9a1c280b..da240e75db093d897615e12a21fd4072c734179d 100644 (file)
@@ -360,21 +360,15 @@ namespace System.Net
        class DigestClient : IAuthenticationModule
        {
 
-               static Hashtable cache;
-
-               public DigestClient () {}
-
+               static readonly Hashtable cache = Hashtable.Synchronized (new Hashtable ());
+               
                static Hashtable Cache {
                        get {
-                               lock (typeof (DigestClient)) {
-                                       if (cache == null) {
-                                               cache = Hashtable.Synchronized (new Hashtable ());
-                                       } else {
-                                               CheckExpired (cache.Count);
-                                       }
-
-                                       return cache;
+                               lock (cache.SyncRoot) {
+                                       CheckExpired (cache.Count);
                                }
+                               
+                               return cache;
                        }
                }
 
index 54ab7d5627c4792034861f462b457ed4978df4b7..07fb23ff5f3ffc71b9fcbe8e3f20fb3b8f3837ab 100644 (file)
@@ -36,7 +36,8 @@ namespace System.Net
 {\r
        public class GlobalProxySelection\r
        {\r
-               private static IWebProxy proxy;\r
+               volatile static IWebProxy proxy;
+               static readonly object lockobj = new object ();\r
                \r
                // Constructors\r
                public GlobalProxySelection() { }\r
@@ -48,7 +49,7 @@ namespace System.Net
                        if (proxy != null)\r
                                return proxy;\r
 \r
-                       lock (typeof (GlobalProxySelection)) {\r
+                       lock (lockobj) {\r
                                if (proxy != null)\r
                                        return proxy;\r
 \r
@@ -68,9 +69,7 @@ namespace System.Net
                                if (value == null)\r
                                        throw new ArgumentNullException ("GlobalProxySelection.Select",\r
                                                        "null IWebProxy not allowed. Use GetEmptyWebProxy ()");\r
-\r
-                               lock (typeof (GlobalProxySelection))\r
-                                       proxy = value; \r
+                               proxy = value; \r
                        }\r
                }\r
                \r
index ff2b14727551f90e9fb7222738c6a7ca4445ddbe..eec8d776cbcb4e936d82165c0d7f590f12f17307 100644 (file)
@@ -1,3 +1,17 @@
+2005-05-25  Raja R Harinath  <rharinath@novell.com>
+
+       * replace.cs (ReplacementEvaluator.Compile): Rewrite to avoid
+       creating several intermediate strings.  Simplify internal
+       intermediate representation.
+       (ReplacementEvaluator.EvaluateAppend): New.  Version of Evaluate
+       that builds the result directly on a passed-in StringBuilder.
+       (ReplacementEvaluator.Evaluate): Just a wrapper around
+       EvaluateAppend.
+       * regex.cs (MatchAppendEvaluator): New internal delegate.
+       (Regex.Replace): Use MatchAppendEvaluator.
+       (Regex.Adapter): New class used to adapt a MatchEvaluator to a
+       MatchAppendEvaluator.
+
 2005-05-24  Raja R Harinath  <rharinath@novell.com>
 
        * replace.cs (ReplacementEvaluator.CompileTerm): Fix group
index c190603a6f158f746e92e83ee4d3e9fb6c9d3a93..0245f3d288fb12f5c01e1ce5c52267cff52841c7 100644 (file)
@@ -44,6 +44,8 @@ namespace System.Text.RegularExpressions {
        \r
        public delegate string MatchEvaluator (Match match);\r
 \r
+       delegate void MatchAppendEvaluator (Match match, StringBuilder sb);\r
+\r
        [Flags]\r
        public enum RegexOptions {\r
                None                            = 0x000,\r
@@ -350,7 +352,20 @@ namespace System.Text.RegularExpressions {
                                return Replace (input, evaluator, count, 0);\r
                }\r
 \r
+               class Adapter\r
+               {\r
+                       MatchEvaluator ev;\r
+                       public Adapter (MatchEvaluator ev) { this.ev = ev; }\r
+                       public void Evaluate (Match m, StringBuilder sb) { sb.Append (ev (m)); }\r
+               }\r
+\r
                public string Replace (string input, MatchEvaluator evaluator, int count, int startat)\r
+               {\r
+                       Adapter a = new Adapter (evaluator);\r
+                       return Replace (input, new MatchAppendEvaluator (a.Evaluate), count, startat);\r
+               }\r
+\r
+               string Replace (string input, MatchAppendEvaluator evaluator, int count, int startat)\r
                {\r
                        StringBuilder result = new StringBuilder ();\r
                        int ptr = startat;\r
@@ -364,7 +379,7 @@ namespace System.Text.RegularExpressions {
                                        if(counter -- <= 0)\r
                                                break;\r
                                result.Append (input, ptr, m.Index - ptr);\r
-                               result.Append (evaluator (m));\r
+                               evaluator (m, result);\r
 \r
                                ptr = m.Index + m.Length;\r
                                m = m.NextMatch ();\r
@@ -394,7 +409,7 @@ namespace System.Text.RegularExpressions {
 \r
                public string Replace (string input, string replacement, int count, int startat) {\r
                        ReplacementEvaluator ev = new ReplacementEvaluator (this, replacement);\r
-                       return Replace (input, new MatchEvaluator (ev.Evaluate), count, startat);\r
+                       return Replace (input, new MatchAppendEvaluator (ev.EvaluateAppend), count, startat);\r
                }\r
 \r
                // split methods\r
index b028e0ff4674e1c7751c80a43c2b428c363d9fa4..7b8a56b279f5c4275fd1fa53bc44544574035fe9 100644 (file)
@@ -43,78 +43,134 @@ namespace System.Text.RegularExpressions {
 
                public ReplacementEvaluator (Regex regex, string replacement) {
                        this.regex = regex;
-                       terms = new ArrayList ();
-                       Compile (replacement);
+                       this.replacement = replacement;
+                       this.pieces = null;
+                       this.n_pieces = 0;
+                       Compile ();
                }
 
-               public string Evaluate (Match match) {
-                       StringBuilder result = new StringBuilder ();
-                       foreach (Term term in terms)
-                               term.AppendResult (match, result);
+               public string Evaluate (Match match) 
+               {
+                       StringBuilder sb = new StringBuilder ();
+                       EvaluateAppend (match, sb);
+                       return sb.ToString ();
+               }
+
+               public void EvaluateAppend (Match match, StringBuilder sb)
+               {
+                       int i = 0, k, count;
+
+                       if (n_pieces == 0) {
+                               sb.Append (replacement);
+                               return;
+                       }
 
-                       return result.ToString ();
+                       while (i < n_pieces) {
+                               k = pieces [i++];
+                               if (k >= 0) {
+                                       count = pieces [i++];
+                                       sb.Append (replacement, k, count);
+                               } else if (k < -3) {
+                                       Group group = match.Groups [-(k + 4)];
+                                       sb.Append (group.Text, group.Index, group.Length);
+                               } else if (k == -1) {
+                                       sb.Append (match.Text);
+                               } else if (k == -2) {
+                                       sb.Append (match.Text, 0, match.Index);
+                               } else { // k == -3
+                                       int matchend = match.Index + match.Length;
+                                       sb.Append (match.Text, matchend, match.Text.Length - matchend);
+                               } 
+                       }
                }
 
-               // private
+               void Ensure (int size)
+               {
+                       int new_size;
+                       if (pieces == null) {
+                               new_size = 4;
+                               if (new_size < size)
+                                       new_size = size;
+                               pieces = new int [new_size];
+                       } else if (size >= pieces.Length) {
+                               new_size = pieces.Length + (pieces.Length >> 1);
+                               if (new_size < size)
+                                       new_size = size;
+                               int [] new_pieces = new int [new_size];
+                               Array.Copy (pieces, new_pieces, n_pieces);
+                               pieces = new_pieces;
+                       }
+               }
+
+               void AddFromReplacement (int start, int end)
+               {
+                       if (start == end)
+                               return;
+                       Ensure (n_pieces + 2);
+                       pieces [n_pieces++] = start;
+                       pieces [n_pieces++] = end - start;
+               }
 
-               private void Compile (string replacement) {
+               void AddInt (int i)
+               {
+                       Ensure (n_pieces + 1);
+                       pieces [n_pieces++] = i;
+               }
+
+               // private
+               private void Compile () {
                        replacement = Parser.Unescape (replacement);
-                       StringBuilder literal = new StringBuilder ();
 
-                       int ptr = 0;
+                       int anchor = 0, ptr = 0, saveptr;
                        char c;
-                       Term term = null;
                        while (ptr < replacement.Length) {
-                               c = replacement[ptr ++];
+                               c = replacement [ptr++];
 
-                               if (c != '$') {
-                                       literal.Append (c);
+                               if (c != '$')
                                        continue;
-                               }
 
                                // If the '$' was the last character, just emit it as is
-                               if (ptr == replacement.Length) {
-                                       literal.Append (c);
+                               if (ptr == replacement.Length)
                                        break;
-                               }
 
                                // If we saw a '$$'
-                               if (replacement[ptr] == '$') {
-                                       literal.Append (c);
-                                       ++ ptr;
+                               if (replacement [ptr] == '$') {
+                                       // Everthing from 'anchor' upto and including the first '$' is copied from the replacement string
+                                       AddFromReplacement (anchor, ptr);
+                                       // skip over the second '$'.
+                                       anchor = ++ptr;
                                        continue;
                                }
 
-                               int saveptr = ptr - 1;
+                               saveptr = ptr - 1;
 
-                               term = CompileTerm (replacement, ref ptr);
+                               int from_match = CompileTerm (ref ptr);
 
-                               if (term != null) {
-                                       term.Literal = literal.ToString ();
-                                       terms.Add (term);
+                               // We couldn't recognize the term following the '$'.  Just treat it as a literal.
+                               // 'ptr' has already been advanced, no need to rewind it back
+                               if (from_match >= 0)
+                                       continue;
 
-                                       term = null;
-                                       literal.Length = 0;
-                               } else {
-                                       // If 'CompileTerm' couldn't identify it, don't abort, simply copy it over.
-                                       literal.Append (replacement, saveptr, ptr - saveptr);
-                               }
+                               AddFromReplacement (anchor, saveptr);
+                               AddInt (from_match);
+                               anchor = ptr;
                        }
 
-                       if (term == null && literal.Length > 0) {
-                               terms.Add (new Term (literal.ToString ()));
-                       }
+                       // If we never needed to advance anchor, it means the result is the whole replacement string.
+                       // We optimize that case by never allocating the pieces array.
+                       if (anchor != 0)
+                               AddFromReplacement (anchor, ptr);
                }
 
-               private Term CompileTerm (string str, ref int ptr) {
-                       char c = str[ptr];
+               private int CompileTerm (ref int ptr) {
+                       char c = replacement [ptr];
 
                        if (Char.IsDigit (c)) {         // numbered group
-                               int n = Parser.ParseDecimal (str, ref ptr);
+                               int n = Parser.ParseDecimal (replacement, ref ptr);
                                if (n < 0 || n > regex.GroupCount)
-                                       return null;
+                                       return 0;
                                
-                               return new Term (TermOp.Match, n);
+                               return -n - 4;
                        }
                        
                        ++ ptr;
@@ -128,112 +184,53 @@ namespace System.Text.RegularExpressions {
                                        // The parser is written such that there are few explicit range checks
                                        // and depends on 'IndexOutOfRangeException' being thrown.
 
-                                       if (Char.IsDigit (str [ptr])) {
-                                               n = Parser.ParseDecimal (str, ref ptr);
+                                       if (Char.IsDigit (replacement [ptr])) {
+                                               n = Parser.ParseDecimal (replacement, ref ptr);
                                                name = "";
                                        } else {
-                                               name = Parser.ParseName (str, ref ptr);
+                                               name = Parser.ParseName (replacement, ref ptr);
                                        }
                                } catch (IndexOutOfRangeException) {
-                                       ptr = str.Length;
-                                       return null;
+                                       ptr = replacement.Length;
+                                       return 0;
                                }
 
-                               if (ptr == str.Length || str[ptr] != '}' || name == null)
-                                       return null;
+                               if (ptr == replacement.Length || replacement[ptr] != '}' || name == null)
+                                       return 0;
                                ++ptr;                  // Swallow the '}'
 
                                if (name != "")
                                        n = regex.GroupNumberFromName (name);
 
                                if (n < 0 || n > regex.GroupCount)
-                                       return null;
+                                       return 0;
 
-                               return new Term (TermOp.Match, n);
+                               return -n - 4;
                        }
 
-                       case '&':                       // entire match
-                               return new Term (TermOp.Match, 0);
+                       case '&':                       // entire match.  Value should be same as $0
+                               return -4;
 
                        case '`':                       // text before match
-                               return new Term (TermOp.PreMatch, 0);
+                               return -2;
 
                        case '\'':                      // text after match
-                               return new Term (TermOp.PostMatch, 0);
+                               return -3;
 
                        case '+':                       // last group
-                               return new Term (TermOp.Match, regex.GroupCount);
+                               return -regex.GroupCount - 4;
 
                        case '_':                       // entire text
-                               return new Term (TermOp.All, 0);
+                               return -1;
 
                        default:
-                               return null;
+                               return 0;
                        }
                }
 
                private Regex regex;
-               private ArrayList terms;
-
-               private enum TermOp {
-                       None,                           // no action
-                       Match,                          // input within group
-                       PreMatch,                       // input before group
-                       PostMatch,                      // input after group
-                       All                             // entire input
-               }
-
-               private class Term {
-                       public Term (TermOp op, int arg) {
-                               this.op = op;
-                               this.arg = arg;
-                               this.literal = "";
-                       }
-
-                       public Term (string literal) {
-                               this.op = TermOp.None;
-                               this.arg = 0;
-                               this.literal = literal;
-                       }
-
-                       public string Literal {
-                               set { literal = value; }
-                       }
-
-                       public void AppendResult (Match match, StringBuilder sb) {
-                               Group group = match.Groups[arg];
-
-                               sb.Append (literal);
-                               switch (op) {
-                               case TermOp.None:
-                                       break;
-
-                               case TermOp.Match:
-                                       sb.Append (group.Text, group.Index, group.Length);
-                                       break;
-
-                               case TermOp.PreMatch:
-                                       sb.Append (group.Text, 0, group.Index);
-                                       break;
-
-                               case TermOp.PostMatch:
-                                       int matchend = group.Index + group.Length;
-                                       sb.Append (group.Text, matchend, group.Text.Length - matchend);
-                                       break;
-
-                               case TermOp.All:
-                                       sb.Append (group.Text);
-                                       break;
-                               }
-                       }
-               
-                       public TermOp op;               // term type
-                       public int arg;                 // group argument
-                       public string literal;          // literal to prepend
-
-                       public override string ToString () {
-                               return op.ToString () + "(" + arg + ") " + literal;
-                       }
-               }
+               int n_pieces;
+               private int [] pieces;
+               string replacement;
        }
 }
index 520c7dc26bab94f2a618d02c2e3d00cc26e4a8b0..39cafb7d99752d9c0b41e626d3fd2db3c96a7850 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-27  Kornél Pál <kornelpal@hotmail.com>
+
+       * Timer.cs: Fixed bug #75068 - Close() does not disable the timer
+
 2004-06-15  Lluis Sanchez Gual  <lluis@ximian.com>
 
        * Timer.cs: The timer thread must be a background thread. 
index 62bfb336b29f1a7051cf080b2faf0cdad0dd03ee..5e9653e2faa67df8e68c0afecd2c384a65bf8331 100644 (file)
@@ -131,7 +131,7 @@ namespace System.Timers
 
                public void Close ()
                {
-                       StopTimer ();
+                       Enabled = false;
                }
 
                public void EndInit ()
index d75b8e6cd65c08eb2f65d63f4f6a626d7632becc..40d299587ca001aa6d32c3f294ca28e1ccdc9abc 100644 (file)
@@ -64,6 +64,7 @@ System.Text.RegularExpressions/RegexTrial.cs
 System.Text.RegularExpressions/RegexTest.cs
 System.Text.RegularExpressions/RegexBugs.cs
 System.Text.RegularExpressions/RegexReplace.cs
+System.Timers/TimerTest.cs
 System.Web/AspNetHostingPermissionAttributeTest.cs
 System.Web/AspNetHostingPermissionTest.cs
 System.IO.Compression/DeflateStreamCas.cs
index f29d2b6af9549c893c7d917a81228a35d713b873..5af2c6cc4c12e8aa52e4550402ccbf7cf5d4c366 100755 (executable)
@@ -131,7 +131,7 @@ namespace MonoTests.System.ComponentModel
 #endif
                public void Test () 
                {
-                       object lockObject = typeof (LicenseManager);
+                       object lockObject = new object ();
                        //**DEFAULT CONTEXT & LicenseUsageMode**
                        //Get CurrentContext, check default type
                        AssertEquals ("LicenseManager #1", "System.ComponentModel.Design.RuntimeLicenseContext", LicenseManager.CurrentContext.GetType().ToString());
index 73993f8f2e8027b7b6dcbdac7d5a59186c91eee5..9589c4cb58c71558a2fdeaed44fa907e344d71c2 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-25  Raja R Harinath  <rharinath@novell.com>
+
+       * RegexReplace.cs: Add a couple more testcases.
+
 2005-05-24  Raja R Harinath  <rharinath@novell.com>
 
        * RegexReplace.cs: Add testcase for $+.
index b2d0a9abaf1df4fff274937a39c6b831359ef252..00453713b0b23d78212fa3eaff70d1ec6d05f695 100644 (file)
@@ -63,6 +63,9 @@ namespace MonoTests.System.Text.RegularExpressions {
                        new testcase ("text",   "(?<foo>e)(x)",         "${foo}$1$2",           "texet"         ),
                        new testcase ("text",   "(e)(?<foo>x)",         "${foo}$1$2$+",         "txexxt"        ),
                        new testcase ("text",   "(?<foo>e)(x)",         "${foo}$1$2$+",         "texeet"        ),
+                       new testcase ("314 1592 65358",         @"\d\d\d\d|\d\d\d", "a",        "a a a8"        ),
+                       new testcase ("2 314 1592 65358",       @"\d\d\d\d|\d\d\d", "a",        "2 a a a8"      ),
+                       new testcase ("<i>am not</i>",          "<(.+?)>",      "[$0:$1]",      "[<i>:i]am not[</i>:/i]"),
                };
 
                [Test]
diff --git a/mcs/class/System/Test/System.Timers/ChangeLog b/mcs/class/System/Test/System.Timers/ChangeLog
new file mode 100644 (file)
index 0000000..b236938
--- /dev/null
@@ -0,0 +1,3 @@
+2005-05-28  Kornél Pál <kornelpal@hotmail.com>
+
+       * TimerTest.cs: New test file for System.Timers.Timer.
diff --git a/mcs/class/System/Test/System.Timers/TimerTest.cs b/mcs/class/System/Test/System.Timers/TimerTest.cs
new file mode 100644 (file)
index 0000000..a966c1a
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// TimerTest.cs - NUnit Test Cases for System.Timers.Timer
+//
+// Author:
+//   Kornél Pál <http://www.kornelpal.hu/>
+//
+// Copyright (C) 2005 Kornél Pál
+//
+
+//
+// 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 NUnit.Framework;
+using System;
+using System.Timers;
+
+namespace MonoTests.System.Timers
+{
+       [TestFixture]
+       public class TimerTest : Assertion
+       {
+               Timer timer;
+
+               [SetUp]
+               public void SetUp ()
+               {
+                       timer = new Timer();
+               }
+
+               [TearDown]
+               public void TearDown ()
+               {
+               }
+
+               [Test]
+               public void StartStopEnabled ()
+               {
+                       timer.Start();
+                       Assert ("#A01 !Enabled after Start()", timer.Enabled);
+                       timer.Stop();
+                       Assert ("#A02 Enabled after Stop()", !timer.Enabled);
+               }
+
+               [Test]
+               public void CloseEnabled () {
+                       Assert ("#A01 Enabled after created", !timer.Enabled);
+                       timer.Enabled = true;
+                       Assert ("#A02 !Enabled after Enabled = true", timer.Enabled);
+                       timer.Close();
+                       Assert ("#A02 Enabled after Close()", !timer.Enabled);
+               }
+       }
+}
\ No newline at end of file
index ca4868dd7ff37c1d029a134550f292fc794c69e9..236336ac96980c5bde5e98a4b88e6a9c9e95fc49 100644 (file)
@@ -1,3 +1,30 @@
+2005-05-28  Sebastien Pouliot  <sebastien@ximian.com> 
+       * corlib.dll.sources: Added System.Runtime.Hosting namespace with 
+       ActivationArguments and ApplicationActivator classes. Removed 
+       ApplicationActivator from System namespace.
+
+2005-05-27  Sebastien Pouliot  <sebastien@ximian.com> 
+       * corlib.dll.sources: Added internal System.Security.PermissionBuilder
+       class to the build.
+       * corlib_test.dll.sources: Added CAS unit tests for System.Security.
+       PermissionSet class.
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com> 
+       * corlib.dll.sources: Removed the *Switcher structures from the build
+       (NET_2_0) as they aren't part of the public API (beta2) anymore.
+               - System.Threading/CompressedStackSwitcher.cs
+               - System.Threading/ExecutionContextSwitcher.cs
+               - System.Threading/HostExecutionContextSwitcher.cs
+                -System.Threading/SynchronizationContextSwitcher.cs
+       Added System.Security.Policy/DefaultPolicies.cs
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * corlib_test.dll.sources: Add System.Reflection.TypeDelegatorTest.
+
 2005-05-22  Sebastien Pouliot  <sebastien@ximian.com>
 
        * corlib.dll.sources: Renamed CER to Cer to match 2.0 beta2.
index 5e8437929da02706d5a66021fdb7d4dc22bdb7e7..df8c996cb54d102596a0dd3cfe9f5cb36b4f5c83 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * KeyPairPersistence.cs: Lock *before* checking if things are null
+       to prevent race conditions. Also, do not lock on typeof object.
+
 2005-05-09  Sebastien Pouliot  <sebastien@ximian.com>
 
        * KeyPairPersistence.cs: Use PlatformID.Unix under NET_2_0. 
index c0e748339cd59ab57d5e33bafff9966f0bd194ef..ad43b08c49505c5d4122e3d90b071bac115473a3 100644 (file)
@@ -201,10 +201,12 @@ namespace Mono.Security.Cryptography {
 
                // private static stuff
 
+               static object lockobj = new object ();
+               
                private static string UserPath {
                        get {
-                               if ((_userPath == null) || (!_userPathExists)) {
-                                       lock (typeof (KeyPairPersistence)) {
+                               lock (lockobj) {
+                                       if ((_userPath == null) || (!_userPathExists)) {
                                                _userPath = Path.Combine (
                                                        Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData),
                                                        ".mono");
@@ -235,8 +237,8 @@ namespace Mono.Security.Cryptography {
 
                private static string MachinePath {
                        get {
-                               if ((_machinePath == null) || (!_machinePathExists)) {
-                                       lock (typeof (KeyPairPersistence)) {
+                               lock (lockobj) {
+                                       if ((_machinePath == null) || (!_machinePathExists)) {
                                                _machinePath = Path.Combine (
                                                        Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData),
                                                        ".mono");
index 67a5a459a1b8098f93c669367c9a4b7ecfe0c69e..7644899b5e48eff72ea68d48d74690899c8ea5bc 100644 (file)
@@ -1,3 +1,14 @@
+2005-05-26  Miguel de Icaza  <miguel@novell.com>
+
+       * Dictionary.cs: Remove the `Hash' name from the Dictionary
+       internal classes, make them public.
+
+2005-05-26  Zoltan Varga  <vargaz@freemail.hu>
+
+       * Dictionary.cs: Fix a warning.
+
+       * IDictionary.cs: Add missing TryGetValue method.
+
 2005-05-19  Geoff Norton  <gnorton@customerdna.com>
 
        * List.cs (Insert): Resize the array before the shift if needed
index 2a65d806c58ba14dbc1d562341b94c6080d04dea..507bea8bb3909c6e99d38b59595f037c52ee79f3 100644 (file)
@@ -224,10 +224,10 @@ namespace System.Collections.Generic {
                                }
                        }
                }
-       
+
                protected virtual int GetHash (K key)
                {
-                       IComparer<K> hcp = this._hcp;
+                       //IComparer<K> hcp = this._hcp;
                        
                        return key.GetHashCode ();
                        /*
@@ -270,7 +270,13 @@ namespace System.Collections.Generic {
                        int spot = (int) ((uint) h % size);
                        return spot;
                }
-       
+
+               public IComparer<K> Comparer {
+                       get {
+                               return _hcp;
+                       }
+               }
+               
                public void Clear ()
                {
                        for (int i = 0; i < _table.Length; i++)
@@ -354,11 +360,27 @@ namespace System.Collections.Generic {
                }
        
                ICollection<K> IDictionary<K, V>.Keys {
-                       get { return new HashKeyCollection (this); }
+                       get {
+                               return Keys;
+                       }
                }
        
                ICollection<V> IDictionary<K, V>.Values {
-                       get { return new HashValueCollection (this); }
+                       get {
+                               return Values;
+                       }
+               }
+
+               public KeyCollection Keys {
+                       get {
+                               return new KeyCollection (this);
+                       }
+               }
+
+               public ValueCollection Values {
+                       get {
+                               return new ValueCollection (this);
+                       }
                }
                
                bool IDictionary.IsFixedSize {
@@ -589,10 +611,10 @@ namespace System.Collections.Generic {
                }
        
                // This collection is a read only collection
-               internal class HashKeyCollection : ICollection<K>, IEnumerable<K>, ICollection {
+               public class KeyCollection : ICollection<K>, IEnumerable<K>, ICollection {
                        Dictionary<K, V> _dictionary;
        
-                       public HashKeyCollection (Dictionary<K, V> dictionary)
+                       public KeyCollection (Dictionary<K, V> dictionary)
                        {
                                _dictionary = dictionary;
                        }
@@ -696,10 +718,10 @@ namespace System.Collections.Generic {
                }
        
                // This collection is a read only collection
-               internal class HashValueCollection : ICollection<V>, IEnumerable<V>, ICollection {
+               public class ValueCollection : ICollection<V>, IEnumerable<V>, ICollection, IEnumerable {
                        Dictionary<K, V> _dictionary;
        
-                       public HashValueCollection (Dictionary<K, V> dictionary)
+                       public ValueCollection (Dictionary<K, V> dictionary)
                        {
                                _dictionary = dictionary;
                        }
@@ -804,7 +826,6 @@ namespace System.Collections.Generic {
                        }
                }
        
-       
                static bool TestPrime (int x)
                {
                        if ((x & 1) != 0) {
index c94e6f5cff14d7360026415282a99fc69dad104b..cc5f8049e2c906f7c44afb838d4b6bfcc7def0d0 100644 (file)
@@ -35,12 +35,18 @@ using System;
 using System.Runtime.InteropServices;
 
 namespace System.Collections.Generic {
+
        [CLSCompliant(true)]
        [ComVisible(false)]
-       public interface IDictionary<K,V> : ICollection<KeyValuePair<K,V>> {
+       public interface IDictionary<K,V>
+               : ICollection<KeyValuePair<K,V>>
+               // , IEnumerable<KeyValuePair<K,V>>
+       {
+               
                void Add (K key, V value);
                bool ContainsKey (K key);
                bool Remove (K key);
+               bool TryGetValue (K key, out V value);
                V this[K key] { get; set; }
                ICollection<K> Keys { get; }
                ICollection<V> Values { get; }
index c44a355541fd8e0e8b86cc804e2ef866bebc7c94..3c2c1d33609255bd34bfe54c8973f09e5b2352fa 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * Queue.cs (grow): fix 61919.
+
 2005-05-09  Atsushi Enomoto  <atsushi@ximian.com>
 
        * Stack.cs : empty_stack.CopyTo(empty_array, 0) should be allowed.
index 480f950f51a3e53b7b515db06a18385788f955a0..bf0348aadad727e974f1a583636ae08349010a35 100644 (file)
@@ -208,6 +208,8 @@ namespace System.Collections {
 
                private void grow () {
                        int newCapacity = (_array.Length * _growFactor) / 100;
+                       if (newCapacity < _array.Length + 1)
+                               newCapacity = _array.Length + 1;
                        object[] newContents = new object[newCapacity];
                        CopyTo (newContents, 0);
                        _array = newContents;
index 1d0d0eb8ca2599a2e208129124cdaaa138921b76..9c7bbf81677b043e0b96c7396017625a4a68fb2a 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * StackTrace.cs: Add an internal ctor which skips unmanaged frames.
+
 2005-04-16  Sebastien Pouliot  <sebastien@ximian.com>
 
        * StackFrame.cs: Moved documentation comments (XML) to monodoc. 
index 808c71dad3e35287ef61a425396d7a5fc271dc01..cd6126b74a84d01ca03005bdb725e7b96fc13db8 100644 (file)
@@ -106,6 +106,11 @@ namespace System.Diagnostics {
                }
 
                public StackTrace (Exception e, int skipFrames, bool needFileInfo)
+                       : this (e, skipFrames, needFileInfo, false)
+               {
+               }
+
+               internal StackTrace (Exception e, int skipFrames, bool needFileInfo, bool returnNativeFrames)
                {
                        if (e == null)
                                throw new ArgumentNullException ("e");
@@ -113,6 +118,23 @@ namespace System.Diagnostics {
                                throw new ArgumentOutOfRangeException ("< 0", "skipFrames");
 
                        frames = get_trace (e, skipFrames, needFileInfo);
+
+                       if (!returnNativeFrames) {
+                               bool resize = false;
+                               for (int i = 0; i < frames.Length; ++i)
+                                       if (frames [i].GetMethod () == null)
+                                               resize = true;
+
+                               if (resize) {
+                                       ArrayList al = new ArrayList ();
+
+                                       for (int i = 0; i < frames.Length; ++i)
+                                               if (frames [i].GetMethod () != null)
+                                                       al.Add (frames [i]);
+
+                                       frames = (StackFrame [])al.ToArray (typeof (StackFrame));
+                               }
+                       }
                }
 
 #if ONLY_1_1
index 40a77ea996a57b0a4620d4d15427973cc0313283..befe3f633b93ab1e9336f7a7d854aac9652c902d 100644 (file)
@@ -1,3 +1,6 @@
+2005-05-26  Miguel de Icaza  <miguel@novell.com>
+
+       * File.cs (ReadAllBytes): add.
 
 Tue May 17 10:54:18 CEST 2005 Paolo Molaro <lupus@ximian.com>
 
index 02e66d8120f62c2715c45939f0788a7a966e957e..ab5f506b6a8130c551860e6e31567213ae43d663 100644 (file)
@@ -408,5 +408,34 @@ namespace System.IO
                }
 
                #endregion
+
+#if NET_2_0
+               //
+               // The documentation for this method is most likely wrong, it
+               // talks about doing a "binary read", but the remarks say
+               // that this "detects the encoding".
+               //
+               // This can not detect and do anything useful with the encoding
+               // since the result is a byte [] not a char [].
+               //
+               public static byte [] ReadAllBytes (string path)
+               {
+                       using (FileStream s = Open (path, FileMode.Open, FileAccess.Read, FileShare.Read)){
+                               long size = s.Length;
+
+                               //
+                               // Is this worth supporting?
+                               // 
+                               if (size > Int32.MaxValue)
+                                       throw new ArgumentException ("Reading more than 4gigs with this call is not supported");
+                               
+                               byte [] result = new byte [s.Length];
+
+                               s.Read (result, 0, (int) size);
+
+                               return result;
+                       }
+               }
+#endif
        }
 }
index 8bd73decd11b113f1022611fbf2f5f6937b05840..280c48ddb1e8b21e29b729d189fd1920e85f4f0b 100644 (file)
@@ -1,3 +1,27 @@
+2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
+
+       * MethodBuilder.cs: Add extra_flags field to encode P/Invoke
+       bits that can't be specified via MethodBuilder directly; fixes
+       #75060.
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * GenericTypeParameterBuilder.cs: Return this in UnderlyingSystemType.
+
+2005-05-25  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * ModuleBuilder.cs: Implemented DefineDocument(). Generate debug
+       info when saving the module.
+       * ILGenerator.cs: Keep marked sequence points in a list.
+       Added a GenerateDebugInfo method, which dumps the info collected
+       during code generation.
+       * TypeBuilder.cs:
+       * ConstructorBuilder.cs:
+       * MethodBuilder.cs: Added method for generating debug info.
+       * LocalBuilder.cs: Added StartOffset and EndOffset properties.
+       * CustomAttributeBuilder.cs: Use IsInstanceOfType instead of
+       IsAssignableFrom when possible.
+
 2005-05-20  Miguel de Icaza  <miguel@novell.com>
 
        * TypeBuilder.cs (UnderlyingSystemType): should always return this
index 13cab17eee57b8e51a39bc40d917517813f41664..2af585c2572d3590a7fe9dbd05b43e1a0c7d0bdd 100644 (file)
@@ -37,6 +37,7 @@ using System.Globalization;
 using System.Security;
 using System.Security.Permissions;
 using System.Runtime.InteropServices;
+using System.Diagnostics.SymbolStore;
 
 namespace System.Reflection.Emit {
 
@@ -274,6 +275,18 @@ namespace System.Reflection.Emit {
                        if (ilgen != null)
                                ilgen.label_fixup ();
                }
+               
+               internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
+               {
+                       if (ilgen != null && ilgen.HasDebugInfo) {
+                               SymbolToken token = new SymbolToken (GetToken().Token);
+                               symbolWriter.OpenMethod (token);
+                               symbolWriter.SetSymAttribute (token, "__name", System.Text.Encoding.UTF8.GetBytes (Name));
+                               ilgen.GenerateDebugInfo (symbolWriter);
+                               symbolWriter.CloseMethod ();
+                       }
+               }
+
                internal override int get_next_table_index (object obj, int table, bool inc) {
                        return type.get_next_table_index (obj, table, inc);
                }
index ef9e0bf88b5b10459eca50fcad11f094b78cf277..d3df16f9ef45e5fc6634e37dd65f46d35b30bce8 100644 (file)
@@ -133,7 +133,7 @@ namespace System.Reflection.Emit {
                                // FIXME: Check enums and TypeBuilders as well
                                if (fieldValues [i] != null)
                                        // IsEnum does not seem to work on TypeBuilders
-                                       if (!(fi.FieldType is TypeBuilder) && !fi.FieldType.IsEnum && !fi.FieldType.IsAssignableFrom (fieldValues [i].GetType ())) {
+                                       if (!(fi.FieldType is TypeBuilder) && !fi.FieldType.IsEnum && !fi.FieldType.IsInstanceOfType (fieldValues [i])) {
                                                //
                                                // mcs allways uses object[] for array types and
                                                // MS.NET allows this
@@ -154,7 +154,7 @@ namespace System.Reflection.Emit {
                                if ((atype != t) && (!t.IsSubclassOf (atype)) && (!atype.IsSubclassOf (t)))
                                        throw new ArgumentException ("Property '" + pi.Name + "' does not belong to the same class as the constructor");
                                if (propertyValues [i] != null) {
-                                       if (!(pi.PropertyType is TypeBuilder) && !pi.PropertyType.IsEnum && !pi.PropertyType.IsAssignableFrom (propertyValues [i].GetType ()))
+                                       if (!(pi.PropertyType is TypeBuilder) && !pi.PropertyType.IsEnum && !pi.PropertyType.IsInstanceOfType (propertyValues [i]))
                                                if (!pi.PropertyType.IsArray)
                                                        throw new ArgumentException ("Value of property '" + pi.Name + "' does not match property type: " + pi.PropertyType + " -> " + propertyValues [i]);
                                }
@@ -168,7 +168,7 @@ namespace System.Reflection.Emit {
                                        if (!IsValidType (paramType))
                                                throw new ArgumentException ("Argument " + i + " does not have a valid type.");
                                        if (constructorArgs [i] != null)
-                                               if (!(paramType is TypeBuilder) && !paramType.IsEnum && !paramType.IsAssignableFrom (constructorArgs [i].GetType ()))
+                                               if (!(paramType is TypeBuilder) && !paramType.IsEnum && !paramType.IsInstanceOfType (constructorArgs [i]))
                                                        if (!paramType.IsArray)
                                                                throw new ArgumentException ("Value of argument " + i + " does not match parameter type: " + paramType + " -> " + constructorArgs [i]);
                                }
index b1c77709dde76c9a9a5c17fb89eb37d464f6ec33..3732e6c535d2a1c762a809e051d72aa38d654c61 100644 (file)
@@ -229,7 +229,7 @@ namespace System.Reflection.Emit
 
                public override Type UnderlyingSystemType {
                        get {
-                               return null;
+                               return this;
                        }
                }
 
index e612e6cb1aaeea5cb20e46e18c801ab722dc12bb..5fb8efd762eedad52870d9f7bd3ec6e78cac9f80 100644 (file)
@@ -203,6 +203,8 @@ namespace System.Reflection.Emit {
                
                const int defaultFixupSize = 8;
                const int defaultLabelsSize = 8;
+               ArrayList sequencePointLists;
+               SequencePointList currentSequence;
 
                internal ILGenerator (Module m, TokenGenerator token_gen, int size)
                {
@@ -218,7 +220,7 @@ namespace System.Reflection.Emit {
                        open_blocks = new Stack ();
                        this.token_gen = token_gen;
                }
-
+               
                private void add_token_fixup (MemberInfo mi)
                {
                        if (num_token_fixups == token_fixups.Length) {
@@ -840,7 +842,45 @@ namespace System.Reflection.Emit {
 
                public virtual void MarkSequencePoint (ISymbolDocumentWriter document, int startLine,
                                                       int startColumn, int endLine, int endColumn)
-               { }
+               {
+                       if (currentSequence == null || currentSequence.Document != document) {
+                               if (sequencePointLists == null)
+                                       sequencePointLists = new ArrayList ();
+                               currentSequence = new SequencePointList (document);
+                               sequencePointLists.Add (currentSequence);
+                       }
+                       
+                       currentSequence.AddSequencePoint (code_len, startLine, startColumn, endLine, endColumn);
+               }
+               
+               internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
+               {
+                       if (sequencePointLists != null) {
+                               SequencePointList first = (SequencePointList) sequencePointLists [0];
+                               SequencePointList last = (SequencePointList) sequencePointLists [sequencePointLists.Count - 1];
+                               symbolWriter.SetMethodSourceRange (first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn);
+                               
+                               foreach (SequencePointList list in sequencePointLists)
+                                       symbolWriter.DefineSequencePoints (list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns());
+                               
+                               if (locals != null) {
+                                       foreach (LocalBuilder local in locals) {
+                                               if (local.Name != null && local.Name.Length > 0) {
+                                                       SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper (module);
+                                                       sighelper.AddArgument (local.LocalType);
+                                                       byte[] signature = sighelper.GetSignature ();
+                                                       symbolWriter.DefineLocalVariable (local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset);
+                                               }
+                                       }
+                               }
+                               sequencePointLists = null;
+                       }
+               }
+               
+               internal bool HasDebugInfo
+               {
+                       get { return sequencePointLists != null; }
+               }
 
                public virtual void ThrowException (Type exceptionType)
                {
@@ -884,4 +924,93 @@ namespace System.Reflection.Emit {
                        return ig.code_len;
                }
        }
+       
+       internal class SequencePointList
+       {
+               ISymbolDocumentWriter doc;
+               SequencePoint[] points;
+               int count;
+               const int arrayGrow = 10;
+               
+               public SequencePointList (ISymbolDocumentWriter doc)
+               {
+                       this.doc = doc;
+               }
+               
+               public ISymbolDocumentWriter Document {
+                       get { return doc; }
+               }
+               
+               public int[] GetOffsets()
+               {
+                       int[] data = new int [count];
+                       for (int n=0; n<count; n++) data [n] = points[n].Offset;
+                       return data; 
+               }
+               public int[] GetLines()
+               {
+                       int[] data = new int [count];
+                       for (int n=0; n<count; n++) data [n] = points[n].Line;
+                       return data; 
+               }
+               public int[] GetColumns()
+               {
+                       int[] data = new int [count];
+                       for (int n=0; n<count; n++) data [n] = points[n].Col;
+                       return data; 
+               }
+               public int[] GetEndLines()
+               {
+                       int[] data = new int [count];
+                       for (int n=0; n<count; n++) data [n] = points[n].EndLine;
+                       return data; 
+               }
+               public int[] GetEndColumns()
+               {
+                       int[] data = new int [count];
+                       for (int n=0; n<count; n++) data [n] = points[n].EndCol;
+                       return data; 
+               }
+               public int StartLine {
+                       get { return points[0].Line; }
+               }
+               public int EndLine {
+                       get { return points[count - 1].Line; }
+               }
+               public int StartColumn {
+                       get { return points[0].Col; }
+               }
+               public int EndColumn {
+                       get { return points[count - 1].Col; }
+               }
+               
+               public void AddSequencePoint (int offset, int line, int col, int endLine, int endCol)
+               {
+                       SequencePoint s = new SequencePoint ();
+                       s.Offset = offset;
+                       s.Line = line;
+                       s.Col = col;
+                       s.EndLine = endLine;
+                       s.EndCol = endCol;
+                       
+                       if (points == null) {
+                               points = new SequencePoint [arrayGrow];
+                       } else if (count >= points.Length) {
+                               SequencePoint[] temp = new SequencePoint [count + arrayGrow];
+                               Array.Copy (points, temp, points.Length);
+                               points = temp;
+                       }
+                       
+                       points [count] = s;
+                       count++;
+               }
+       }
+       
+       struct SequencePoint {
+               public int Offset;
+               public int Line;
+               public int Col;
+               public int EndLine;
+               public int EndCol;
+       }
 }
index 9588db75139dccc85c0eb59061354598f75e7068..fe6e92160fd0a4ef08164ac314eedeb65065811f 100644 (file)
@@ -62,6 +62,8 @@ namespace System.Reflection.Emit {
 #endif
                
                internal ILGenerator ilgen;
+               int startOffset;
+               int endOffset;
 
                internal LocalBuilder (Type t, ILGenerator ilgen)
                {
@@ -71,7 +73,9 @@ namespace System.Reflection.Emit {
 
                public void SetLocalSymInfo (string lname, int startOffset, int endOffset)
                {
-                       // nop
+                       name = lname;
+                       this.startOffset = startOffset;
+                       this.endOffset = endOffset;
                }
 
                public void SetLocalSymInfo (string lname)
@@ -104,5 +108,17 @@ namespace System.Reflection.Emit {
                        }
                }
 #endif
+
+               internal string Name {
+                       get { return name; }
+               }
+               
+               internal int StartOffset {
+                       get { return startOffset; }
+               }
+               
+               internal int EndOffset {
+                       get { return endOffset; }
+               }
        }
 }
index 4c1c11dff5526f19992013ee4101a58d47b8fabf..d26fc0c8753398951ab34aa3cf57d9bb6b08d126 100644 (file)
@@ -38,6 +38,7 @@ using System.Security;
 using System.Security.Permissions;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
+using System.Diagnostics.SymbolStore;
 
 namespace System.Reflection.Emit {
 
@@ -57,7 +58,8 @@ namespace System.Reflection.Emit {
                private MethodInfo override_method;
                private string pi_dll;
                private string pi_entry;
-               private CharSet ncharset; /* this also encodes set_last_error etc */
+               private CharSet charset;
+               private uint extra_flags; /* this encodes set_last_error etc */
                private CallingConvention native_cc;
                private CallingConventions call_conv;
                private bool init_locals = true;
@@ -106,7 +108,7 @@ namespace System.Reflection.Emit {
                        pi_dll = dllName;
                        pi_entry = entryName;
                        native_cc = nativeCConv;
-                       ncharset = nativeCharset;
+                       charset = nativeCharset;
                }
 
                public bool InitLocals {
@@ -147,14 +149,28 @@ namespace System.Reflection.Emit {
                /* Used by mcs */
                internal bool BestFitMapping {
                        set {
-                               ncharset = (CharSet)(((int)ncharset & ~0x30) | (value ? 0x10 : 0x20));
+                               extra_flags = (uint) ((extra_flags & ~0x30) | (value ? 0x10 : 0x20));
                        }
                }
 
                /* Used by mcs */
                internal bool ThrowOnUnmappableChar {
                        set {
-                               ncharset = (CharSet)(((int)ncharset & ~0x3000) | (value ? 0x1000 : 0x2000));
+                               extra_flags = (uint) ((extra_flags & ~0x3000) | (value ? 0x1000 : 0x2000));
+                       }
+               }
+
+               /* Used by mcs */
+               internal bool ExactSpelling {
+                       set {
+                               extra_flags = (uint) ((extra_flags & ~0x01) | (value ? 0x01 : 0x00));
+                       }
+               }
+
+               /* Used by mcs */
+               internal bool SetLastError {
+                       set {
+                               extra_flags = (uint) ((extra_flags & ~0x40) | (value ? 0x40 : 0x00));
                        }
                }
 
@@ -261,6 +277,17 @@ namespace System.Reflection.Emit {
                        if (ilgen != null)
                                ilgen.label_fixup ();
                }
+               
+               internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
+               {
+                       if (ilgen != null && ilgen.HasDebugInfo) {
+                               SymbolToken token = new SymbolToken (GetToken().Token);
+                               symbolWriter.OpenMethod (token);
+                               symbolWriter.SetSymAttribute (token, "__name", System.Text.Encoding.UTF8.GetBytes (Name));
+                               ilgen.GenerateDebugInfo (symbolWriter);
+                               symbolWriter.CloseMethod ();
+                       }
+               }
 
                public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
                        if (customBuilder == null)
index 70cbbcea5d7921383d771c4a9227dbb3f2291c87..f45265970f4cd6c369685f046c4f80947b5d8bf2 100644 (file)
@@ -64,6 +64,7 @@ namespace System.Reflection.Emit {
                bool transient;
                ModuleBuilderTokenGenerator token_gen;
                ArrayList resource_writers = null;
+               ISymbolWriter symbolWriter;
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                private static extern void basic_init (ModuleBuilder ab);
@@ -82,6 +83,18 @@ namespace System.Reflection.Emit {
                        basic_init (this);
 
                        CreateGlobalType ();
+                       
+                       if (emitSymbolInfo) {
+                               Assembly asm = Assembly.LoadWithPartialName ("Mono.CompilerServices.SymbolWriter");
+                               Type t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl");
+                               if (t != null) {
+                                       symbolWriter = (ISymbolWriter) Activator.CreateInstance (t, new object[] { this });
+                                       string fileName = fqname;
+                                       if (assemblyb.AssemblyDir != null)
+                                               fileName = Path.Combine (assemblyb.AssemblyDir, fileName);
+                                       symbolWriter.Initialize (IntPtr.Zero, fileName, true);
+                               }
+                       }
                }
 
                public override string FullyQualifiedName {get { return fqname;}}
@@ -396,11 +409,15 @@ namespace System.Reflection.Emit {
                }
 
                public ISymbolWriter GetSymWriter () {
-                       return null;
+                       return symbolWriter;
                }
 
-               public ISymbolDocumentWriter DefineDocument (string url, Guid language, Guid languageVendor, Guid documentType) {
-                       return null;
+               public ISymbolDocumentWriter DefineDocument (string url, Guid language, Guid languageVendor, Guid documentType)
+               {
+                       if (symbolWriter != null)
+                               return symbolWriter.DefineDocument (url, language, languageVendor, documentType);
+                       else
+                               return null;
                }
 
                public override Type [] GetTypes ()
@@ -635,6 +652,12 @@ namespace System.Reflection.Emit {
                        // The constant 0x80000000 is internal to Mono, it means `make executable'
                        //
                        File.SetAttributes (fileName, (FileAttributes) (unchecked ((int) 0x80000000)));
+                       
+                       if (types != null && symbolWriter != null) {
+                               for (int i = 0; i < num_types; ++i)
+                                       types [i].GenerateDebugInfo (symbolWriter);
+                               symbolWriter.Close ();
+                       }
                }
 
                internal string FileName {
@@ -685,3 +708,4 @@ namespace System.Reflection.Emit {
                }
        }
 }
+
index 84bc5fcd86eb9c0b300160b83791b7746cba7167..5119a9ea561232d24ea7cb8d585f2b5a965b1523 100644 (file)
@@ -40,6 +40,7 @@ using System.Globalization;
 using System.Collections;
 using System.Security;
 using System.Security.Permissions;
+using System.Diagnostics.SymbolStore;
 
 namespace System.Reflection.Emit {
 
@@ -676,13 +677,32 @@ namespace System.Reflection.Emit {
                                foreach (ConstructorBuilder ctor in ctors) 
                                        ctor.fixup ();
                        }
-
+                       
                        created = create_runtime_class (this);
                        if (created != null)
                                return created;
                        return this;
                }
 
+               internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
+               {
+                       symbolWriter.OpenNamespace (this.Namespace);
+
+                       if (methods != null) {
+                               for (int i = 0; i < num_methods; ++i) {
+                                       MethodBuilder metb = (MethodBuilder) methods[i]; 
+                                       metb.GenerateDebugInfo (symbolWriter);
+                               }
+                       }
+
+                       if (ctors != null) {
+                               foreach (ConstructorBuilder ctor in ctors)
+                                       ctor.GenerateDebugInfo (symbolWriter);
+                       }
+                       
+                       symbolWriter.CloseNamespace ();
+               }
+
                public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr)
                {
                        if (ctors == null)
index 026180bc55d93c3decf08b884c6385583f475cf0..ff91bb30d1bb6822c3033193cb01a57231a3b8f1 100644 (file)
@@ -159,7 +159,7 @@ namespace System.Reflection {
                public virtual String Location {
                        get {
                                string loc = get_location ();
-                               if (SecurityManager.SecurityEnabled) {
+                               if ((loc != String.Empty) && SecurityManager.SecurityEnabled) {
                                        // we cannot divulge local file informations
                                        new FileIOPermission (FileIOPermissionAccess.PathDiscovery, loc).Demand ();
                                }
index 55fd04cc1393e4236e4f62944834d27730b6957b..d084fcc5b83ae3b26b8ecc29b8761c81b58cfc2f 100644 (file)
@@ -49,21 +49,10 @@ namespace System.Reflection
                public abstract MethodBase SelectMethod (BindingFlags bindingAttr, MethodBase[] match, Type[] types, ParameterModifier[] modifiers);
                public abstract PropertyInfo SelectProperty( BindingFlags bindingAttr, PropertyInfo[] match, Type returnType, Type[] indexes, ParameterModifier[] modifiers);
 
-               static Binder default_binder;
+               static Binder default_binder = new Default ();
 
                internal static Binder DefaultBinder {
                        get {
-                               if (null == default_binder)
-                               {
-                                       lock (typeof (Binder)) 
-                                       {
-                                               if (default_binder == null)
-                                                       default_binder = new Default ();
-
-                                               return default_binder;
-                                       }
-                               }
-
                                return default_binder;
                        }
                }
index 5516538bdeb14aadc2ffcdbe8d83969fab6dc708..4e2a32cae625aba1876d4faa139357a1e428a0d9 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * Binder.cs: Avoid double checked locking and lock on typeof by
+       doing init of the default binder in the cctor.
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * Assembly.cs: Avoid security checks if Assembly.Location is "".
+
 2005-05-20  Zoltan Varga  <vargaz@freemail.hu>
 
        * TypeDelegator.cs: Implement some methods.
diff --git a/mcs/class/corlib/System.Runtime.Hosting/ActivationArguments.cs b/mcs/class/corlib/System.Runtime.Hosting/ActivationArguments.cs
new file mode 100644 (file)
index 0000000..0cff5a9
--- /dev/null
@@ -0,0 +1,95 @@
+//
+// System.Runtime.Hosting.ActivationArguments class
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2005 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_2_0
+
+using System.Runtime.InteropServices;
+
+namespace System.Runtime.Hosting {
+
+       [Serializable]
+       [ComVisible (true)]
+       public sealed class ActivationArguments {
+
+               private ActivationContext _context;
+               private ApplicationIdentity _identity;
+               private string[] _data;
+
+               public ActivationArguments (ActivationContext activationData)
+               {
+                       if (activationData == null)
+                               throw new ArgumentNullException ("activationData");
+
+                       _context = activationData;
+                       _identity = activationData.Identity;
+               }
+
+               public ActivationArguments (ApplicationIdentity applicationIdentity)
+               {
+                       if (applicationIdentity == null)
+                               throw new ArgumentNullException ("applicationIdentity");
+
+                       _identity = applicationIdentity;
+               }
+
+               public ActivationArguments (ActivationContext activationContext, string[] activationData)
+               {
+                       if (activationContext == null)
+                               throw new ArgumentNullException ("activationContext");
+
+                       _context = activationContext;
+                       _identity = activationContext.Identity;
+                       _data = activationData;
+               }
+
+               public ActivationArguments (ApplicationIdentity applicationIdentity, string[] activationData)
+               {
+                       if (applicationIdentity == null)
+                               throw new ArgumentNullException ("applicationIdentity");
+
+                       _identity = applicationIdentity;
+                       _data = activationData;
+               }
+
+               // properties
+
+               public ActivationContext ActivationContext {
+                       get { return _context; }
+               }
+
+               public string[] ActivationData {
+                       get { return _data; }
+               }
+
+               public ApplicationIdentity ApplicationIdentity {
+                       get { return _identity; }
+               }
+       }
+}
+
+#endif
diff --git a/mcs/class/corlib/System.Runtime.Hosting/ApplicationActivator.cs b/mcs/class/corlib/System.Runtime.Hosting/ApplicationActivator.cs
new file mode 100644 (file)
index 0000000..158a5c1
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// System.Runtime.Hosting.ApplicationActivator class
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2004-2005 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_2_0
+
+using System.Runtime.InteropServices;
+using System.Runtime.Remoting;
+using System.Security;
+using System.Security.Policy;
+
+namespace System.Runtime.Hosting {
+
+       [ComVisible (true)]
+       [MonoTODO ("missing manifest support")]
+       public class ApplicationActivator {
+
+               public ApplicationActivator ()
+               {
+               }
+
+               public virtual ObjectHandle CreateInstance (ActivationContext activationContext)
+               {
+                       return CreateInstance (activationContext, null);
+               }
+
+               public virtual ObjectHandle CreateInstance (ActivationContext activationContext, string[] activationCustomData)
+               {
+                       if (activationContext == null)
+                               throw new ArgumentNullException ("activationContext");
+
+                       // TODO : compare activationContext with the one from this domain
+                       // and use it if it match
+
+                       // TODO : we must pass the activationCustomData in the AppDomainSetup
+                       // even if the activationCustomData don't match ???
+
+                       AppDomainSetup setup = new AppDomainSetup (activationContext);
+                       return CreateInstanceHelper (setup);
+               }
+
+               protected static ObjectHandle CreateInstanceHelper (AppDomainSetup adSetup)
+               {
+                       if (adSetup == null)
+                               throw new ArgumentNullException ("adSetup");
+
+                       if (adSetup.ActivationArguments == null) {
+                               string msg = Locale.GetText ("{0} is missing it's {1} property");
+                               throw new ArgumentException (String.Format (msg, "AppDomainSetup", "ActivationArguments"), "adSetup");
+                       }
+
+                       HostSecurityManager hsm = null;
+                       if (AppDomain.CurrentDomain.DomainManager != null)
+                               hsm = AppDomain.CurrentDomain.DomainManager.HostSecurityManager;
+                       else
+                               hsm = new HostSecurityManager (); // default
+
+                       Evidence applicationEvidence = new Evidence ();
+                       applicationEvidence.AddHost (adSetup.ActivationArguments);
+                       TrustManagerContext context = new TrustManagerContext ();
+                       ApplicationTrust trust = hsm.DetermineApplicationTrust (applicationEvidence, null, context);
+                       if (!trust.IsApplicationTrustedToRun) {
+                               string msg = Locale.GetText ("Current policy doesn't allow execution of addin.");
+                               throw new PolicyException (msg);
+                       }
+
+                       // FIXME: we're missing the information from the manifest
+                       AppDomain ad = AppDomain.CreateDomain ("friendlyName", null, adSetup);
+                       return ad.CreateInstance ("assemblyName", "typeName", null);
+               }
+       }
+}
+
+#endif
diff --git a/mcs/class/corlib/System.Runtime.Hosting/ChangeLog b/mcs/class/corlib/System.Runtime.Hosting/ChangeLog
new file mode 100644 (file)
index 0000000..128c0ee
--- /dev/null
@@ -0,0 +1,5 @@
+2005-05-28  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * ActivationArguments.cs: New. Required to test HostSecurityManager.
+       * ApplicationActivator.cs: Moved from System namespace and updated to
+       beta2 API.
index 7a246a9108751fa994ab1d9781e9196f3c981f17..0a9ec84281e54dee03e678376a110d948719054e 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * TrackingServices.cs: Lock on arraylist syncroot rather than
+       typeof.
+
 2003-11-26  Lluis Sanchez Gual  <lluis@ximian.com>
 
        * EnterpriseServicesHelper.cs: Added to CVS.
index 82d4ba916ce265d012f6800f194d8385c587e494..fded2a45c4d90d10ee2de08d3ee922601b8122e6 100644 (file)
@@ -46,7 +46,7 @@ namespace System.Runtime.Remoting.Services {
                        if (null == handler)
                                throw new ArgumentNullException("handler");
 
-                       lock (typeof(TrackingServices)) {
+                       lock (_handlers.SyncRoot) {
                                if (-1 != _handlers.IndexOf(handler))
                                        throw new RemotingException("handler already registered");
 
@@ -58,7 +58,7 @@ namespace System.Runtime.Remoting.Services {
                        if (null == handler)
                                throw new ArgumentNullException("handler");
 
-                       lock (typeof(TrackingServices)) {
+                       lock (_handlers.SyncRoot) {
                                int idx = _handlers.IndexOf(handler);
                                if (idx == -1)
                                        throw new RemotingException("handler is not registered");
@@ -69,7 +69,7 @@ namespace System.Runtime.Remoting.Services {
     \r
                public static ITrackingHandler[] RegisteredHandlers {\r
                        get {\r
-                               lock (typeof(TrackingServices)) {\r
+                               lock (_handlers.SyncRoot) {\r
                                        if (_handlers.Count == 0)\r
                                                return new ITrackingHandler[0];\r
 \r
index ea6470e673e20eaf25bd9956f3c79d13211c950c..71905e100ade9dbc52981c6fcf43edb47498c5e0 100755 (executable)
@@ -1,3 +1,8 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * InternalRemotingServices.cs: Move hashtable init to
+       cctor. Removes double checked locking and locking on typeof.
+
 2005-05-17  Lluis Sanchez Gual  <lluis@novell.com>
 
        * ObjRef.cs: Use IsInstanceOfType instead of IsAssignableFrom
index 37746580a49dc89a41d1cb443da437e7bf5b87c5..33a8ea34ca970cf8e91336b15d3697140d413545 100644 (file)
@@ -41,7 +41,7 @@ namespace System.Runtime.Remoting
 {
        public class InternalRemotingServices 
        {
-               static Hashtable _soapAttributes;
+               static Hashtable _soapAttributes = new Hashtable ();
                
                public InternalRemotingServices ()
                {
@@ -55,18 +55,8 @@ namespace System.Runtime.Remoting
                }
                
                public static SoapAttribute GetCachedSoapAttribute (object reflectionObject)
-               {
-                       if (_soapAttributes == null)
-                       {
-                               lock (typeof(InternalRemotingServices))
-                               {
-                                       if (_soapAttributes == null)
-                                               _soapAttributes = new Hashtable ();
-                               }
-                       }
-                       
-                       lock (_soapAttributes.SyncRoot)
-                       {
+               {                       
+                       lock (_soapAttributes.SyncRoot) {
                                SoapAttribute att = _soapAttributes [reflectionObject] as SoapAttribute;
                                if (att != null) return att;
                                
index dbf08c09f328b3d1132ea58f3a1ea9b15204604a..da2ef6d147a0377f9e41b9fb1d80a2b4ff5a1fb1 100755 (executable)
@@ -1,3 +1,8 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * CodeGenerator.cs: Move module creation to cctor to kill double
+       checked locking and typeof locking.
+
 2005-05-17  Lluis Sanchez Gual  <lluis@ximian.com>
 
        * CodeGenerator.cs: Don't generate debug info here.
index 34ad46ba71b278bf211417875bd98a85c7ccf6b0..92c956733d3e40e9ef40e4d53f7362f45beb445f 100644 (file)
@@ -44,23 +44,18 @@ namespace System.Runtime.Serialization.Formatters.Binary
                
                static ModuleBuilder _module;
                
-               static public Type GenerateMetadataType (Type type, StreamingContext context)
+               static CodeGenerator ()
                {
-                       if (_module == null)
-                       {
-                               lock (typeof (ObjectWriter))
-                               {
-                                       if (_module == null) {
-                                               AppDomain myDomain = System.Threading.Thread.GetDomain();
-                                               AssemblyName myAsmName = new AssemblyName();
-                                               myAsmName.Name = "__MetadataTypes";
-                                          
-                                               AssemblyBuilder myAsmBuilder = myDomain.DefineInternalDynamicAssembly (myAsmName, AssemblyBuilderAccess.Run);
-                                               _module = myAsmBuilder.DefineDynamicModule("__MetadataTypesModule", false);
-                                       }
-                               }
-                       }
-                       
+                       AppDomain myDomain = System.Threading.Thread.GetDomain();
+                       AssemblyName myAsmName = new AssemblyName();
+                       myAsmName.Name = "__MetadataTypes";
+                  
+                       AssemblyBuilder myAsmBuilder = myDomain.DefineInternalDynamicAssembly (myAsmName, AssemblyBuilderAccess.Run);
+                       _module = myAsmBuilder.DefineDynamicModule("__MetadataTypesModule", false);
+               }
+               
+               static public Type GenerateMetadataType (Type type, StreamingContext context)
+               {               
                        string name = type.Name + "__TypeMetadata";
                        string sufix = "";
                        int n = 0;
@@ -82,7 +77,7 @@ namespace System.Runtime.Serialization.Formatters.Binary
                        
                        parameters = new Type[0];
 
-               ConstructorBuilder ctor = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, parameters);
+                       ConstructorBuilder ctor = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, parameters);
                        ConstructorInfo baseCtor = typeof(ClrTypeMetadata).GetConstructor (new Type[] { typeof(Type) });
                        gen = ctor.GetILGenerator();
 
index c55a3dc60bc868fddc1e5082533b01e5c204e6db..d7e5f460a63163a51e92b7ea0feac6f3d4d0871a 100644 (file)
@@ -1,3 +1,18 @@
+2005-05-27  Sebastien Pouliot  <sebastien@ximian.com> 
+
+       * DefaultPolicies.cs: Refactored code to use the new PermissionBuilder
+       class. Removed references to SWF WebBrowserPermission as it is 
+       documented as obsolete and will be removed before 2.0 final.
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com> 
+
+       * DefaultPolicies.cs: New. Creates the default security policies. 
+       Permissions outside corlib are commented due to a bug with CAS when 
+       loading them.
+       * PolicyLevel.cs: Fixed TODO for Recover method and for reserved names
+       in RemoveNamedPermissionSet method. Moved IsReserved method to new 
+       DefaultPolicies class.
+
 2005-05-16  Sebastien Pouliot  <sebastien@ximian.com> 
  
        * FileCodeGroup.cs: Deal with null PolicyStatement.
diff --git a/mcs/class/corlib/System.Security.Policy/DefaultPolicies.cs b/mcs/class/corlib/System.Security.Policy/DefaultPolicies.cs
new file mode 100644 (file)
index 0000000..d70dede
--- /dev/null
@@ -0,0 +1,339 @@
+//
+// System.Security.Policy.DefaultPolicies.cs
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2005 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.Security.Permissions;
+
+namespace System.Security.Policy {
+
+       /* NOTES
+        *
+        * [1]  Some permissions classes are defined _outside_ mscorlib.dll.
+        *      In this case we're using SecurityElement to construct the 
+        *      permissions manually.
+        *
+        */
+
+#if NET_2_0
+       internal static class DefaultPolicies {
+
+               public static class ReservedNames {
+#else
+       internal sealed class DefaultPolicies {
+
+               public sealed class ReservedNames {
+
+                       internal ReservedNames ()
+                       {
+                       }
+#endif
+                       public const string FullTrust = "FullTrust";
+                       public const string LocalIntranet = "LocalIntranet";
+                       public const string Internet = "Internet";
+                       public const string SkipVerification = "SkipVerification";
+                       public const string Execution = "Execution";
+                       public const string Nothing = "Nothing";
+                       public const string Everything = "Everything";
+
+                       static public bool IsReserved (string name) 
+                       {
+                               switch (name) {
+                               case FullTrust:
+                               case LocalIntranet:
+                               case Internet:
+                               case SkipVerification:
+                               case Execution:
+                               case Nothing:
+                               case Everything:
+                                       return true;
+                               default:
+                                       return false;
+                               }
+                       }
+               }
+
+#if NET_2_0
+               private const string DnsPermissionClass = "System.Net.DnsPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string EventLogPermissionClass = "System.Diagnostics.EventLogPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string PrintingPermissionClass = "System.Drawing.Printing.PrintingPermission, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string SocketPermissionClass = "System.Net.SocketPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string WebPermissionClass = "System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string PerformanceCounterPermissionClass = "System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string DirectoryServicesPermissionClass = "System.DirectoryServices.DirectoryServicesPermission, System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string MessageQueuePermissionClass = "System.Messaging.MessageQueuePermission, System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string ServiceControllerPermissionClass = "System.ServiceProcess.ServiceControllerPermission, System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string OleDbPermissionClass = "System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string SqlClientPermissionClass = "System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+
+               private const string DataProtectionPermissionClass = "System.Security.Permissions.DataProtectionPermission, System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string StorePermissionClass = "System.Security.Permissions.StorePermission, System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+#else
+               private const string DnsPermissionClass = "System.Net.DnsPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string EventLogPermissionClass = "System.Diagnostics.EventLogPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string PrintingPermissionClass = "System.Drawing.Printing.PrintingPermission, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string SocketPermissionClass = "System.Net.SocketPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string WebPermissionClass = "System.Net.WebPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string PerformanceCounterPermissionClass = "System.Diagnostics.PerformanceCounterPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string DirectoryServicesPermissionClass = "System.DirectoryServices.DirectoryServicesPermission, System.DirectoryServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string MessageQueuePermissionClass = "System.Messaging.MessageQueuePermission, System.Messaging, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string ServiceControllerPermissionClass = "System.ServiceProcess.ServiceControllerPermission, System.ServiceProcess, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+               private const string OleDbPermissionClass = "System.Data.OleDb.OleDbPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+               private const string SqlClientPermissionClass = "System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+#endif
+
+               private static NamedPermissionSet _fullTrust;
+               private static NamedPermissionSet _localIntranet;
+               private static NamedPermissionSet _internet;
+               private static NamedPermissionSet _skipVerification;
+               private static NamedPermissionSet _execution;
+               private static NamedPermissionSet _nothing;
+               private static NamedPermissionSet _everything;
+
+               public static PermissionSet GetSpecialPermissionSet (string name)
+               {
+                       if (name == null)
+                               throw new ArgumentNullException ("name");
+
+                       switch (name) {
+                       case ReservedNames.FullTrust:
+                               return FullTrust;
+                       case ReservedNames.LocalIntranet:
+                               return LocalIntranet;
+                       case ReservedNames.Internet:
+                               return Internet;
+                       case ReservedNames.SkipVerification:
+                               return SkipVerification;
+                       case ReservedNames.Execution:
+                               return Execution;
+                       case ReservedNames.Nothing:
+                               return Nothing;
+                       case ReservedNames.Everything:
+                               return Everything;
+                       default:
+                               return null;
+                       }
+               }
+
+               public static PermissionSet FullTrust {
+                       get {
+                               if (_fullTrust == null)
+                                       _fullTrust = BuildFullTrust ();
+                               return _fullTrust;
+                       }
+               }
+
+               public static PermissionSet LocalIntranet {
+                       get {
+                               if (_localIntranet == null)
+                                       _localIntranet = BuildLocalIntranet ();
+                               return _localIntranet;
+                       }
+               }
+
+               public static PermissionSet Internet {
+                       get {
+                               if (_internet == null)
+                                       _internet = BuildInternet ();
+                               return _internet;
+                       }
+               }
+
+               public static PermissionSet SkipVerification {
+                       get {
+                               if (_skipVerification == null)
+                                       _skipVerification = BuildSkipVerification ();
+                               return _skipVerification;
+                       }
+               }
+
+               public static PermissionSet Execution {
+                       get {
+                               if (_execution == null)
+                                       _execution = BuildExecution ();
+                               return _execution;
+                       }
+               }
+
+
+               public static PermissionSet Nothing {
+                       get {
+                               if (_nothing == null)
+                                       _nothing = BuildNothing ();
+                               return _nothing;
+                       }
+               }
+
+               public static PermissionSet Everything {
+                       get {
+                               if (_everything == null)
+                                       _everything = BuildEverything ();
+                               return _everything;
+                       }
+               }
+
+               // internal stuff
+
+               private static NamedPermissionSet BuildFullTrust ()
+               {
+                       return new NamedPermissionSet (ReservedNames.FullTrust, PermissionState.Unrestricted);
+               }
+
+               private static NamedPermissionSet BuildLocalIntranet ()
+               {
+                       NamedPermissionSet nps = new NamedPermissionSet (ReservedNames.LocalIntranet, PermissionState.None);
+
+                       nps.AddPermission (new EnvironmentPermission (EnvironmentPermissionAccess.Read, "USERNAME;USER"));
+
+                       nps.AddPermission (new FileDialogPermission (PermissionState.Unrestricted));
+
+                       IsolatedStorageFilePermission isfp = new IsolatedStorageFilePermission (PermissionState.None);
+                       isfp.UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByUser;
+                       isfp.UserQuota = Int64.MaxValue;
+                       nps.AddPermission (isfp);
+
+                       nps.AddPermission (new ReflectionPermission (ReflectionPermissionFlag.ReflectionEmit));
+
+                       SecurityPermissionFlag spf = SecurityPermissionFlag.Execution | SecurityPermissionFlag.Assertion;
+                       nps.AddPermission (new SecurityPermission (spf));
+
+                       nps.AddPermission (new UIPermission (PermissionState.Unrestricted));
+
+                       // DnsPermission requires stuff outside corlib (System)
+                       nps.AddPermission (PermissionBuilder.Create (DnsPermissionClass, PermissionState.Unrestricted));
+
+                       // PrintingPermission requires stuff outside corlib (System.Drawing)
+                       nps.AddPermission (PermissionBuilder.Create (PrintingPermission ("SafePrinting")));
+#if !NET_2_0
+                       // EventLogPermission requires stuff outside corlib (System)
+                       nps.AddPermission (PermissionBuilder.Create (EventLogPermission (".", "Instrument")));
+#endif
+                       return nps;
+               }
+
+               private static NamedPermissionSet BuildInternet ()
+               {
+                       NamedPermissionSet nps = new NamedPermissionSet (ReservedNames.Internet, PermissionState.None);
+                       nps.AddPermission (new FileDialogPermission (FileDialogPermissionAccess.Open));
+
+                       IsolatedStorageFilePermission isfp = new IsolatedStorageFilePermission (PermissionState.None);
+                       isfp.UsageAllowed = IsolatedStorageContainment.DomainIsolationByUser;
+                       isfp.UserQuota = 10240;
+                       nps.AddPermission (isfp);
+
+                       nps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Execution));
+
+                       nps.AddPermission (new UIPermission (UIPermissionWindow.SafeTopLevelWindows, UIPermissionClipboard.OwnClipboard));
+
+                       // PrintingPermission requires stuff outside corlib (System.Drawing)
+                       nps.AddPermission (PermissionBuilder.Create (PrintingPermission ("SafePrinting")));
+                       return nps;
+               }
+
+               private static NamedPermissionSet BuildSkipVerification ()
+               {
+                       NamedPermissionSet nps = new NamedPermissionSet (ReservedNames.SkipVerification, PermissionState.None);
+                       nps.AddPermission (new SecurityPermission (SecurityPermissionFlag.SkipVerification));
+                       return nps;
+               }
+
+               private static NamedPermissionSet BuildExecution ()
+               {
+                       NamedPermissionSet nps = new NamedPermissionSet (ReservedNames.Execution, PermissionState.None);
+                       nps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Execution));
+                       return nps;
+               }
+
+               private static NamedPermissionSet BuildNothing ()
+               {
+                       return new NamedPermissionSet (ReservedNames.Nothing, PermissionState.None);
+               }
+
+               private static NamedPermissionSet BuildEverything ()
+               {
+                       NamedPermissionSet nps = new NamedPermissionSet (ReservedNames.Everything, PermissionState.None);
+
+                       nps.AddPermission (new EnvironmentPermission (PermissionState.Unrestricted));
+                       nps.AddPermission (new FileDialogPermission (PermissionState.Unrestricted));
+                       nps.AddPermission (new FileIOPermission (PermissionState.Unrestricted));
+                       nps.AddPermission (new IsolatedStorageFilePermission (PermissionState.Unrestricted));
+                       nps.AddPermission (new ReflectionPermission (PermissionState.Unrestricted));
+                       nps.AddPermission (new RegistryPermission (PermissionState.Unrestricted));
+#if NET_2_0
+                       nps.AddPermission (new KeyContainerPermission (PermissionState.Unrestricted));
+#endif
+
+                       // not quite all in this case
+                       SecurityPermissionFlag spf = SecurityPermissionFlag.AllFlags;
+                       spf &= ~SecurityPermissionFlag.SkipVerification;
+                       nps.AddPermission (new SecurityPermission (spf));
+
+                       nps.AddPermission (new UIPermission (PermissionState.Unrestricted));
+
+                       // others requires stuff outside corlib
+                       nps.AddPermission (PermissionBuilder.Create (DnsPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (PrintingPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (EventLogPermissionClass, PermissionState.Unrestricted));
+
+                       nps.AddPermission (PermissionBuilder.Create (SocketPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (WebPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (PerformanceCounterPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (DirectoryServicesPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (MessageQueuePermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (ServiceControllerPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (OleDbPermissionClass, PermissionState.Unrestricted));
+                       nps.AddPermission (PermissionBuilder.Create (SqlClientPermissionClass, PermissionState.Unrestricted));
+#if NET_2_0
+//                     nps.AddPermission (PermissionBuilder.Create (DataProtectionPermissionClass, PermissionState.Unrestricted));
+//                     nps.AddPermission (PermissionBuilder.Create (StorePermissionClass, PermissionState.Unrestricted));
+#endif
+                       return nps;
+               }
+
+               private static SecurityElement PrintingPermission (string level)
+               {
+                       SecurityElement se = new SecurityElement ("IPermission");
+                       se.AddAttribute ("class", PrintingPermissionClass);
+                       se.AddAttribute ("version", "1");
+                       se.AddAttribute ("Level", level);
+                       return se;
+               }
+
+               private static SecurityElement EventLogPermission (string name, string access)
+               {
+                       SecurityElement se = new SecurityElement ("IPermission");
+                       se.AddAttribute ("class", EventLogPermissionClass);
+                       se.AddAttribute ("version", "1");
+
+                       SecurityElement child = new SecurityElement ("Machine");
+                       child.AddAttribute ("name", name);
+                       child.AddAttribute ("access", access);
+
+                       se.AddChild (child);
+                       return se;
+               }
+       }
+}
index 433c9d0d2f85271be1ab7d86669231d93d99c110..6c3002b8266d10cb475a8268d904f83b720001b3 100644 (file)
@@ -214,7 +214,7 @@ namespace System.Security.Policy {
                                throw new ArgumentNullException ("name");
                        if (pSet == null)
                                throw new ArgumentNullException ("pSet");
-                       if (IsReserved (name))
+                       if (DefaultPolicies.ReservedNames.IsReserved (name))
                                throw new ArgumentException (Locale.GetText ("Reserved name"));
 
                        foreach (NamedPermissionSet n in named_permission_sets) {
@@ -299,10 +299,26 @@ namespace System.Security.Policy {
                         return null;
                 }
 
-                [MonoTODO]
                 public void Recover ()
                 {
-                        throw new NotImplementedException ();
+                       if (_location == null) {
+                               string msg = Locale.GetText ("Only file based policies may be recovered.");
+                               throw new PolicyException (msg);
+                       }
+
+                       string backup = _location + ".backup";
+                       if (!File.Exists (backup)) {
+                               string msg = Locale.GetText ("No policy backup exists.");
+                               throw new PolicyException (msg);
+                       }
+
+                       try {
+                               File.Copy (backup, _location, true);
+                       }
+                       catch (Exception e) {
+                               string msg = Locale.GetText ("Couldn't replace the policy file with it's backup.");
+                               throw new PolicyException (msg, e);
+                       }
                 }
 
                 public void RemoveFullTrustAssembly (StrongName sn)
@@ -335,11 +351,12 @@ namespace System.Security.Policy {
                        return RemoveNamedPermissionSet (permSet.Name);
                 }
 
-               [MonoTODO ("Check for reserved names")]
                public NamedPermissionSet RemoveNamedPermissionSet (string name)
                {
                        if (name == null)
                                throw new ArgumentNullException ("name");
+                       if (DefaultPolicies.ReservedNames.IsReserved (name))
+                               throw new ArgumentException (Locale.GetText ("Reserved name"));
 
                        foreach (NamedPermissionSet nps in named_permission_sets) {
                                if (name == nps.Name) {
@@ -372,13 +389,13 @@ namespace System.Security.Policy {
                                LoadFromFile (_location);
                        }
                        else {
-                               named_permission_sets.Add (new NamedPermissionSet ("LocalIntranet"));
-                               named_permission_sets.Add (new NamedPermissionSet ("Internet"));
-                               named_permission_sets.Add (new NamedPermissionSet ("SkipVerification"));
-                               named_permission_sets.Add (new NamedPermissionSet ("Execution"));
-                               named_permission_sets.Add (new NamedPermissionSet ("Nothing"));
-                               named_permission_sets.Add (new NamedPermissionSet ("Everything"));
-                               named_permission_sets.Add (new NamedPermissionSet ("FullTrust"));
+                               named_permission_sets.Add (DefaultPolicies.LocalIntranet);
+                               named_permission_sets.Add (DefaultPolicies.Internet);
+                               named_permission_sets.Add (DefaultPolicies.SkipVerification);
+                               named_permission_sets.Add (DefaultPolicies.Execution);
+                               named_permission_sets.Add (DefaultPolicies.Nothing);
+                               named_permission_sets.Add (DefaultPolicies.Everything);
+                               named_permission_sets.Add (DefaultPolicies.FullTrust);
                        }
                 }
 
@@ -451,23 +468,6 @@ namespace System.Security.Policy {
 
                // internal stuff
 
-               internal bool IsReserved (string name) 
-               {
-                       switch (name) {
-                               case "FullTrust":
-                               case "LocalIntranet":
-                               case "Internet":
-                               case "SkipVerification":
-                               case "Execution":
-                               case "Nothing":
-                               case "Everything":
-                                       // FIXME: Are there others ?
-                                       return true;
-                               default:
-                                       return false;
-                       }
-               }
-
                // NOTE: Callers are expected to check for ControlPolicy
                internal void Save ()
                {
@@ -477,9 +477,18 @@ namespace System.Security.Policy {
                        }
 
                        if (_location != null) {
-                               using (StreamWriter sw = new StreamWriter (_location)) {
-                                       sw.Write (ToXml ().ToString ());
-                                       sw.Close ();
+                               try {
+                                       if (File.Exists (_location)) {
+                                               File.Copy (_location, _location + ".backup", true);
+                                       }
+                               }
+                               catch (Exception) {
+                               }
+                               finally {
+                                       using (StreamWriter sw = new StreamWriter (_location)) {
+                                               sw.Write (ToXml ().ToString ());
+                                               sw.Close ();
+                                       }
                                }
                        }
                }
@@ -505,6 +514,15 @@ namespace System.Security.Policy {
                                root_code_group.Name = "All_Code";
                                break;
                        }
+
+                       named_permission_sets.Clear ();
+                       named_permission_sets.Add (DefaultPolicies.LocalIntranet);
+                       named_permission_sets.Add (DefaultPolicies.Internet);
+                       named_permission_sets.Add (DefaultPolicies.SkipVerification);
+                       named_permission_sets.Add (DefaultPolicies.Execution);
+                       named_permission_sets.Add (DefaultPolicies.Nothing);
+                       named_permission_sets.Add (DefaultPolicies.Everything);
+                       named_permission_sets.Add (DefaultPolicies.FullTrust);
                }
 
                internal string ResolveClassName (string className)
index a92d6628c139f32afd310ee860666ef71de0f136..5715e7d1b815be8d4040a1d3b91c2c4fa484203d 100755 (executable)
@@ -1,3 +1,35 @@
+2005-05-28  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * HostSecurityManager.cs: Added check for ActivationArguments in 
+       application evidences.
+
+2005-05-27  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * CodeAccessPermission.cs: Allow unrestricted identity permissions in
+       2.0.
+       * PermissionBuilder.cs: New. Internal class to help create permission
+       instances from XML or with a fully qualified name. This class also 
+       deals with unification.
+       * PermissionSet.cs: Use PermissionBuilder to create permissions in 
+       FromXml method. Many 2.0 fixes (mostly to support unrestricted 
+       identity permissions)
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * CodeAccessPermission.cs: Fix typo for PermitOnly. Added ComVisible 
+       attribute for NET_2_0 profile.
+       * PermissionSet.cs: Changed static string to const. Added ComVisible 
+       attribute for NET_2_0 profile.
+       * SecurityContext.cs: Capture the identity token but don't create a 
+       WindowsIdentity instance unless required (e.g. Run). This requires 
+       less privileges (so it runs better that way under CAS).
+
+2005-05-25  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * SecurityException.cs: PermissionState isn't always serialized 
+       (depending on the security policy) so it cannot always be deserialized
+       too (and this must work without throwing exceptions).
+
 2005-05-20  Sebastien Pouliot  <sebastien@ximian.com>
 
        * SecurityContext.cs: Includes more methods in NET_1_1 to enable 
index 46e8c0839814d3bf2d6455bc3a56eefc618a9705..4fb8500f16db8771fa53acfae9ac5a2a73d016da 100644 (file)
@@ -43,6 +43,9 @@ namespace System.Security {
 
        [Serializable]
        [SecurityPermission (SecurityAction.InheritanceDemand, ControlEvidence = true, ControlPolicy = true)]
+#if NET_2_0
+       [ComVisible (true)]
+#endif
        public abstract class CodeAccessPermission : IPermission, ISecurityEncodable, IStackWalk {
 
                protected CodeAccessPermission ()
@@ -176,7 +179,7 @@ namespace System.Security {
                                // TODO
                                throw new NotSupportedException ("Currently only declarative Deny are supported.");
                        }
-                       if ((sf.PermitOnly != null) && sf.PermitOnly.DeclarativeSecurity) {
+                       if ((sf.PermitOnly != null) && !sf.PermitOnly.DeclarativeSecurity) {
                                revert = true;
                                // TODO
                                throw new NotSupportedException ("Currently only declarative PermitOnly are supported.");
@@ -257,10 +260,14 @@ namespace System.Security {
                        case PermissionState.None:
                                break;
                        case PermissionState.Unrestricted:
+#if NET_2_0
+                               // unrestricted permissions are possible for identiy permissions
+#else
                                if (!allowUnrestricted) {
                                        msg = Locale.GetText ("Unrestricted isn't not allowed for identity permissions.");
                                        throw new ArgumentException (msg, "state");
                                }
+#endif
                                break;
                        default:
                                msg = String.Format (Locale.GetText ("Invalid enum {0}"), state);
index 65f781afbbce9da7803b3e5752c3b09035e7b891..5ccd275fe1951a54d6e95d79eb66f51bdd500233 100644 (file)
 #if NET_2_0
 
 using System.Reflection;
+using System.Runtime.Hosting;
+using System.Runtime.InteropServices;
 using System.Security.Policy;
 
 namespace System.Security {
 
        [Serializable]
+       [ComVisible (true)]
        public class HostSecurityManager {
 
                public HostSecurityManager ()
@@ -49,14 +52,34 @@ namespace System.Security {
                        get { return HostSecurityManagerOptions.AllFlags; }
                }
 
-               [MonoTODO ("incomplete - docs talks about a System.Runtime.Hosting in corlib but it's not there (yet?)")]
                public virtual ApplicationTrust DetermineApplicationTrust (Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context)
                {
                        if (applicationEvidence == null)
                                throw new ArgumentNullException ("applicationEvidence");
-                       // TODO extract the ActivationContext from the ActivationArguments (inside the applicationEvidence)
-                       ActivationContext ac = null;
-                       ApplicationSecurityManager.DetermineApplicationTrust (ac, context);
+
+                       ActivationArguments aa = null;
+                       foreach (object o in applicationEvidence) {
+                               aa = (o as ActivationArguments);
+                               if (aa != null)
+                                       break;
+                       }
+
+                       if (aa == null) {
+                               string msg = Locale.GetText ("No {0} found in {1}.");
+                               throw new ArgumentException (string.Format (msg, "ActivationArguments", "Evidence"), "applicationEvidence");
+                       }
+                       if (aa.ActivationContext == null) {
+                               string msg = Locale.GetText ("No {0} found in {1}.");
+                               throw new ArgumentException (string.Format (msg, "ActivationContext", "ActivationArguments"), "applicationEvidence");
+                       }
+
+                       // FIXME: this part is still untested
+                       if (ApplicationSecurityManager.DetermineApplicationTrust (aa.ActivationContext, context)) {
+                               if (aa.ApplicationIdentity == null)
+                                       return new ApplicationTrust ();
+                               else
+                                       return new ApplicationTrust (aa.ApplicationIdentity);
+                       }
                        return null;
                }
 
diff --git a/mcs/class/corlib/System.Security/PermissionBuilder.cs b/mcs/class/corlib/System.Security/PermissionBuilder.cs
new file mode 100644 (file)
index 0000000..669f698
--- /dev/null
@@ -0,0 +1,123 @@
+//
+// System.Security.PermissionBuilder.cs
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2005 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.Security.Permissions;
+
+namespace System.Security {
+
+#if NET_2_0
+       internal static class PermissionBuilder {
+#else
+       internal class PermissionBuilder {
+#endif
+               private static object[] psNone = new object [1] { PermissionState.None };
+
+               // can be used to create an empty or an unrestricted permission from any valid type
+               static public IPermission Create (string fullname, PermissionState state)
+               {
+                       if (fullname == null)
+                               throw new ArgumentNullException ("fullname");
+
+                       SecurityElement se = new SecurityElement ("IPermission");
+                       se.AddAttribute ("class", fullname);
+                       se.AddAttribute ("version", "1");
+                       if (state == PermissionState.Unrestricted)
+                               se.AddAttribute ("Unrestricted", "true");
+
+                       return CreatePermission (fullname, se);
+               }
+
+               static public IPermission Create (SecurityElement se)
+               {
+                       if (se == null)
+                               throw new ArgumentNullException ("se");
+
+                       string className = se.Attribute ("class");
+                       if ((className == null) || (className.Length == 0))
+                               throw new ArgumentException ("class");
+
+                       return CreatePermission (className, se);
+               }
+
+               // to use in case where the "class" attribute isn't a fully qualified class name
+               static public IPermission Create (string fullname, SecurityElement se)
+               {
+                       if (fullname == null)
+                               throw new ArgumentNullException ("fullname");
+                       if (se == null)
+                               throw new ArgumentNullException ("se");
+
+                       return CreatePermission (fullname, se);
+               }
+
+               // internal stuff
+
+               internal static IPermission CreatePermission (string fullname, SecurityElement se)
+               {
+                       Type classType = GetUnifiedType (fullname);
+                       if (classType == null) {
+                               string msg = Locale.GetText ("Can't create an instance of permission class {0}.");
+#if NET_2_0
+                               throw new TypeLoadException (String.Format (msg, fullname));
+#else
+                               throw new ArgumentException (String.Format (msg, fullname));
+#endif
+                       }
+
+                       IPermission p = (IPermission) Activator.CreateInstance (classType, psNone);
+                       p.FromXml (se);
+                       return p;
+               }
+
+               // http://blogs.msdn.com/shawnfa/archive/2004/08/05/209320.aspx
+               static internal Type GetUnifiedType (string fullname)
+               {
+                       // ensure that permission signed with ECMA or MS "final" key gets unified
+                       if (fullname.EndsWith (", PublicKeyToken=b03f5f7f11d50a3a") ||
+                           fullname.EndsWith (", PublicKeyToken=b77a5c561934e089")) {
+                               // public key token match, check versions
+#if NET_2_0
+                               if (fullname.IndexOf (", Version=2.0.0.0, ") < 0)
+                                       fullname = Unify (fullname, "2.0.0.0");
+#else
+                               if (fullname.IndexOf (", Version=1.0.5000.0, ") < 0)
+                                       fullname = Unify (fullname, "1.0.5000.0");
+#endif
+                       }
+
+                       return Type.GetType (fullname);
+               }
+
+               static internal string Unify (string fullname, string version)
+               {
+                       int vs = fullname.IndexOf (", Version=");
+                       int ve = fullname.IndexOf (",", vs + 10);
+                       return fullname.Substring (0, vs + 10) + version + fullname.Substring (ve);
+               }
+       }
+}
index ad9bc746af8cdbd6a2c467a6363af00e0432605d..e14ec781a7727fc5323abd6d131764aa53004497 100644 (file)
@@ -46,11 +46,14 @@ namespace System.Security {
        [Serializable]
        // Microsoft public key - i.e. only MS signed assembly can inherit from PermissionSet (1.x) or (2.0) FullTrust assemblies
        [StrongNameIdentityPermission (SecurityAction.InheritanceDemand, PublicKey="002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+#if NET_2_0
+       [ComVisible (true)]
+#endif
        public class PermissionSet: ISecurityEncodable, ICollection, IEnumerable, IStackWalk, IDeserializationCallback {
 
-               private static string tagName = "PermissionSet";
+               private const string tagName = "PermissionSet";
                private const int version = 1;
-               private static object[] psNone = new object [1] { PermissionState.None };
+               private static object[] psUnrestricted = new object [1] { PermissionState.Unrestricted };
 
                private PermissionState state;
                private ArrayList list;
@@ -79,13 +82,16 @@ namespace System.Security {
                        // LAMESPEC: This would be handled by the compiler.  No way permSet is not a PermissionSet.
                        //if (!(permSet is PermissionSet))
                        //      throw new System.ArgumentException(); // permSet is not an instance of System.Security.PermissionSet.
-                       if (permSet == null)
-                               state = PermissionState.Unrestricted;
-                       else {
+                       if (permSet != null) {
                                state = permSet.state;
                                foreach (IPermission p in permSet.list)
                                        list.Add (p);
                        }
+#if !NET_2_0
+                       else {
+                               state = PermissionState.Unrestricted;
+                       }
+#endif
                }
 
                internal PermissionSet (string xml)
@@ -118,13 +124,17 @@ namespace System.Security {
 
                        // we don't add to an unrestricted permission set unless...
                        if (state == PermissionState.Unrestricted) {
+#if NET_2_0
+                               // identity permissions can be unrestricted under 2.x
+                               {
+#else
                                // we're adding identity permission as they don't support unrestricted
                                if (perm is IUnrestrictedPermission) {
+#endif
                                        // we return the union of the permission with unrestricted
                                        // which results in a permission of the same type initialized 
                                        // with PermissionState.Unrestricted
-                                       object[] args = new object [1] { PermissionState.Unrestricted };
-                                       return (IPermission) Activator.CreateInstance (perm.GetType (), args);
+                                       return (IPermission) Activator.CreateInstance (perm.GetType (), psUnrestricted);
                                }
                        }
 
@@ -270,7 +280,6 @@ namespace System.Security {
                        }
                }
 
-               [MonoTODO ("adjust class version with current runtime - unification")]
                public virtual void FromXml (SecurityElement et)
                {
                        if (et == null)
@@ -280,12 +289,19 @@ namespace System.Security {
                                throw new ArgumentException (msg, "et");
                        }
 
-                       if (CodeAccessPermission.IsUnrestricted (et))
+                       list.Clear ();
+
+                       if (CodeAccessPermission.IsUnrestricted (et)) {
                                state = PermissionState.Unrestricted;
-                       else
+#if NET_2_0
+                               // no need to continue for an unrestricted permission
+                               // because identity permissions now "supports" unrestricted
+                               return;
+#endif
+                       } else {
                                state = PermissionState.None;
+                       }
 
-                       list.Clear ();
                        if (et.Children != null) {
                                foreach (SecurityElement se in et.Children) {
                                        string className = se.Attribute ("class");
@@ -297,20 +313,8 @@ namespace System.Security {
                                                // policy class names do not have to be fully qualified
                                                className = Resolver.ResolveClassName (className);
                                        }
-                                       // TODO: adjust class version with current runtime (unification)
-                                       // http://blogs.msdn.com/shawnfa/archive/2004/08/05/209320.aspx
-                                       Type classType = Type.GetType (className);
-                                       if (classType != null) {
-                                               IPermission p = (IPermission) Activator.CreateInstance (classType, psNone);
-                                               p.FromXml (se);
-                                               list.Add (p);
-                                       }
-#if !NET_2_0
-                                       else {
-                                               string msg = Locale.GetText ("Can't create an instance of permission class {0}.");
-                                               throw new ArgumentException (String.Format (msg, se.Attribute ("class")));
-                                       }
-#endif
+
+                                       list.Add (PermissionBuilder.Create (className, se));
                                }
                        }
                }
@@ -489,7 +493,12 @@ namespace System.Security {
                                        // add intersection for this type
                                        intersect.AddPermission (p.Intersect (i));
                                }
+#if NET_2_0
+                               // unrestricted is possible for indentity permissions
+                               else if (unrestricted) {
+#else
                                else if (unrestricted && (p is IUnrestrictedPermission)) {
+#endif
                                        intersect.AddPermission (p);
                                }
                                // or reject!
@@ -535,8 +544,17 @@ namespace System.Security {
                {
                        if ((perm == null) || _readOnly)
                                return perm;
+#if NET_2_0
+                       IUnrestrictedPermission u = (perm as IUnrestrictedPermission);
+                       if (u == null) {
+                               state = PermissionState.None;
+                       } else {
+                               state = u.IsUnrestricted () ? state : PermissionState.None;
+                       }
+#else
                        if (perm is IUnrestrictedPermission)
                                state = PermissionState.None;
+#endif
                        RemovePermission (perm.GetType ());
                        list.Add (perm);
                        return perm;
@@ -628,6 +646,8 @@ namespace System.Security {
                        PermissionSet ps = (obj as PermissionSet);
                        if (ps == null)
                                return false;
+                       if (state != ps.state)
+                               return false;
                        if (list.Count != ps.Count)
                                return false;
 
index 4e90661169fe092162a663af20563847728e6b54..a8fd852e81044d85544a4a94df9ae431a745a286 100644 (file)
@@ -39,7 +39,7 @@ namespace System.Security {
        internal sealed class SecurityContext {
 #endif
                private bool _capture;
-               private WindowsIdentity _winid;
+               private IntPtr _winid;
                private CompressedStack _stack;
                private bool _suppressFlowWindowsIdentity;
                private bool _suppressFlow;
@@ -75,7 +75,7 @@ namespace System.Security {
 
                        SecurityContext capture = new SecurityContext ();
                        capture._capture = true;
-                       capture._winid = WindowsIdentity.GetCurrent ();
+                       capture._winid = WindowsIdentity.GetCurrentToken ();
                        capture._stack = CompressedStack.Capture ();
                        return capture;
                }
@@ -97,7 +97,7 @@ namespace System.Security {
                        set { _stack = value; }
                }
 
-               internal WindowsIdentity WindowsIdentity {
+               internal IntPtr IdentityToken {
                        get { return _winid; }
                        set { _winid = value; }
                }
@@ -125,6 +125,8 @@ namespace System.Security {
                        sc.WindowsIdentityFlowSuppressed = false;
                }
 #if NET_2_0
+               // if you got the context then you can use it
+               [SecurityPermission (SecurityAction.Assert, ControlPrincipal = true)]
                [SecurityPermission (SecurityAction.LinkDemand, Infrastructure = true)]
                static public void Run (SecurityContext securityContext, ContextCallback callBack, object state)
                {
@@ -136,13 +138,14 @@ namespace System.Security {
                        SecurityContext sc = Thread.CurrentThread.ExecutionContext.SecurityContext;
                        IPrincipal original = Thread.CurrentPrincipal;
                        try {
-                               if (sc.WindowsIdentity != null)
-                                       Thread.CurrentPrincipal = new WindowsPrincipal (sc.WindowsIdentity);
+                               if (sc.IdentityToken != IntPtr.Zero) {
+                                       Thread.CurrentPrincipal = new WindowsPrincipal (new WindowsIdentity (sc.IdentityToken));
+                               }
 
                                CompressedStack.Run (securityContext.CompressedStack, callBack, state);
                        }
                        finally {
-                               if ((original != null) && (sc.WindowsIdentity != null))
+                               if ((original != null) && (sc.IdentityToken != IntPtr.Zero))
                                        Thread.CurrentPrincipal = original;
                        }
                }
index 514317e11ea89afc694c43c2ad2a76dc1d70943a..ef82519493388b5010642ddfb0d7fcacae5acb44 100644 (file)
@@ -182,7 +182,15 @@ namespace System.Security {
                        : base (info, context)
                {
                        base.HResult = unchecked ((int)0x8013150A);
-                       permissionState = info.GetString ("PermissionState");
+                       // depending on the security policy the info about PermissionState may
+                       // not be available (but the serializable must work)
+                       SerializationInfoEnumerator e = info.GetEnumerator ();
+                       while (e.MoveNext ()) {
+                               if (e.Name == "PermissionState") {
+                                       permissionState = (string) e.Value;
+                                       break;
+                               }
+                       }
                }
                
                public SecurityException (string message, Exception inner) 
index 394bd2e8c787246be126149591d104402dda1624..6a93f6fc034e7b406e932b25e78203b515957e3a 100755 (executable)
@@ -1,3 +1,12 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * Encoding.cs: Use static object for locking. `volatile' to
+       prevent double checked locking error.
+
+       * StringBuilder.cs: Remove = null inits on fields, saves a few
+       instructions. When we compare _cached_str == _str, we are only
+       interested in pointer based equality, so just do that.
+
 2005-05-06  Ben Maurer  <bmaurer@ximian.com>
 
        * StringBuilder.cs (InternalEnsureCapacity): It is possible that
index 538ff6e7e5fdaabb4e9f6f6a1c2e4bbcb9ab0abb..aed57ee33e54095bdb5db94f7eaa7971ea401a04 100644 (file)
@@ -226,7 +226,7 @@ public abstract class Encoding
        // Returns NULL if the method failed.
        private static Object InvokeI18N (String name, params Object[] args)
        {
-               lock (typeof(Encoding)) {
+               lock (lockobj) {
                        // Bail out if we previously detected that there
                        // is insufficent engine support for I18N handling.
                        if (i18nDisabled) {
@@ -573,22 +573,24 @@ public abstract class Encoding
 #endif // !ECMA_COMPAT
 
        // Storage for standard encoding objects.
-       private static Encoding asciiEncoding = null;
-       private static Encoding bigEndianEncoding = null;
-       private static Encoding defaultEncoding = null;
-       private static Encoding utf7Encoding = null;
-       private static Encoding utf8EncodingWithMarkers = null;
-       private static Encoding utf8EncodingWithoutMarkers = null;
-       private static Encoding unicodeEncoding = null;
-       private static Encoding isoLatin1Encoding = null;
-       private static Encoding unixConsoleEncoding = null;
+       static volatile Encoding asciiEncoding;
+       static volatile Encoding bigEndianEncoding;
+       static volatile Encoding defaultEncoding;
+       static volatile Encoding utf7Encoding;
+       static volatile Encoding utf8EncodingWithMarkers;
+       static volatile Encoding utf8EncodingWithoutMarkers;
+       static volatile Encoding unicodeEncoding;
+       static volatile Encoding isoLatin1Encoding;
+       static volatile Encoding unixConsoleEncoding;
+       
+       static readonly object lockobj = new object ();
 
        // Get the standard ASCII encoding object.
        public static Encoding ASCII
        {
                get {
                        if (asciiEncoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (asciiEncoding == null) {
                                                asciiEncoding = new ASCIIEncoding ();
                                        }
@@ -604,7 +606,7 @@ public abstract class Encoding
        {
                get {
                        if (bigEndianEncoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (bigEndianEncoding == null) {
                                                bigEndianEncoding = new UnicodeEncoding (true, true);
                                        }
@@ -623,7 +625,7 @@ public abstract class Encoding
        {
                get {
                        if (defaultEncoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (defaultEncoding == null) {
                                                // See if the underlying system knows what
                                                // code page handler we should be using.
@@ -662,7 +664,7 @@ public abstract class Encoding
        {
                get {
                        if (isoLatin1Encoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (isoLatin1Encoding == null) {
                                                isoLatin1Encoding = new Latin1Encoding ();
                                        }
@@ -683,7 +685,7 @@ public abstract class Encoding
        {
                get {
                        if (utf7Encoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (utf7Encoding == null) {
                                                utf7Encoding = new UTF7Encoding ();
                                        }
@@ -699,7 +701,7 @@ public abstract class Encoding
        {
                get {
                        if (utf8EncodingWithMarkers == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (utf8EncodingWithMarkers == null) {
                                                utf8EncodingWithMarkers = new UTF8Encoding (true);
                                        }
@@ -716,7 +718,7 @@ public abstract class Encoding
        internal static Encoding UTF8Unmarked {
                get {
                        if (utf8EncodingWithoutMarkers == null) {
-                               lock (typeof (Encoding)){
+                               lock (lockobj){
                                        if (utf8EncodingWithoutMarkers == null){
                                                utf8EncodingWithoutMarkers = new UTF8Encoding (false, false);
                                        }
@@ -732,7 +734,7 @@ public abstract class Encoding
        {
                get {
                        if (unicodeEncoding == null) {
-                               lock (typeof(Encoding)) {
+                               lock (lockobj) {
                                        if (unicodeEncoding == null) {
                                                unicodeEncoding = new UnicodeEncoding (false, true);
                                        }
index 9c229bfdeb7db1b426f8ef60aafa76fdf3096b0f..8be44d6e0e45a404fa5f41500c332d073efe236e 100644 (file)
@@ -45,8 +45,8 @@ namespace System.Text {
        public sealed class StringBuilder 
        {
                private int _length;
-               private string _str = null;
-               private string _cached_str = null;
+               private string _str;
+               private string _cached_str;
                
                private int _maxCapacity = Int32.MaxValue;
                private const int constDefaultCapacity = 16;
@@ -639,8 +639,7 @@ namespace System.Text {
        
                private void InternalEnsureCapacity (int size) 
                {
-                       if (size > _str.Length || _cached_str == _str) 
-                       {
+                       if (size > _str.Length || (object) _cached_str == (object) _str) {
                                int capacity = _str.Length;
 
                                // Try double buffer, if that doesn't work, set the length as capacity
@@ -649,7 +648,7 @@ namespace System.Text {
                                        // The first time a string is appended, we just set _cached_str
                                        // and _str to it. This allows us to do some optimizations.
                                        // Below, we take this into account.
-                                       if (_cached_str == _str && capacity < constDefaultCapacity)
+                                       if ((object) _cached_str == (object) _str && capacity < constDefaultCapacity)
                                                capacity = constDefaultCapacity;
                                        
                                        capacity = capacity << 1;
index 6cbd1b82eb4997b0ec801ff54ebd45a10cb551e0..6ac892ebad282522f68a7bf52c5ec22334b46a24 100644 (file)
@@ -1,3 +1,23 @@
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * Thread.cs: Use a static object for a lock rather than
+       typeof(Thread).
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com> 
+       * SynchronizationContext.cs: Re-introduced SendOrPost method as it's 
+       being used in System.Web.Services.
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * SynchronizationContext.cs: Updated to beta2 API so it doesn't depend
+       on the switcher structure anymore (which will be removed from the 
+       build).
+
+2005-05-24  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * Thread.cs: Removed #pragma which aren't supported by CSC 7.x.
+
 2005-05-20  Sebastien Pouliot  <sebastien@ximian.com>
 
        * AsyncFlowControl.cs: Now available, as internal, in NET_1_1. This is
index 8dd2260a5a64aefbed83951ed1c797103b573d59..6daae0fe72c61c0e9cf1f9a38bc619e79f236f16 100644 (file)
@@ -4,9 +4,7 @@
 // Author:
 //   Lluis Sanchez (lluis@novell.com)
 //
-// Copyright (C) Novell, Inc., 2004
-//
-
+// Copyright (C) 2004-2005 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
@@ -35,7 +33,6 @@ using System.Runtime.InteropServices;
 
 namespace System.Threading 
 {
-       [ComVisibleAttribute (false)]
        public class SynchronizationContext
        {
                [ThreadStatic]
@@ -59,6 +56,24 @@ namespace System.Threading
                {
                        return new SynchronizationContext (this);
                }
+
+               [MonoTODO]
+               public bool IsWaitNotificationRequired ()
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO]
+               public virtual void OperationCompleted ()
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO]
+               public virtual void OperationStarted ()
+               {
+                       throw new NotImplementedException ();
+               }
                
                public virtual void Post (SendOrPostCallback d, object state)
                {
@@ -69,25 +84,27 @@ namespace System.Threading
                {
                        d (state);
                }
-               
+
+               [Obsolete ("does not exists anymore in 2.0 beta2")]
                public virtual void SendOrPost (SendOrPostCallback d, object state)
                {
                        Send (d, state);
                }
-
+               
                [MonoTODO]
-               public virtual void SendOrPost (SendOrPostCallback d, object state, ExecutionContext ec)
+               public static void SetSynchronizationContext (SynchronizationContext syncContext)
                {
                        throw new NotImplementedException ();
                }
-               
+
                [MonoTODO]
-               public static SynchronizationContextSwitcher SetSynchronizationContext (SynchronizationContext syncContext)
+               protected void SetWaitNotificationRequired ()
                {
                        throw new NotImplementedException ();
                }
 
                [CLSCompliant (false)]
+               [PrePrepareMethod ()]
                public virtual int Wait (IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
                {
                        return WaitHelper (waitHandles, waitAll, millisecondsTimeout);
@@ -96,6 +113,7 @@ namespace System.Threading
                [MonoTODO]
                [CLSCompliant (false)]
                [ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
+               [PrePrepareMethod ()]
                protected static int WaitHelper (IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
                {
                        throw new NotImplementedException ();
index 6041cbb936244ddd3f587eadfd9041198626908d..2187586a2ef84d7178bf0c50fcd0c6148ef4fc3c 100644 (file)
@@ -328,6 +328,8 @@ namespace System.Threading
                 */
                private static bool in_currentculture=false;
 
+               static object culture_lock = new object ();
+               
                /*
                 * Thread objects are shared between appdomains, and CurrentCulture
                 * should always return an object in the calling appdomain. See bug
@@ -349,7 +351,7 @@ namespace System.Threading
 
                                byte[] arr = GetSerializedCurrentCulture ();
                                if (arr == null) {
-                                       lock (typeof (Thread)) {
+                                       lock (culture_lock) {
                                                in_currentculture=true;
                                                culture = CultureInfo.ConstructCurrentCulture ();
                                                //
@@ -373,8 +375,7 @@ namespace System.Threading
                                        MemoryStream ms = new MemoryStream (arr);
                                        culture = (CultureInfo)bf.Deserialize (ms);
                                        SetCachedCurrentCulture (culture);
-                               }
-                               finally {
+                               } finally {
                                        in_currentculture = false;
                                }
 
@@ -412,7 +413,7 @@ namespace System.Threading
 
                                byte[] arr = GetSerializedCurrentUICulture ();
                                if (arr == null) {
-                                       lock (typeof (Thread)) {
+                                       lock (culture_lock) {
                                                in_currentculture=true;
                                                /* We don't
                                                 * distinguish
@@ -846,7 +847,6 @@ namespace System.Threading
                // instead and have the property call these.
                
                
-#pragma warning disable 618
                [MonoTODO]
                public ApartmentState GetApartmentState ()
                {
@@ -873,7 +873,6 @@ namespace System.Threading
                                return false;
                        }
                }
-#pragma warning restore 618
                
                [ComVisible (false)]
                public override int GetHashCode ()
index 1b68092c7360e52615ee6971f1381cce3a01493e..5d9089c69b0bea744995b993bd4ccebce701c87d 100644 (file)
@@ -29,6 +29,7 @@
 #if NET_2_0
 
 using System.Reflection;
+using System.Runtime.Hosting;
 using System.Security;
 using System.Security.Policy;
 using System.Threading;
index 4347032808c9666d36befbbad182202c9aeb26b0..91f53f30da882da0c32b9974bc014baaa6320288 100644 (file)
@@ -5,10 +5,7 @@
 //   Dietmar Maurer (dietmar@ximian.com)
 //
 // (C) 2001 Ximian, Inc.  http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005 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
@@ -34,6 +31,10 @@ using System.IO;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
+#if NET_2_0
+using System.Runtime.Hosting;
+#endif
+
 namespace System
 {
        [Serializable]
@@ -56,6 +57,9 @@ namespace System
                private LoaderOptimization loader_optimization;
                bool disallow_binding_redirects;
                bool disallow_code_downloads;
+#if NET_2_0
+               private ActivationArguments _activationArguments;
+#endif
 
                public AppDomainSetup ()
                {
@@ -80,6 +84,25 @@ namespace System
                        disallow_code_downloads = setup.disallow_code_downloads;
                }
 
+#if NET_2_0
+               public AppDomainSetup (ActivationArguments activationArguments)
+               {
+                       _activationArguments = activationArguments;
+               }
+
+               [MonoTODO ("LAMESPEC")]
+               public AppDomainSetup (ActivationContext activationContext)
+               {
+                       if (activationContext == null)
+                               throw new ArgumentNullException ("activationContext");
+
+                       // _activationArguments = activationContext.ActivationArguments;
+
+                       // LAMESPEC: beta2 docs says that the context supplies a 
+                       // ActivationArguments object which isn't the case!
+               }
+#endif
+
                static string GetAppBase (string appBase)
                {
                        if (appBase == null) return null;
@@ -238,5 +261,12 @@ namespace System
                        }
                }
 #endif
+
+#if NET_2_0
+               public ActivationArguments ActivationArguments {
+                       get { return _activationArguments; }
+                       set { _activationArguments = value; }
+               }
+#endif
        }
 }
diff --git a/mcs/class/corlib/System/ApplicationActivator.cs b/mcs/class/corlib/System/ApplicationActivator.cs
deleted file mode 100644 (file)
index 9a36b88..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// System.ApplicationActivator class
-//
-// Author:
-//     Sebastien Pouliot  <sebastien@ximian.com>
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-#if NET_2_0
-
-using System.Runtime.Remoting;
-
-namespace System {
-
-       public class ApplicationActivator {
-
-               private ApplicationActivator _activator;
-
-               public ApplicationActivator ()
-               {
-               }
-
-               [MonoTODO]
-               public virtual ObjectHandle CreateInstance (ActivationContext activationContext)
-               {
-                       if (activationContext == null)
-                               throw new ArgumentNullException ("activationContext");
-                       throw new NotImplementedException ();
-               }
-       }
-}
-
-#endif
index 05e78b27e206f01612e9d30dbf7b6b821b14c12b..36dcb4af4c7aee2c24b5a5f104005f8da868a438 100644 (file)
@@ -1,3 +1,68 @@
+2005-05-28  Ben Maurer  <bmaurer@ximian.com>
+
+       * Type.cs: Check that the arguments of the `types' array are
+       non-null. Fixes bug 71300
+
+2005-05-28  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * AppDomainSetup.cs: Added new 2,0 constructors and the 
+       ActivationArguments property.
+       * AppDomainManager.cs: Added using System.Runtime.Hosting as it is the
+       new location for the ApplicationActivator class.
+       * ApplicationActivator.cs: Moved to System.Runtime.Hosting namespace.
+
+2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
+
+       * Environment.cs: bump corlib version for bug #75060.
+
+2005-05-27  Raja R Harinath  <rharinath@novell.com>
+
+       * Environment.cs (ExpandEnvironmentVariables): Rewrite
+       sb.Append (s.SubString (a, b)) to sb.Append (s, a, b).
+       * String.cs (FormatHelper): Rewrite sb.Append (s.SubString (a)) to
+       sb.Append (s, a, s.Length - a).  Avoid allocating 'pad' string --
+       StringBuilder has an appropriate Append overload.
+
+2005-05-26  Zoltan Varga  <vargaz@freemail.hu>
+
+       * Type.cs (IsEnum): Special case EnumBuilder here.
+
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * MonoType.cs: Changed call from GetName to UnprotectedGetName to
+       allow call to work with serialization under a restrictive policy.
+       The code path (the protected information) isn't being used.
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * Exception.cs: Use the new StackTrace ctor.
+
+       * Type.cs: Improve support for user defined type subclasses.
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTime.cs : Added minimum digit parameter to ParseNumber() to
+         reject 2 digit years for "yyyy".
+         Use GetAllDateTimePatterns() instead of constant string.
+         Fixed bug #72788.
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTime.cs : next_not_digit prevented some valid parse.
+         Just remove it, since now we pass max length to ParseNumber() and
+         thus it is not needed anymore. Fixed bug 63137.
+
+2005-05-24  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTime.cs : HH should not always block tt. Fixed bug #60912.
+         Reset num after whitespace parsing.
+         Added "M/d/yyyy HH':'mm':'ss tt" as an invariant pattern.
+
+2005-05-24  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTime.cs : Allow ',' where whitespaces are allowed.
+         Fixed bug #71289.
+
 2005-05-22  Ben Maurer  <bmaurer@ximian.com>
 
        * BitConverter.cs: Speed this up, fixing 74014. Patch from
index bbc3a1ce44d6750179afeb87598d5dfbbf20035f..5f038c82964fc4eaa3889251c4d201a915b01978 100644 (file)
@@ -112,6 +112,9 @@ namespace System
                        // FIXME: 1078(af-ZA) and 1079(ka-GE) reject it
                        "yyyy/MM/dd HH':'mm':'ssZ", 
 
+                       // bug #60912
+                       "M/d/yyyy HH':'mm':'ss tt",
+
                        // DayOfTheWeek, dd full_month_name yyyy
                        // FIXME: 1054(th-TH) rejects it
                        "dddd, dd MMMM yyyy",
@@ -699,18 +702,17 @@ namespace System
                        DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (fp);
 
                        bool longYear = false;
-                       // Try common formats.
-                       if (ParseExact (s, commonFormats, dfi, styles, out result, false, ref longYear))
-                               return result;
 
-                       // Try common formats, also with invariant culture
-                       if (ParseExact (s, commonFormats, DateTimeFormatInfo.InvariantInfo, styles, out result, false, ref longYear))
+                       // Try all the patterns
+                       if (ParseExact (s, dfi.GetAllDateTimePatterns (), dfi, styles, out result, false, ref longYear))
                                return result;
 
-                       // Next, try all the patterns
-                       string [] patterns = new string [] {"d", "D", "g", "G", "f", "F", "m", "M", "r", "R", "s", "t", "T", "u", "U", "y", "Y"};
+                       // Try common formats.
+//                     if (ParseExact (s, commonFormats, dfi, styles, out result, false, ref longYear))
+//                             return result;
 
-                       if (ParseExact (s, patterns, dfi, styles, out result, false, ref longYear))
+                       // Try common formats with invariant culture
+                       if (ParseExact (s, commonFormats, DateTimeFormatInfo.InvariantInfo, styles, out result, false, ref longYear))
                                return result;
 
                        if (longYear) {
@@ -727,10 +729,10 @@ namespace System
                }
 
                internal static int _ParseNumber (string s, int valuePos,
+                                                 int min_digits,
                                                  int digits,
                                                  bool leadingzero,
                                                  bool sloppy_parsing,
-                                                 bool next_not_digit,
                                                  out int num_parsed)
                {
                        int number = 0, i;
@@ -749,18 +751,14 @@ namespace System
 
                                digits = real_digits;
                        }
-
-                       if (s.Length - valuePos < digits) {
+                       if (digits < min_digits) {
                                num_parsed = -1;
                                return 0;
                        }
 
-                       if (s.Length - valuePos > digits &&
-                           next_not_digit &&
-                           Char.IsDigit (s[digits + valuePos])) {
-                               /* More digits left over */
+                       if (s.Length - valuePos < digits) {
                                num_parsed = -1;
-                               return(0);
+                               return 0;
                        }
 
                        for (i = valuePos; i < digits + valuePos; i++) {
@@ -851,7 +849,6 @@ namespace System
                        double fractionalSeconds = -1;
                        int ampm = -1;
                        int tzsign = -1, tzoffset = -1, tzoffmin = -1;
-                       bool next_not_digit;
 
                        result = new DateTime (0);
                        while (pos+num < len)
@@ -914,62 +911,53 @@ namespace System
                                } else if (chars[pos] == '%') {
                                        pos++;
                                        continue;
-                               } else if (Char.IsWhiteSpace (s [valuePos])) {
+                               } else if (Char.IsWhiteSpace (s [valuePos]) ||
+                                       s [valuePos] == ',' && Char.IsWhiteSpace (chars [pos])) {
                                        valuePos++;
-
-                                       if (Char.IsWhiteSpace (chars[pos])) {
+                                       num = 0;
+                                       if (exact && (style & DateTimeStyles.AllowInnerWhite) == 0) {
+                                               if (!Char.IsWhiteSpace (chars[pos]))
+                                                       return false;
                                                pos++;
                                                continue;
                                        }
 
-                                       if (exact && (style & DateTimeStyles.AllowInnerWhite) == 0)
-                                               return false;
                                        int ws = valuePos;
                                        while (ws < s.Length) {
-                                               if (Char.IsWhiteSpace (s [ws]))
+                                               if (Char.IsWhiteSpace (s [ws]) || s [ws] == ',')
                                                        ws++;
                                                else
                                                        break;
                                        }
                                        valuePos = ws;
+                                       ws = pos;
+                                       while (ws < chars.Length) {
+                                               if (Char.IsWhiteSpace (chars [ws]) || chars [ws] == ',')
+                                                       ws++;
+                                               else
+                                                       break;
+                                       }
+                                       pos = ws;
+                                       continue;
                                }
 
-
                                if ((pos+num+1 < len) && (chars[pos+num+1] == chars[pos+num])) {
                                        num++;
                                        continue;
                                }
 
+
                                int num_parsed = 0;
 
-                               if (pos+num+1 < len) {
-                                       char next_char = chars[pos+num+1];
-                                       
-                                       next_not_digit = !(next_char == 'd' ||
-                                                          next_char == 'M' ||
-                                                          next_char == 'y' ||
-                                                          next_char == 'h' ||
-                                                          next_char == 'H' ||
-                                                          next_char == 'm' ||
-                                                          next_char == 's' ||
-                                                          next_char == 'f' ||
-                                                          next_char == 'z' ||
-                                                          next_char == '"' ||
-                                                          next_char == '\'' ||
-                                                          Char.IsDigit (next_char));
-                               } else {
-                                       next_not_digit = true;
-                               }
-                               
                                switch (chars[pos])
                                {
                                case 'd':
                                        if (day != -1)
                                                return false;
                                        if (num == 0)
-                                               day = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               day = _ParseNumber (s, valuePos,0, 2, false, sloppy_parsing, out num_parsed);
                                        else if (num == 1)
-                                               day = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               day = _ParseNumber (s, valuePos,0, 2, true, sloppy_parsing, out num_parsed);
                                        else if (num == 2)
                                                dayofweek = _ParseEnum (s, valuePos, dfi.AbbreviatedDayNames, out num_parsed);
                                        else
@@ -982,9 +970,9 @@ namespace System
                                        if (month != -1)
                                                return false;
                                        if (num == 0)
-                                               month = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               month = _ParseNumber (s, valuePos, 0, 2, false, sloppy_parsing, out num_parsed);
                                        else if (num == 1)
-                                               month = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               month = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                        else if (num == 2)
                                                month = _ParseEnum (s, valuePos, dfi.AbbreviatedMonthNames , out num_parsed) + 1;
                                        else
@@ -998,14 +986,14 @@ namespace System
                                                return false;
 
                                        if (num == 0) {
-                                               year = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               year = _ParseNumber (s, valuePos,0, 2, false, sloppy_parsing, out num_parsed);
                                        } else if (num < 3) {
-                                               year = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               year = _ParseNumber (s, valuePos,0, 2, true, sloppy_parsing, out num_parsed);
                                        } else {
-                                               year = _ParseNumber (s, valuePos, 4, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               year = _ParseNumber (s, valuePos,4, 4, false, sloppy_parsing, out num_parsed);
                                                if ((year >= 1000) && (num_parsed == 4) && (!longYear) && (s.Length > 4 + valuePos)) {
                                                        int np = 0;
-                                                       int ly = _ParseNumber (s, valuePos, 5, false, sloppy_parsing, next_not_digit, out np);
+                                                       int ly = _ParseNumber (s, valuePos, 5, 5, false, sloppy_parsing, out np);
                                                        longYear = (ly > 9999);
                                                }
                                                num = 3;
@@ -1019,10 +1007,10 @@ namespace System
                                        if (hour != -1)
                                                return false;
                                        if (num == 0)
-                                               hour = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               hour = _ParseNumber (s, valuePos,0, 2, false, sloppy_parsing, out num_parsed);
                                        else
                                        {
-                                               hour = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               hour = _ParseNumber (s, valuePos,0, 2, true, sloppy_parsing, out num_parsed);
                                                num = 1;
                                        }
 
@@ -1036,25 +1024,25 @@ namespace System
                                        if ((hour != -1) || (ampm >= 0))
                                                return false;
                                        if (num == 0)
-                                               hour = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               hour = _ParseNumber (s, valuePos,0, 2, false, sloppy_parsing, out num_parsed);
                                        else
                                        {
-                                               hour = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               hour = _ParseNumber (s, valuePos,0, 2, true, sloppy_parsing, out num_parsed);
                                                num = 1;
                                        }
                                        if (hour >= 24)
                                                return false;
 
-                                       ampm = -2;
+//                                     ampm = -2;
                                        break;
                                case 'm':
                                        if (minute != -1)
                                                return false;
                                        if (num == 0)
-                                               minute = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               minute = _ParseNumber (s, valuePos, 0, 2, false, sloppy_parsing, out num_parsed);
                                        else
                                        {
-                                               minute = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               minute = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                                num = 1;
                                        }
                                        if (minute >= 60)
@@ -1065,10 +1053,10 @@ namespace System
                                        if (second != -1)
                                                return false;
                                        if (num == 0)
-                                               second = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               second = _ParseNumber (s, valuePos, 0, 2, false, sloppy_parsing, out num_parsed);
                                        else
                                        {
-                                               second = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                               second = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                                num = 1;
                                        }
                                        if (second >= 60)
@@ -1079,7 +1067,7 @@ namespace System
                                        if (fractionalSeconds != -1)
                                                return false;
                                        num = Math.Min (num, 6);
-                                       double decimalNumber = (double) _ParseNumber (s, valuePos, num+1, true, sloppy_parsing, next_not_digit, out num_parsed);
+                                       double decimalNumber = (double) _ParseNumber (s, valuePos, 0, num+1, true, sloppy_parsing, out num_parsed);
                                        if (num_parsed == -1)
                                                return false;
 
@@ -1120,12 +1108,12 @@ namespace System
                                                return false;
                                        valuePos++;
                                        if (num == 0)
-                                               tzoffset = _ParseNumber (s, valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+                                               tzoffset = _ParseNumber (s, valuePos, 0, 2, false, sloppy_parsing, out num_parsed);
                                        else if (num == 1)
-                                               tzoffset = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+                                               tzoffset = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                        else
                                        {
-                                               tzoffset = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+                                               tzoffset = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                                if (num_parsed < 0)
                                                        return false;
                                                valuePos += num_parsed;
@@ -1134,7 +1122,7 @@ namespace System
                                                else if (!_ParseString (s, valuePos, 0, dfi.TimeSeparator, out num_parsed))
                                                        return false;
                                                valuePos += num_parsed;
-                                               tzoffmin = _ParseNumber (s, valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+                                               tzoffmin = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
                                                if (num_parsed < 0)
                                                        return false;
                                                num = 2;
index 2ced572579509cee193cdd890fc0873a7df90709..9b3032f02ac37703ba6d315a9b71bd652878401b 100644 (file)
@@ -59,7 +59,7 @@ namespace System {
                 * Changes which are already detected at runtime, like the addition
                 * of icalls, do not require an increment.
                 */
-               private const int mono_corlib_version = 35;
+               private const int mono_corlib_version = 36;
                
                [MonoTODO]
                public enum SpecialFolder
@@ -338,7 +338,7 @@ namespace System {
                                else
                                        textLen = off1 - oldOff2;
                                if(off1 >= oldOff2 || off1 == -1)
-                                       result.Append (name.Substring (oldOff2+1, textLen));
+                                       result.Append (name, oldOff2+1, textLen);
                        } while (off2 > -1 && off2 < len);
                                
                        return result.ToString ();
index 48b5c323654f3331c48b0febc670b969d6030e12..1153e244a05be96094158fb2ce79a8e57c579f7a 100644 (file)
@@ -155,7 +155,7 @@ namespace System
                                        return null;
 
                                if (stack_trace == null) {
-                                       StackTrace st = new StackTrace (this, true);
+                                       StackTrace st = new StackTrace (this, 0, true, true);
 
                                        StringBuilder sb = new StringBuilder ();
 
index 13768849b05f98601f62d6f36a95ca31f8dae190..ae239381b7b2e912c93f1d6c5785890a520abcff 100644 (file)
@@ -445,7 +445,7 @@ namespace System
 
                public override string AssemblyQualifiedName {
                        get {
-                               return getFullName (false) + ", " + Assembly.GetName ().ToString ();
+                               return getFullName (false) + ", " + Assembly.UnprotectedGetName ().ToString ();
                        }
                }
 
index 4572c8b4eb495f6a8a5e2d5956cbd860b8838a0b..0111e96d3271edd7364782d031b9f89a92d38f58 100644 (file)
@@ -930,14 +930,15 @@ namespace System
                                        // pad formatted string and append to result
 
                                        if (width > str.length) {
-                                               string pad = new String (' ', width - str.length);
+                                               const char padchar = ' ';
+                                               int padlen = width - str.length;
 
                                                if (left_align) {
                                                        result.Append (str);
-                                                       result.Append (pad);
+                                                       result.Append (padchar, padlen);
                                                }
                                                else {
-                                                       result.Append (pad);
+                                                       result.Append (padchar, padlen);
                                                        result.Append (str);
                                                }
                                        }
@@ -956,7 +957,7 @@ namespace System
                        }
 
                        if (start < format.length)
-                               result.Append (format.Substring (start));
+                               result.Append (format, start, format.Length - start);
                }
 
                public unsafe static String Copy (String str)
index 3d4f8caed093fb15e41f0acaa5c50c4bb916890d..b8c56ada2893cd385914d482035ad7d52e6f4b33 100644 (file)
@@ -212,7 +212,7 @@ namespace System {
                                        return true;
                                if (IsInterface)
                                        return false;
-                               return !type_is_subtype_of (this, typeof (System.ValueType), false);
+                               return !is_subtype_of (this, typeof (System.ValueType), false);
                        }
                }
 
@@ -230,7 +230,11 @@ namespace System {
 
                public bool IsEnum {
                        get {
-                               return type_is_subtype_of (this, typeof (System.Enum), false) &&
+                               // This hack is needed because EnumBuilder's UnderlyingSystemType returns the enum's basetype
+                               if (this is EnumBuilder)
+                                       return true;
+
+                               return is_subtype_of (this, typeof (System.Enum), false) &&
                                        this != typeof (System.Enum);
                        }
                }
@@ -335,7 +339,7 @@ namespace System {
                        get {
                                // Enums and delegates are always serializable
                                return (Attributes & TypeAttributes.Serializable) != 0 || IsEnum || 
-                                       type_is_subtype_of (this, typeof (System.Delegate), false);
+                                       is_subtype_of (this, typeof (System.Delegate), false);
                        }
                }
 
@@ -456,9 +460,13 @@ namespace System {
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                public extern static TypeCode GetTypeCodeInternal (Type type);
 
-               public static TypeCode GetTypeCode (Type type)
-               {
-                       return GetTypeCodeInternal (type);
+               public static TypeCode GetTypeCode (Type type) {
+                       type = type.UnderlyingSystemType;
+
+                       if (!type.IsSystemType)
+                               return Type.GetTypeCode (typeof (object));
+                       else
+                               return GetTypeCodeInternal (type);
                }
 
                [MonoTODO]
@@ -524,13 +532,24 @@ namespace System {
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                internal static extern bool type_is_assignable_from (Type a, Type b);
-               
+
+               internal static bool is_subtype_of (Type a, Type b, bool check_interfaces)
+               {
+                       a = a.UnderlyingSystemType;
+                       b = b.UnderlyingSystemType;
+
+                       if (!a.IsSystemType || !b.IsSystemType)
+                               return false;
+                       else
+                               return type_is_subtype_of (a, b, check_interfaces);
+               }
+
                public virtual bool IsSubclassOf (Type c)
                {
                        if (c == null)
                                return false;
 
-                       return (this != c) && type_is_subtype_of (this, c, false);
+                       return (this != c) && is_subtype_of (this, c, false);
                }
 
                public virtual Type[] FindInterfaces (TypeFilter filter, object filterCriteria)
@@ -584,6 +603,21 @@ namespace System {
                        if (c is TypeBuilder)
                                return ((TypeBuilder)c).IsAssignableTo (this);
 
+                       /* Handle user defined type classes */
+                       if (!IsSystemType) {
+                               Type systemType = UnderlyingSystemType;
+                               if (!systemType.IsSystemType)
+                                       return false;
+                               return systemType.IsAssignableFrom (c);
+                       }
+
+                       if (!c.IsSystemType) {
+                               Type underlyingType = c.UnderlyingSystemType;
+                               if (!underlyingType.IsSystemType)
+                                       return false;
+                               return IsAssignableFrom (underlyingType);
+                       }
+
                        return type_is_assignable_from (this, c);
                }
 
@@ -787,7 +821,11 @@ namespace System {
                                throw new ArgumentNullException ("name");
                        if (types == null)
                                throw new ArgumentNullException ("types");
-
+                       
+                       foreach (Type t in types)
+                               if (t == null)
+                                       throw new ArgumentNullException ("types");
+                       
                        return GetPropertyImpl (name, bindingAttr, binder, returnType, types, modifiers);
                }
 
@@ -837,15 +875,13 @@ namespace System {
 
                public ConstructorInfo GetConstructor (Type[] types)
                {
-                       return GetConstructorImpl (
-                               DefaultBindingFlags, null, CallingConventions.Any, types, null);
+                       return GetConstructor (DefaultBindingFlags, null, CallingConventions.Any, types, null);
                }
 
                public ConstructorInfo GetConstructor (BindingFlags bindingAttr, Binder binder,
                                                       Type[] types, ParameterModifier[] modifiers)
                {
-                       return GetConstructorImpl (
-                               bindingAttr, binder, CallingConventions.Any, types, modifiers);
+                       return GetConstructor (bindingAttr, binder, CallingConventions.Any, types, modifiers);
                }
 
                public ConstructorInfo GetConstructor (BindingFlags bindingAttr, Binder binder,
@@ -854,6 +890,10 @@ namespace System {
                {
                        if (types == null)
                                throw new ArgumentNullException ("types");
+                       
+                       foreach (Type t in types)
+                               if (t == null)
+                                       throw new ArgumentNullException ("types");
 
                        return GetConstructorImpl (bindingAttr, binder, callConvention, types, modifiers);
                }
index 1fe3869925657465a596878bc524ee33a70825d2..c6e4efe5049062c96087dcb6a35d49c39a480255 100644 (file)
@@ -1,22 +1,26 @@
-2005-05-09  Atsushi Enomoto  <atsushi@ximian.com>\r
-\r
-       * StackTest.cs : test for CopyTo() on an empty stack.\r
-\r
-2005-01-05  Nick Drochak  <ndrochak@ieee.org>\r
-\r
-       * ComparerTest.cs: Modernize and fix line endings. Test is failing with\r
-       mono, see if this change has any effect.\r
-\r
-2004-12-16  Lluis Sanchez Gual  <lluis@novell.com>\r
-\r
-       * HashtableTest.cs: Added test for bug #70570.\r
-\r
+2005-05-26  Ben Maurer  <bmaurer@ximian.com>
+
+       * QueueTest.cs: New test.
+
+2005-05-09  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * StackTest.cs : test for CopyTo() on an empty stack.
+
+2005-01-05  Nick Drochak  <ndrochak@ieee.org>
+
+       * ComparerTest.cs: Modernize and fix line endings. Test is failing with
+       mono, see if this change has any effect.
+
+2004-12-16  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * HashtableTest.cs: Added test for bug #70570.
+
 2004-08-24 Nick Drochak <ndrochak@ieee.org>
 
-       \r
-\r
-       * ComparerTest.cs: On MS.NET 1.1 Compare("a", "A") returns < 0.\r
-       \r
+       
+
+       * ComparerTest.cs: On MS.NET 1.1 Compare("a", "A") returns < 0.
+       
 
 
 2004-07-28  Dick Porter  <dick@ximian.com>
                Tests for the above* ArrayList.cs
                Added methods to support IList wrappers
 
-2003-04-15  Eduardo Garcia Cebollero <kiwnix@yahoo.es>\r
-\r
-       * CaseInsensitiveComparerTest.cs: Added Some Tests.\r
-\r
-2003-04-09  Ville Palo <vi64pa@kolumbus.fi>\r
-\r
-       * ArraListTest.cs: Added little test for Sort ().\r
-       \r
-2003-02-15  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * CollectionBaseTest.cs: Make it a better NUnit v2 example\r
-\r
-2003-02-15  Pedro Martínez Juliá  <yoros@wanadoo.es>\r
-\r
-       * HashtableTest.cs: Add serialization test.\r
-\r
-2002-12-21  Nick Drochak <ndrochak@gol.com>\r
-\r
-       * all: make tests build and run under nunit2\r
-\r
-2002-10-16  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * QueueTest.cs: Add test from tetsuo via Vladimir Vukicevic \r
-       (vladimir@pobox.com).\r
-\r
-2002-10-09  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * SortedListTest.cs: Re-enable test for IsSyncronized\r
-\r
-2002-09-24  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs: Add test for InsertRange() for the case where an\r
-       ArrayList is passed to itself to be insterted.\r
-\r
-2002-09-24  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs: Add check that enumerator is invalidated after a\r
-       method that changes the list, such as Add(), Remove(), etc.\r
-\r
-2002-07-02  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * SortedListTest.cs: Fix some expected/actual value parameters for\r
-       AssertEquals().\r
-\r
-2002-06-30  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * SortedListTest.cs: Fix some expected/actual value parameters in the\r
-       Assert()'s. Disable a part of test until the class is finished.\r
-\r
-2002-06-25  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * QueueTest.cs: Trap some unexpected exceptions and add a bit of\r
-       verbosity to some assert messages.\r
-\r
-2002-06-20  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * SortedListTest.cs: Make tests pass against ms.net.\r
-       * QueueTest.cs: Make tests pass against ms.net.\r
-\r
-2002-06-19  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * AllTests.cs: Sort names and include missing tests.\r
-       * SortedListTest.cs: Change Console.WriteLine() into Fail().\r
-\r
-2002-05-27  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestLastIndexOf): Add try-catch block to report\r
-       where we are throwing.\r
-\r
-2002-05-21  Lawrence Pit  <loz@cable.a2000.nl>\r
-\r
-       * ArrayListTest.cs: Added several tests to test for 0 capacity\r
-\r
-2002-05-05  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs: Test for RankException when constructing from a \r
-       multi-dimensional array. Confirmed behavior from MS.NET\r
-\r
-2002-05-01  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestBinarySearch) : accomodate possible bug in\r
-       .NET runtime.\r
-\r
-2002/05/01  Nick Drochak <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestCopyTo) : Make assert messages unique and\r
-       avoid possible MS.NET bug when test is run on .NET.\r
-\r
-2002/04/30  Nick Drochak <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestInsertRange) : Make assert messages unique.\r
-\r
-2002-04-30  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestTrimToSize): Change test so that it doesn't\r
-       rely on the specific timing of a capacity change.  Our corlib doubles\r
-       capacity sooner than the reference system does.\r
-\r
-2002-04-30  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs: Catch unexpected exception typs and report as\r
-       failures.\r
-\r
-2002-04-29  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (TestBinarySearch): Catch the correct exception here.\r
-\r
-2002-04-29  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs (): Remove test on unsorted array.  Behavior is \r
-       undefined according to docs. Re-added test that was commented out.\r
-\r
-2002-03-24  Duncan Mak  <duncan@ximian.com>\r
-\r
-       * SortedListTest.cs: Committed to CVS for Jaak Simm <jaaksimm@firm.ee>.\r
-\r
-2002-02-28  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * HashtableTest.cs: make the second test class public.  The was showing\r
-       as an error whe run against the mscorlib.  Might be because of the\r
-       new NUnit that was just checked in.\r
-\r
-2002-02-20  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * ArrayListTest.cs: Add a small assert for a bug that I found and fixed\r
-       in ArrayList.  Make sure it doesn't come up again.\r
-\r
-2002-02-10  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * QueueTest.cs: Put in correct namespace.\r
-\r
-2002-02-09  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * StackTest.cs: Removed test for IsReadonly.  Doesn't exist in .NET 1.0\r
-\r
-2002-01-20  Nick Drochak  <ndrochak@gol.com>\r
-\r
-       * BitArrayTest.cs: wrapped try-catch blocks around several of the tests. \r
-       NUnit doesn't properly catch exception here anymore.  Must be something\r
-       to do with upgrading to .NET.1.0.\r
+2003-04-15  Eduardo Garcia Cebollero <kiwnix@yahoo.es>
+
+       * CaseInsensitiveComparerTest.cs: Added Some Tests.
+
+2003-04-09  Ville Palo <vi64pa@kolumbus.fi>
+
+       * ArraListTest.cs: Added little test for Sort ().
+       
+2003-02-15  Nick Drochak  <ndrochak@gol.com>
+
+       * CollectionBaseTest.cs: Make it a better NUnit v2 example
+
+2003-02-15  Pedro Martínez Juliá  <yoros@wanadoo.es>
+
+       * HashtableTest.cs: Add serialization test.
+
+2002-12-21  Nick Drochak <ndrochak@gol.com>
+
+       * all: make tests build and run under nunit2
+
+2002-10-16  Nick Drochak  <ndrochak@gol.com>
+
+       * QueueTest.cs: Add test from tetsuo via Vladimir Vukicevic 
+       (vladimir@pobox.com).
+
+2002-10-09  Nick Drochak  <ndrochak@gol.com>
+
+       * SortedListTest.cs: Re-enable test for IsSyncronized
+
+2002-09-24  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs: Add test for InsertRange() for the case where an
+       ArrayList is passed to itself to be insterted.
+
+2002-09-24  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs: Add check that enumerator is invalidated after a
+       method that changes the list, such as Add(), Remove(), etc.
+
+2002-07-02  Nick Drochak  <ndrochak@gol.com>
+
+       * SortedListTest.cs: Fix some expected/actual value parameters for
+       AssertEquals().
+
+2002-06-30  Nick Drochak  <ndrochak@gol.com>
+
+       * SortedListTest.cs: Fix some expected/actual value parameters in the
+       Assert()'s. Disable a part of test until the class is finished.
+
+2002-06-25  Nick Drochak  <ndrochak@gol.com>
+
+       * QueueTest.cs: Trap some unexpected exceptions and add a bit of
+       verbosity to some assert messages.
+
+2002-06-20  Nick Drochak  <ndrochak@gol.com>
+
+       * SortedListTest.cs: Make tests pass against ms.net.
+       * QueueTest.cs: Make tests pass against ms.net.
+
+2002-06-19  Nick Drochak  <ndrochak@gol.com>
+
+       * AllTests.cs: Sort names and include missing tests.
+       * SortedListTest.cs: Change Console.WriteLine() into Fail().
+
+2002-05-27  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestLastIndexOf): Add try-catch block to report
+       where we are throwing.
+
+2002-05-21  Lawrence Pit  <loz@cable.a2000.nl>
+
+       * ArrayListTest.cs: Added several tests to test for 0 capacity
+
+2002-05-05  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs: Test for RankException when constructing from a 
+       multi-dimensional array. Confirmed behavior from MS.NET
+
+2002-05-01  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestBinarySearch) : accomodate possible bug in
+       .NET runtime.
+
+2002/05/01  Nick Drochak <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestCopyTo) : Make assert messages unique and
+       avoid possible MS.NET bug when test is run on .NET.
+
+2002/04/30  Nick Drochak <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestInsertRange) : Make assert messages unique.
+
+2002-04-30  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestTrimToSize): Change test so that it doesn't
+       rely on the specific timing of a capacity change.  Our corlib doubles
+       capacity sooner than the reference system does.
+
+2002-04-30  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs: Catch unexpected exception typs and report as
+       failures.
+
+2002-04-29  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs (TestBinarySearch): Catch the correct exception here.
+
+2002-04-29  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs (): Remove test on unsorted array.  Behavior is 
+       undefined according to docs. Re-added test that was commented out.
+
+2002-03-24  Duncan Mak  <duncan@ximian.com>
+
+       * SortedListTest.cs: Committed to CVS for Jaak Simm <jaaksimm@firm.ee>.
+
+2002-02-28  Nick Drochak  <ndrochak@gol.com>
+
+       * HashtableTest.cs: make the second test class public.  The was showing
+       as an error whe run against the mscorlib.  Might be because of the
+       new NUnit that was just checked in.
+
+2002-02-20  Nick Drochak  <ndrochak@gol.com>
+
+       * ArrayListTest.cs: Add a small assert for a bug that I found and fixed
+       in ArrayList.  Make sure it doesn't come up again.
+
+2002-02-10  Nick Drochak  <ndrochak@gol.com>
+
+       * QueueTest.cs: Put in correct namespace.
+
+2002-02-09  Nick Drochak  <ndrochak@gol.com>
+
+       * StackTest.cs: Removed test for IsReadonly.  Doesn't exist in .NET 1.0
+
+2002-01-20  Nick Drochak  <ndrochak@gol.com>
+
+       * BitArrayTest.cs: wrapped try-catch blocks around several of the tests. 
+       NUnit doesn't properly catch exception here anymore.  Must be something
+       to do with upgrading to .NET.1.0.
index dbc2577de2d564b59ca1b93d4236b5945a8d6a23..5362a6b4af32c2c4323fdc4dee1f02a9aadc7099 100644 (file)
@@ -442,7 +442,16 @@ namespace MonoTests.System.Collections {
                        {\r
                                AssertEquals("Exception's ParamName must be \"queue\"", "queue", e.ParamName);\r
                        }\r
-               }\r
+               }
+               
+               [Test]
+               public void TestAlwaysGrows() 
+               {
+                       // In bug #61919 the grow () method might not always grow (if the size
+                       // was 0, or due to rounding).
+                       Queue queue = new Queue (new Queue());
+                       queue.Enqueue(1);
+               }
 \r
                [Test]\r
                public void SynchronizedClone () \r
index fb7824800d69ee6d079657fb07bce5aebd1377af..b788eee7a2f9555e0a7dc528bf16d080ebcbcc30 100644 (file)
@@ -239,7 +239,6 @@ namespace MonoTests.System.Reflection.Emit {
 
                [Test]
                [ExpectedException (typeof(ArgumentNullException))]
-               [Category("NotWorking")]
                public void TestGetConstructorNullElementType ()
                {
                        EnumBuilder enumBuilder = GenerateEnum ();
index b7fdd933124c4d37f5b27ea2ae5b1000c3477c58..3304f883e80c17d2062db53c31f4e49d23c1820a 100644 (file)
@@ -1,3 +1,13 @@
+2005-05-27  Zoltan Varga  <vargaz@freemail.hu>
+
+       * MethodInfoTest.cs: Reenable the pseudo attribute test.
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * TypeDelegatorTest.cs: New file.
+
+       * MethodInfoTest.cs: Add a test for bug #75029.
+
 2005-05-20  Gert Driesen <drieseng@users.sourceforge.net>
 
        * AssemblyTest.cs: Allow test for bug #75958 to pass on .NET 2.0
index 0dcdb92f6f60b2316261bf85d79b3478154ca83d..7d653b690d7b3a2ccad516af1ddf047c0df6eaa8 100644 (file)
@@ -42,9 +42,7 @@ namespace MonoTests.System.Reflection
        [TestFixture]
        public class MethodInfoTest : Assertion
        {
-               //              [DllImport ("libfoo", EntryPoint="foo", CharSet=CharSet.Unicode, ExactSpelling=false, PreserveSig=true, SetLastError=true, BestFitMapping=true, ThrowOnUnmappableChar=true)]
-               // bug #73161
-               [DllImport ("libfoo", EntryPoint="foo", CharSet=CharSet.Unicode, ExactSpelling=false, PreserveSig=true, SetLastError=true)]
+               [DllImport ("libfoo", EntryPoint="foo", CharSet=CharSet.Unicode, ExactSpelling=false, PreserveSig=true, SetLastError=true, BestFitMapping=true, ThrowOnUnmappableChar=true)]
                public static extern void dllImportMethod ();
 
                [MethodImplAttribute(MethodImplOptions.PreserveSig)]
@@ -56,7 +54,6 @@ namespace MonoTests.System.Reflection
                }
 
 #if NET_2_0
-               [Category ("NotWorking")]
                [Test]
                public void PseudoCustomAttributes ()
                {
@@ -83,6 +80,19 @@ namespace MonoTests.System.Reflection
                }
 #endif
 
+               public static int foo (int i, int j)
+               {
+                       return i + j;
+               }
+
+               [Test]
+               public void StaticInvokeWithObject ()
+               {
+                       MethodInfo mi = typeof (MethodInfoTest).GetMethod ("foo");
+                       
+                       mi.Invoke (new Object (), new object [] { 1, 2 });
+               }
+
                [Test]
                public void ByRefInvoke ()
                {
diff --git a/mcs/class/corlib/Test/System.Reflection/TypeDelegatorTest.cs b/mcs/class/corlib/Test/System.Reflection/TypeDelegatorTest.cs
new file mode 100644 (file)
index 0000000..a5378a6
--- /dev/null
@@ -0,0 +1,75 @@
+//
+// TypeDelegatorTest.cs - NUnit Test Cases for the TypeDelegator class
+//
+// Zoltan Varga (vargaz@freemail.hu)
+//
+// Copyright (C) 2005 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.Threading;
+using System.Reflection;
+using System.Reflection.Emit;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Reflection
+{
+[TestFixture]
+public class TypeDelegatorTest : Assertion {
+
+       [Test]
+       public void IsAssignableFrom ()
+       {
+               TypeDelegator td = new TypeDelegator (typeof (int));
+
+               AssertEquals (true, typeof (int).IsAssignableFrom (td));
+               AssertEquals (false, typeof (string).IsAssignableFrom (td));
+               AssertEquals (true, td.IsAssignableFrom (typeof (int)));
+               AssertEquals (false, td.IsAssignableFrom (typeof (string)));
+    }
+
+       [Test]
+       public void CreateInstance ()
+       {
+               AssertEquals (typeof (int[]), Array.CreateInstance (new TypeDelegator (typeof (int)), 100).GetType ());
+    }
+               
+       [Test]
+       public void Properties ()
+       {
+               AssertEquals (false, new TypeDelegator (typeof (IComparable)).IsClass);
+               AssertEquals (false, new TypeDelegator (typeof (IComparable)).IsValueType);
+               AssertEquals (false, new TypeDelegator (typeof (IComparable)).IsEnum);
+               AssertEquals (true, new TypeDelegator (typeof (IComparable)).IsInterface);
+
+               AssertEquals (true, new TypeDelegator (typeof (TypeDelegatorTest)).IsClass);
+               AssertEquals (false, new TypeDelegator (typeof (TypeDelegatorTest)).IsValueType);
+               AssertEquals (false, new TypeDelegator (typeof (TypeDelegatorTest)).IsInterface);
+
+               AssertEquals (false, new TypeDelegator (typeof (TypeCode)).IsClass);
+               AssertEquals (false, new TypeDelegator (typeof (TypeCode)).IsInterface);
+               AssertEquals (true, new TypeDelegator (typeof (TypeCode)).IsValueType);
+               AssertEquals (true, new TypeDelegator (typeof (TypeCode)).IsEnum);
+       }
+}
+}
index 2f35162135fdd151f442e6827848ee6524d3f91a..8358e9e62867fb4e70f4d184ced3515feaccd7e4 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * PolicyLevelTest.cs: Added unit tests for RemovePermissionSet and
+       Recover methods.
+
 2005-05-16  Sebastien Pouliot  <sebastien@ximian.com>
 
        * PolicyStatementTest.cs: New. Unit tests for PolicyStatement.
index da45978444acc5eec8217ea35ed49e43c0f72b52..dcf541350f645b03223c54c40afad1548e20028d 100644 (file)
@@ -33,6 +33,7 @@ using System.IO;
 using System.Security;
 using System.Security.Permissions;
 using System.Security.Policy;
+using System.Text;
 
 namespace MonoTests.System.Security.Policy {
 
@@ -346,12 +347,40 @@ namespace MonoTests.System.Security.Policy {
                        // static method
                        pl = PolicyLevel.CreateAppDomainLevel ();
                        Assert.AreEqual ("AppDomain", pl.Label, "Label.AppDomain");
-               }
-
-               [Test]
-               public void Recover () 
-               {
-                       // note: may be dangerous to test
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (PolicyException))]\r
+               public void Recover_LoadPolicyLevelFromFile ()\r
+               {\r
+                       string temp = Path.GetTempFileName ();\r
+                       using (FileStream fs = File.OpenWrite (temp)) {\r
+                               // that way we're sure that no back exists\r
+                               byte[] data = Encoding.UTF8.GetBytes (minimal);\r
+                               fs.Write (data, 0, data.Length);\r
+                               fs.Close ();\r
+                       }\r
+                       PolicyLevel pl = SecurityManager.LoadPolicyLevelFromFile (temp, PolicyLevelType.User);\r
+                       pl.Recover ();\r
+                       // can't recover if no backup exists\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (PolicyException))]\r
+               public void Recover_LoadPolicyLevelFromString () 
+               {\r
+                       PolicyLevel pl = SecurityManager.LoadPolicyLevelFromString (minimal, PolicyLevelType.Enterprise);\r
+                       pl.Recover ();\r
+                       // can't recover as it's not file based\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (PolicyException))]\r
+               public void Recover_AppDomainLevel ()\r
+               {\r
+                       PolicyLevel pl = PolicyLevel.CreateAppDomainLevel ();\r
+                       pl.Recover ();\r
+                       // can't recover as it's not file based\r
                }
 
                [Test]
@@ -471,7 +500,63 @@ namespace MonoTests.System.Security.Policy {
                {
                        PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);
                        pl.RemoveNamedPermissionSet ("Mono");
-               }
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_FullTrust_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("FullTrust");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_LocalIntranet_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("LocalIntranet");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_Internet_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("Internet");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_SkipVerification_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("SkipVerification");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_Execution_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("Execution");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_Nothing_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("Nothing");\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void RemoveNamedPermissionSet_Everything_ReservedName ()\r
+               {\r
+                       PolicyLevel pl = Load (minimal, PolicyLevelType.Machine);\r
+                       pl.RemoveNamedPermissionSet ("Everything");\r
+               }\r
 
                [Test]
                public void Reset () 
index 83af0b2eb19cec8f119d85b47c8620d1c86f4cd2..3a5aa86f76b82fc6ffa31ea57c21b5973c356312 100644 (file)
@@ -1,4 +1,16 @@
-2005-03-28  Sebastien Pouliot  <sebastien@ximian.com>
+2005-05-28  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * HostSecurityManagerTest.cs: Remove NotWorking from tests.
+
+2005-05-27  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * NamedPermissionSetTest.cs: Re-enable the "NotWorking" unit test.
+       * PermissionSetCas.cs: New. Moved RevertAssert unit tests from 
+       PermissionSetTest to here as they require --security to work.
+       * PermissionSetTest.cs: Re-enable the "NotWorking" NET_2_0 unit tests.
+       * SecurityContextCas.cs: Fixed namespace.
+
+2005-04-28  Sebastien Pouliot  <sebastien@ximian.com>
 
        * SecurityContextCas.cs: New. CAS unit tests for SecurityContext.
        * SecurityContextTest.cs: New. Unit tests for SecurityContext.
index 54e7d154790bf31afabdbcf10faa3f02428d1c57..321e085affd928bea52c4c2105625e655660b79e 100644 (file)
@@ -31,7 +31,6 @@
 using NUnit.Framework;
 using System;
 using System.Reflection;
-//using System.Runtime.Hosting;
 using System.Security;
 using System.Security.Policy;
 
@@ -57,18 +56,14 @@ namespace MonoTests.System.Security {
                }
 
                [Test]
-               [Category ("NotWorking")]
                [ExpectedException (typeof (ArgumentException))]
                public void DetermineApplicationTrust_Evidence_Null_TrustManagerContext ()
                {
                        HostSecurityManager hsm = new HostSecurityManager ();
-                       Evidence app = new Evidence ();
-                       //app.AddHost (new ActivationArgument ());
-                       hsm.DetermineApplicationTrust (app, null, new TrustManagerContext ());
+                       hsm.DetermineApplicationTrust (new Evidence (), null, new TrustManagerContext ());
                }
 
                [Test]
-               [Category ("NotWorking")]
                [ExpectedException (typeof (ArgumentException))]
                public void DetermineApplicationTrust_Evidence_Evidence_Null ()
                {
index 36407dbeb5203ec78a38ba5b1474b215be911c71..86b6fb9522941aa9c2f9e2e3dd69b2eac0b83c94 100644 (file)
@@ -301,7 +301,6 @@ namespace MonoTests.System.Security {
                }
 #if NET_2_0
                [Test]
-               [Category ("NotWorking")]
                public void Equals () 
                {
                        NamedPermissionSet psn = new NamedPermissionSet (name, PermissionState.None);
diff --git a/mcs/class/corlib/Test/System.Security/PermissionSetCas.cs b/mcs/class/corlib/Test/System.Security/PermissionSetCas.cs
new file mode 100644 (file)
index 0000000..13fc321
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// PermissionSetCas.cs - CAS Unit Tests for PermissionSet
+//
+// Author:
+//     Sebastien Pouliot (sebastien@ximian.com)
+//
+// Copyright (C) 2005 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.Security;
+using System.Security.Permissions;
+
+using NUnit.Framework;
+
+namespace MonoCasTests.System.Security {
+
+       [TestFixture]
+       [Category ("CAS")]
+       public class PermissionSetCas {
+
+               [SetUp]
+               public void SetUp ()
+               {
+                       if (!SecurityManager.SecurityEnabled)
+                               Assert.Ignore ("SecurityManager isn't enabled");
+               }
+
+#if NET_2_0
+               [Test]
+               [ExpectedException (typeof (ExecutionEngineException))]
+               public void RevertAssert_WithoutAssertion ()
+               {
+                       PermissionSet.RevertAssert ();
+               }
+
+               [Test]
+               public void RevertAssert_WithAssertion ()
+               {
+                       PermissionSet ups = new PermissionSet (PermissionState.Unrestricted);
+                       ups.Assert ();
+                       PermissionSet.RevertAssert ();
+               }
+#endif
+       }
+}
index 31fd8a21150330b9f1a39aae16be8376a18dbda7..9f424c203431af5f996d50b6e4a51ac9bfffe9df 100644 (file)
@@ -60,9 +60,6 @@ namespace MonoTests.System.Security {
                        AssertEquals ("PermissionStateUnrestricted.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
                }
 
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
                [Test]
                public void PermissionSetNull () 
                {
@@ -134,9 +131,6 @@ namespace MonoTests.System.Security {
                        AssertEquals ("0", 0, ps.Count);
                }
 
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
                [Test]
                public void AddPermission_SetUnrestricted ()
                {
@@ -237,7 +231,7 @@ namespace MonoTests.System.Security {
 
                [Test]
 #if !NET_2_0
-               [Category ("NotDotNet")] // Don't know why it doesn't work under Fx 1.1
+               [Ignore ("Don't know why it doesn't work under Fx 1.1")]
 #endif
                public void ConvertPermissionSet_BinaryToBinary ()
                {
@@ -252,7 +246,7 @@ namespace MonoTests.System.Security {
 
                [Test]
 #if !NET_2_0
-               [Category ("NotDotNet")] // Don't know why it doesn't work under Fx 1.1
+               [Ignore ("Don't know why it doesn't work under Fx 1.1")]
 #endif
                public void ConvertPermissionSet_XmlToBinary ()
                {
@@ -315,9 +309,7 @@ namespace MonoTests.System.Security {
                        Assert ("3.State", !copy.IsUnrestricted ());
                        AssertEquals ("3.Count", 2, copy.Count);
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void Copy_Unrestricted ()
                {
@@ -471,9 +463,7 @@ namespace MonoTests.System.Security {
                        ps2.FromXml (se);
                        Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void FromXmlOne () 
                {
@@ -504,7 +494,9 @@ namespace MonoTests.System.Security {
                }
 
                [Test]
-#if !NET_2_0
+#if NET_2_0
+               [ExpectedException (typeof (TypeLoadException))]
+#else
                [ExpectedException (typeof (ArgumentException))]
 #endif
                public void FromXml_PermissionWithoutNamespace ()
@@ -521,16 +513,12 @@ namespace MonoTests.System.Security {
 
                        PermissionSet ps = new PermissionSet (PermissionState.None);
                        ps.FromXml (se);
-#if NET_2_0
-                       // not enough information but:
-                       // a. it doesn't fail
-                       // b. it does work for policies
-                       AssertEquals ("Count", 0, ps.Count);
-#endif
                }
 
                [Test]
-#if !NET_2_0
+#if NET_2_0
+               [ExpectedException (typeof (TypeLoadException))]
+#else
                [ExpectedException (typeof (ArgumentException))]
 #endif
                public void FromXml_PermissionOutsideCorlib ()
@@ -547,12 +535,6 @@ namespace MonoTests.System.Security {
 
                        PermissionSet ps = new PermissionSet (PermissionState.None);
                        ps.FromXml (se);
-#if NET_2_0
-                       // not enough information but:
-                       // a. it doesn't fail
-                       // b. it does work for policies
-                       AssertEquals ("Count", 0, ps.Count);
-#endif
                }
 
                [Test]
@@ -658,9 +640,7 @@ namespace MonoTests.System.Security {
                        Compare ("PS1 N Unrestricted", ps1.Intersect (ups1), false, 1);
                        Compare ("Unrestricted N PS1", ups1.Intersect (ps1), false, 1);
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void Intersect_OneNonIUnrestrictedPermission ()
                {
@@ -704,9 +684,7 @@ namespace MonoTests.System.Security {
                        AssertEquals ("Count==1", 1, ps.Count);
                        Assert ("Zip.IsEmpty", ps.IsEmpty ());  // yes empty!
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void IsEmpty_Unrestricted ()
                {
@@ -760,9 +738,7 @@ namespace MonoTests.System.Security {
                        Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
                        Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void IsSubset_OneNonIUnrestrictedPermission ()
                {
@@ -815,9 +791,7 @@ namespace MonoTests.System.Security {
                        AssertEquals ("Flags", sp.Flags, removed.Flags);
                        AssertNull ("Empty-Again", ps.RemovePermission (typeof (SecurityPermission)));
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void RemovePermission_Unrestricted ()
                {
@@ -873,9 +847,7 @@ namespace MonoTests.System.Security {
                        AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
                        AssertEquals ("SecurityZone", SecurityZone.Intranet, zipr.SecurityZone);
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void SetPermission_Unrestricted ()
                {
@@ -971,9 +943,7 @@ namespace MonoTests.System.Security {
                        Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 0);
                        Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 0);
                }
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
+
                [Test]
                public void Union_OneNonIUnrestrictedPermission ()
                {
@@ -1012,24 +982,7 @@ namespace MonoTests.System.Security {
                        Compare ("UPS2+ZIP U UPS1", ups2.Union (ups1), true, 1);
 #endif
                }
-#if NET_2_0
-               [Test]
-               [Category ("NotWorking")]
-               [ExpectedException (typeof (ExecutionEngineException))]
-               public void RevertAssert_WithoutAssertion ()
-               {
-                       PermissionSet.RevertAssert ();
-               }
 
-               [Category ("NotWorking")]
-               [Test]
-               public void RevertAssert_WithAssertion ()
-               {
-                       PermissionSet ups = new PermissionSet (PermissionState.Unrestricted);
-                       ups.Assert ();
-                       PermissionSet.RevertAssert ();
-               }
-#endif
                [Test]
                public void Assert_NonCasPermission ()
                {
index 6967a5664a8c403c0c66561535c2218961ecbfc9..ec6aaa6c13f73687f1082ee4ac0793eab6b5fbe0 100644 (file)
@@ -35,7 +35,7 @@ using System.Threading;
 
 using NUnit.Framework;
 
-namespace MonoCasTests.System.Threading {
+namespace MonoCasTests.System.Security {
 
        [TestFixture]
        [Category ("CAS")]
index bb435554ed5a7407465fdc58532f2be454b6ec11..9c919cccaf1389bba76fd2ca0ea08aa0adcd263e 100644 (file)
@@ -1,3 +1,31 @@
+2005-05-27  Raja R Harinath  <rharinath@novell.com>
+
+       * DateTimeTest.cs (TestParseExact2): Remove.  Merge into ...
+       (TestParseExact3): ... here.  Fix to convert the parsed DateTime
+       to UTC before comparing values.
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTimeTest.cs : TestParse3() is still NotWorking on others' :(
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTimeTest.cs : added testcase for #72788. Test that assures we
+         reject 2 digit years for "yyyy".
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTimeTest.cs : removed some NotWorking (they are working).
+         Added testcase for #63137.
+
+2005-05-24  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTimeTest.cs : testcase for #60912.
+
+2005-05-24  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DateTimeTest.cs : testcase for #71289.
+
 2005-05-21  Ben Maurer  <bmaurer@ximian.com>
 
        * StringTest.cs: Add a test for bug #62160
index b57b73817ff0c3509acfdb234fc9341d0f204244..b15c1dedf265844bfd0630ea59f3d7df37fd20d8 100644 (file)
@@ -334,8 +334,8 @@ public class DateTimeTest : Assertion
                AssertEquals("C25", "PM", t2.ToString ("tt"));\r
                long offset = TimeZone.CurrentTimeZone.GetUtcOffset(t1).Ticks / 36000000000;\r
                AssertEquals("C26", offset.ToString("+#;-#;0"), t1.ToString ("%z"));\r
-               AssertEquals("C27", offset.ToString("+00;-00;00"), t1.ToString ("zz"));
-               // This does not work in, eg banglore, because their timezone has an offset of
+               AssertEquals("C27", offset.ToString("+00;-00;00"), t1.ToString ("zz"));\r
+               // This does not work in, eg banglore, because their timezone has an offset of\r
                // +05:30\r
                //AssertEquals("C28", offset.ToString("+00;-00;00") + ":00", t1.ToString ("zzz"));\r
                AssertEquals("C29", " : ", t1.ToString (" : "));\r
@@ -344,27 +344,33 @@ public class DateTimeTest : Assertion
                AssertEquals("C32", " d", t1.ToString (" \\d"));\r
        }\r
 \r
-       [Ignore ("need a better way to handle these tests with them running on different timezones")]\r
-       public void TestParseExact2 () \r
+       public void TestParseExact3 ()\r
        {\r
                DateTime t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u", null);\r
                t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);\r
-               AssertEquals ("D07d", 04 + TimeZone.CurrentTimeZone.GetUtcOffset(t1).Hours, t1.Hour);\r
-\r
-       }\r
-
-       [Category ("NotWorking")]
-       public void TestParseExact3 ()
-       {
-               DateTime t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u", null);\r
                AssertEquals ("D07a", 2002, t1.Year);\r
                AssertEquals ("D07b", 02, t1.Month);\r
                AssertEquals ("D07c", 25, t1.Day);\r
+               AssertEquals ("D07d", 04, t1.Hour);\r
                AssertEquals ("D07e", 25, t1.Minute);\r
                AssertEquals ("D07f", 13, t1.Second);\r
-       }
-       
-       \r
+       }\r
+\r
+       [Test]\r
+       public void TestParseExact4 ()\r
+       {\r
+               // bug #60912, modified hour as 13:00\r
+               string s = "6/28/2004 13:00:00 AM";\r
+               string f = "M/d/yyyy HH':'mm':'ss tt";\r
+               DateTime.ParseExact (s, f, CultureInfo.InvariantCulture);\r
+\r
+               // bug #63137\r
+               DateTime.ParseExact ("Wed, 12 May 2004 20:51:09 +0200",\r
+                       @"ddd, d MMM yyyy H:m:s zzz",\r
+                       CultureInfo.CreateSpecificCulture("en-us"),\r
+                       DateTimeStyles.AllowInnerWhite);\r
+       }\r
+\r
        public void TestParseExact ()\r
        {\r
                // Standard patterns\r
@@ -479,15 +485,15 @@ public class DateTimeTest : Assertion
                t1 = DateTime.ParseExact ("15", "HH", null);\r
                AssertEquals ("E16", t2.Ticks, t1.Ticks);\r
 \r
-               // Time zones
-#if false
+               // Time zones\r
+#if false\r
                // Fails durring DST for msft and mono\r
                t2 = DateTime.Today + new TimeSpan (17, 18, 0);\r
                t1 = DateTime.ParseExact ("11:18AM -5", "h:mmtt z", null);\r
                t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);\r
                if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))\r
                        t1 += new TimeSpan(1, 0, 0);\r
-               AssertEquals ("F01", t2.Ticks, t1.Ticks);
+               AssertEquals ("F01", t2.Ticks, t1.Ticks);\r
                \r
                t1 = DateTime.ParseExact ("11:18AM -05:00", "h:mmtt zzz", null);\r
                t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);\r
@@ -506,7 +512,7 @@ public class DateTimeTest : Assertion
                if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))\r
                        t1 += new TimeSpan(1, 0, 0);\r
                AssertEquals ("F04", t2.Ticks, t1.Ticks);\r
-#endif
+#endif\r
                \r
                // Options\r
                t2 = DateTime.Today + new TimeSpan (16, 18, 0);\r
@@ -675,6 +681,7 @@ public class DateTimeTest : Assertion
                AssertEquals ("H16", t2.Ticks, t1.Ticks);\r
        }\r
 \r
+       [Category ("NotWorking")]\r
        public void TestParse3 ()\r
        {\r
                string s = "Wednesday, 09 June 2004";\r
@@ -716,6 +723,39 @@ public class DateTimeTest : Assertion
                }\r
        }\r
 \r
+       [Test]\r
+       public void TestParse5 ()\r
+       {\r
+               // bug #71289\r
+               DateTime.Parse ("Sat,,,,,, 01 Oct 1994 03:00:00",\r
+                       CultureInfo.InvariantCulture);\r
+               // more example...\r
+               DateTime.Parse ("Sat,,, 01,,, Oct,,, ,,,1994 03:00:00",\r
+                       CultureInfo.InvariantCulture);\r
+#if NET_2_0\r
+               try {\r
+                       // ',' after 03 is not allowed.\r
+                       DateTime.Parse ("Sat,,, 01,,, Oct,,, ,,,1994 03,:00:00",\r
+                       CultureInfo.InvariantCulture);\r
+                       Fail ("Should fail here.");\r
+               } catch (FormatException) {\r
+               }\r
+#endif\r
+\r
+               // bug #72788\r
+               DateTime dt = DateTime.Parse ("21/02/05", new CultureInfo ("fr-FR"));\r
+               AssertEquals (2005, dt.Year);\r
+               AssertEquals (02, dt.Month);\r
+               AssertEquals (21, dt.Day);\r
+\r
+               // don't allow 2 digit years where we require 4.\r
+               try {\r
+                       DateTime.ParseExact ("05", "yyyy", CultureInfo.InvariantCulture);\r
+                       Fail ("Reject 2 digit years for yyyy");\r
+               } catch (FormatException) {\r
+               }\r
+       }\r
+\r
        [Test]\r
        [ExpectedException(typeof (FormatException))]\r
        public void ParseFormatException1 ()\r
@@ -735,7 +775,6 @@ public class DateTimeTest : Assertion
        }\r
 \r
        [Test]\r
-       [Category ("NotWorking")]
        public void ParseAllowsQueerString ()\r
        {\r
                DateTime.Parse ("Sat,,,,,, 01 Oct 1994 03:00:00", CultureInfo.InvariantCulture);\r
@@ -1109,11 +1148,11 @@ public class DateTimeTest : Assertion
        }\r
 \r
        [Test]\r
-       [Category ("NotWorking")]
+       [Category ("NotWorking")]\r
        public void ParseNotExact ()\r
-       {
-               // The error reported is:
-               // String was not recognized as valid DateTime
+       {\r
+               // The error reported is:\r
+               // String was not recognized as valid DateTime\r
                DateTime dt = DateTime.Parse ("2004-05-26T03:29:01-07:00 foo");\r
                dt = TimeZone.CurrentTimeZone.ToUniversalTime (dt);\r
                AssertEquals ("DateTime.Parse not exact", 632211641410000000, dt.Ticks);\r
index c4ed0d0a054ad2afc5ad4f99319d06935f178cdc..bfb7536c95973c53589b4f1d854831ed977c9d45 100644 (file)
@@ -60,7 +60,6 @@ System/AppDomainInitializer.cs
 System/AppDomainManager.cs
 System/AppDomainSetup.cs
 System/AppDomainUnloadedException.cs
-System/ApplicationActivator.cs
 System/ApplicationException.cs
 System/ApplicationId.cs
 System/ApplicationIdentity.cs
@@ -538,6 +537,8 @@ System.Runtime.ConstrainedExecution/CER.cs
 System.Runtime.ConstrainedExecution/Consistency.cs
 System.Runtime.ConstrainedExecution/PrePrepareMethodAttribute.cs
 System.Runtime.ConstrainedExecution/ReliabilityContractAttribute.cs
+System.Runtime.Hosting/ActivationArguments.cs
+System.Runtime.Hosting/ApplicationActivator.cs
 System.Runtime.InteropServices/_Activator.cs
 System.Runtime.InteropServices/_Assembly.cs
 System.Runtime.InteropServices/_AssemblyBuilder.cs
@@ -985,6 +986,7 @@ System.Security/ISecurityEncodable.cs
 System.Security/ISecurityPolicyEncodable.cs
 System.Security/IStackWalk.cs
 System.Security/NamedPermissionSet.cs
+System.Security/PermissionBuilder.cs
 System.Security/PermissionSet.cs
 System.Security/PermissionSetCollection.cs
 System.Security/PolicyLevelType.cs
@@ -1156,6 +1158,7 @@ System.Security.Policy/ApplicationTrustEnumerator.cs
 System.Security.Policy/ApplicationVersionMatch.cs
 System.Security.Policy/CodeConnectAccess.cs
 System.Security.Policy/CodeGroup.cs
+System.Security.Policy/DefaultPolicies.cs
 System.Security.Policy/Evidence.cs
 System.Security.Policy/FileCodeGroup.cs
 System.Security.Policy/FirstMatchCodeGroup.cs
@@ -1214,13 +1217,10 @@ System.Threading/ApartmentState.cs
 System.Threading/AsyncFlowControl.cs
 System.Threading/AutoResetEvent.cs
 System.Threading/CompressedStack.cs
-System.Threading/CompressedStackSwitcher.cs
 System.Threading/ContextCallback.cs
 System.Threading/ExecutionContext.cs
-System.Threading/ExecutionContextSwitcher.cs
 System.Threading/HostExecutionContext.cs
 System.Threading/HostExecutionContextManager.cs
-System.Threading/HostExecutionContextSwitcher.cs
 System.Threading/Interlocked.cs
 System.Threading/IOCompletionCallback.cs
 System.Threading/LockCookie.cs
@@ -1236,7 +1236,6 @@ System.Threading/ReaderWriterLock.cs
 System.Threading/RegisteredWaitHandle.cs
 System.Threading/SendOrPostCallback.cs
 System.Threading/SynchronizationContext.cs
-System.Threading/SynchronizationContextSwitcher.cs
 System.Threading/SynchronizationLockException.cs
 System.Threading/Thread.cs
 System.Threading/ThreadAbortException.cs
index fc4a20351b0a1482f4d1e86b4a8efe738a59a723..c43eaab204da0c78a0b5c5eb3a5d49d53b2b9b13 100644 (file)
@@ -96,6 +96,7 @@ System.Reflection/FieldInfoTest.cs
 System.Reflection/MethodInfoTest.cs
 System.Reflection/ParameterInfoTest.cs
 System.Reflection/PropertyInfoTest.cs
+System.Reflection/TypeDelegatorTest.cs
 System.Reflection.Emit/AssemblyBuilderTest.cs
 System.Reflection.Emit/AssemblyBuilderAccessTest.cs
 System.Reflection.Emit/ConstructorBuilderTest.cs
@@ -309,6 +310,7 @@ System.Reflection/StrongNameKeyPairCas.cs
 System.Reflection.Emit/MethodRentalCas.cs
 System.Resources/ResourceReaderCas.cs
 System.Resources/ResourceSetCas.cs
+System.Security/PermissionSetCas.cs
 System.Security/SecurityContextCas.cs
 System.Security/SecurityExceptionCas.cs
 System.Security.Cryptography/CryptoAPITransformCas.cs
index f3957ec0943debd59bd55ff5414abb77ad267b06..1943a20fb16bc7ae44902c8c61e0d6f0f2f3f6d7 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-26  Raja R Harinath  <rharinath@novell.com>
+
+       * cs0173-3.cs: Rename from cs0172-2.cs.  CSC 1.1 reports CS0173,
+       CSC 2.0.40607 reports CS0172.  CS0173 is somewhat more appropriate
+       since the conversion is ambiguous.
+
 2005-05-20  Martin Baulig  <martin@ximian.com>
 
        * mcs-known-issues, gmcs-known-issues: Updated.
diff --git a/mcs/errors/cs0172-2.cs b/mcs/errors/cs0172-2.cs
deleted file mode 100644 (file)
index 5d19515..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// cs0172.cs: Type of conditional expression can't be determined because there is no implicit conversion between 'ClassA' and 'ClassB'
-// Line: 29
-
-class ClassA {
-        public static implicit operator ClassB (ClassA value) {
-                return null;
-        }
-        
-        public static implicit operator ClassA (ClassB value) {
-                return null;
-        }
-}
-
-class ClassB {
-        public static implicit operator ClassA (ClassB value) {
-                return null;
-        }
-        
-        public static implicit operator ClassB (ClassA value) {
-                return null;
-        }
-}
-
-public class MainClass {
-        public static void Main() {
-                ClassA a = new ClassA();
-                ClassB b = new ClassB();
-            
-                System.Console.WriteLine(true ? a : b);
-   }
-}
diff --git a/mcs/errors/cs0173-3.cs b/mcs/errors/cs0173-3.cs
new file mode 100644 (file)
index 0000000..d430a73
--- /dev/null
@@ -0,0 +1,31 @@
+// cs0173.cs: Type of conditional expression can't be determined because there is no implicit conversion between 'ClassA' and 'ClassB'
+// Line: 29
+
+class ClassA {
+        public static implicit operator ClassB (ClassA value) {
+                return null;
+        }
+        
+        public static implicit operator ClassA (ClassB value) {
+                return null;
+        }
+}
+
+class ClassB {
+        public static implicit operator ClassA (ClassB value) {
+                return null;
+        }
+        
+        public static implicit operator ClassB (ClassA value) {
+                return null;
+        }
+}
+
+public class MainClass {
+        public static void Main() {
+                ClassA a = new ClassA();
+                ClassB b = new ClassB();
+            
+                System.Console.WriteLine(true ? a : b);
+   }
+}
index f2ccf11ced9bab22a00fee0648f2bdb98e7729b3..66cc5f93e142d211cda18e9cd6419fded66136c8 100644 (file)
@@ -15,6 +15,7 @@ cs0118.cs
 cs0119.cs
 cs0121-3.cs NO ERROR
 cs0122-12.cs
+cs0173-3.cs
 cs0201.cs
 cs0202.cs # new in GMCS
 cs0229.cs NO ERROR
@@ -47,11 +48,9 @@ cs1513.cs
 cs1518.cs
 cs1525.cs
 cs1528.cs
-cs1535.cs # new in GMCS; grammar issue
 cs1540-2.cs # new in GMCS
 cs1540-3.cs NO ERROR # new in GMCS
 cs1540-5.cs NO ERROR # new in GMCS
-cs1552.cs # new in GMCS; grammar issue
 cs1586.cs
 cs1638.cs NO ERROR
 cs1641.cs
@@ -59,5 +58,3 @@ cs1666.cs NO ERROR
 cs2007.cs
 gcs0694.cs NO ERROR
 gcs1644-2.cs NO ERROR
-
-cs0647.cs NO ERROR # not yet merged
index e8f7e4333b6119ac6ecfa724f6bde49565dc6b35..982149df16845671636b70efb0124e5aef017351 100644 (file)
@@ -1,3 +1,25 @@
+2005-05-27 Satya Sudha K <ksathyasudha@hotmail.com>
+       * statement.cs :
+       * mb-parser.jay :
+               - Supporting all kinds of case clauses (like 'A To B', 'Is >= 30')
+               - Expressions of all primitive types can now be specified as 'Select' 
+                 and 'Case' expressions
+
+2005-05-27 Manjula GHM <mmanjula@novell.com>
+       * mb-parser.jay : To support "Sub New()" without modifier       
+
+2005-05-26 Manjula GHM <mmanjula@novell.com>
+       * typemanager.cs : Fix Enum conversion for two level assignment and added few more cases
+
+2005-05-26 Manjula GHM <mmanjula@novell.com>
+       * statement.cs : Fix problem w.r.t 'Exit Sub' 
+
+2005-05-24 Satya Sudha K <ksathyasudha@hotmail.com>
+       * statement.cs : Added few more members like 'memberName' and 'type_expr' to the 'StatementSequence'
+                        class. Added an appropriate constructor for the same.
+       * expression.cs: Late binding for method invocations involving object arguments
+                        
+
 2005-05-23 Satya Sudha K <ksathyasudha@hotmail.com>
        * statement.cs : Copying back the arguments (matching 'ByRef' parameters) in the reverse 
                         order (starting with the last argument backwards) as done by vbc
index dfc83bfe0df0621cf7d42eb09207feb9a5038130..422cc01372298a4537dc9aef075c4dce10090f8b 100644 (file)
@@ -1,3 +1,6 @@
+2005-05-27 Satya Sudha K <ksathyasudha@novell.com>
+       * Some more testcases for 'Select-Case' statements
+
 2005-05-17 Satya Sudha K <ksathyasudha@novell.com>
        Fixed some misplaced testcases
 
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsA.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsA.vb
deleted file mode 100644 (file)
index d31d887..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Imports System
-
-Module ConditionalStatementsA
-
-       Sub Main()
-
-               Dim i As Integer = 0
-
-               if i = 0 then i = 1
-
-               if i <> 1 then throw new exception("#CSA1") else i = 2
-               
-               if i = 1 then else i = 3
-
-               if i <> 3 then i = 2 else    ' Should give compile time error
-
-               if i <> 2
-                       i = 3
-               end if
-                               
-               if i = 3
-               end if
-                               
-               if i <> 3
-                       throw new exception("#CSA2")   
-               else
-                       i = 4
-               end if
-
-               if i <> 4 then
-                       throw new exception("#CSA3")
-               elseif i = 4
-                       i = 5
-               end if
-
-               if i <> 5
-                       throw new exception("#CSA4") 
-               elseif i = 6
-                       throw new exception("#CSA5")
-               elseif i = 5 then
-                       i = 6
-               else
-                       throw new exception("#CSA6")
-               end if
-               
-       End Sub
-       
-End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsB.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsB.vb
deleted file mode 100644 (file)
index dad4ab6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-Imports System
-
-Module ConditionalStatementsB
-
-    Sub Main()
-
-        Dim i As Integer = 0
-       
-       ' With the single-line form, it is possible to have multiple 
-       ' statements executed as the result of an If...Then decision.
-
-        If i = 0 Then i += 1 : i += 2 : i += 3
-       
-
-       If i <> 6 Then throw new exception("#CSB1 - LineIfThenStatement failed")  _
-               else i += 6 : i += 12   
-       
-       
-       If i <> 24 Then 
-               throw new exception("#CSB2 - LineIfThenStatement failed")
-       End If
-       
-       ' Execution of a Case block is not permitted to "fall through" to 
-       ' next switch section
-
-       Dim j As Integer = 0
-       for i = 0 To 3
-               Select Case i
-                       Case 0
-                       Case 2
-                               j += 2  
-                       Case 1
-                       Case 3
-                               j += 3
-               End Select
-       next
-
-       if j <> 5 then
-               throw new exception("#CSB3 - Switch Case Statement failed")
-       end if
-       
-    End Sub
-
-End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsC.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsC.vb
deleted file mode 100644 (file)
index e167171..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Imports System
-
-Module ConditionalStatementsC
-
-    Sub Main()
-
-        Dim i As Integer
-        Dim arr(10) As Integer
-        Dim flag As Boolean
-
-        For i = 0 To 10
-
-            Select Case i
-                Case 0 To 2
-                    arr(i) = 1
-                Case Is < 2, 3, 6 To 7
-                    arr(i) = 2
-                    Select Case i           ' Nested Select Case Statement
-                        Case 0 To 2
-                            flag = False
-                        Case 3, 6 To 7
-                            flag = True
-                        Case Else
-                            flag = False
-                    End Select
-                Case Is <= 8, Is >= 7
-                    arr(i) = 3
-                Case Else
-                    arr(i) = 4
-            End Select
-
-        Next
-
-        If arr(0) <> 1 Or arr(1) <> 1 Or arr(2) <> 1 Then
-            Throw New Exception("#CSC1 - Select Case Statement failed")
-        ElseIf arr(3) <> 2 Or arr(6) <> 2 Or arr(7) <> 2 Then
-            Throw New Exception("#CSC2 - Select Case Statement failed")
-        ElseIf arr(4) <> 3 Or arr(5) <> 3 Or arr(8) <> 3 Or arr(9) <> 3 Or arr(10) <> 3 Then
-            Throw New Exception("#CSC3 - Select Case Statement failed")
-        ElseIf flag = False Then
-            Throw New Exception("#CSC4 - Nested Select Case Statement failed")
-        Else
-            Console.WriteLine("OK")
-        End If
-
-    End Sub
-
-End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsD.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsD.vb
deleted file mode 100644 (file)
index 186dbaa..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-Imports System
-
-Module ConditionalStatementsD
-
-    Sub Main()
-
-        Dim i As Integer
-        Dim sarr() As String = {"cat", "awk", "zebra", "mouse", "snake", "tiger", "lion"}
-       Dim str As String = "Lion"
-       Dim arr(6) As Integer
-       
-        For i = 0 To 6
-
-            Select sarr(i)
-                Case "ant" To "cow"
-                    arr(i) = 1
-                Case < "dog", = "tiger", str
-                    arr(i) = 2
-               Case "lion"
-                   arr(i) = 3
-                Case >= "elepahant"
-                    arr(i) = 4
-                Case Else
-                    arr(i) = 5
-            End Select
-
-        Next
-
-        If arr(0) <> 1 Or arr(1) <> 1 Then
-            Throw New Exception("#CSD1 - Switch Statement failed")
-        ElseIf arr(5) <> 2 Then
-            Throw New Exception("#CSD2 - Switch Statement failed")
-        ElseIf arr(6) <> 3 Then
-            Throw New Exception("#CSD3 - Switch Statement failed")
-       ElseIf arr(2) <> 4 Or arr(3) <> 4 Or arr(4) <> 4 Then
-            Throw New Exception("#CSD4 - Switch Statement failed")
-        Else
-            Console.WriteLine("OK")
-        End If
-
-    End Sub
-
-End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsE.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsE.vb
deleted file mode 100644 (file)
index 3fd6905..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 0
-       if False then 
-               i = 1
-       Elseif False
-               i = 2
-       Else 
-               if False then
-                       i = 3
-               else
-                       i = 4
-               End if
-       End if
-       if i<>4 then
-               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
-       End if
-    End Sub
-End Module
-
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsF.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsF.vb
deleted file mode 100644 (file)
index 8866fec..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-'To prove "Else if" and "Elseif" are same
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 0
-       if False then 
-               i = 1
-       Elseif False then
-               i = 2
-       Else if False then
-               i = 3
-       else
-               i = 4
-       End if
-       if i<>4 then
-               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
-       End if
-    End Sub
-End Module
-
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsG.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsG.vb
deleted file mode 100644 (file)
index 60ae177..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-'To prove "Else if" and "Elseif" are same
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 1000
-       if i then 
-               i = 4
-       else
-               i = 1
-       End if
-       if i<>4 then
-               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
-       End if
-    End Sub
-End Module
-
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsH.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsH.vb
deleted file mode 100644 (file)
index 7bdceb4..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 5
-        Select Case i
-            Case 5
-                       i = 10          
-            Case 10
-                       i = 20
-             Case 20
-                       i = 30
-               Case 30
-                       i = 5
-               Case Else 
-                       i = 6
-        End Select
-       if i<>10 then
-               Throw New System.Exception("Select not working properly. Expected 10 but got "&i)
-       End if
-    End Sub
-End Module
-
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsI.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsI.vb
deleted file mode 100644 (file)
index 67b91c1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 10
-        Select Case i
-               Case 10.5
-                       i = 15
-               Case 20.5
-                       i = 20
-               Case 30.5
-                       i = 30
-        End Select
-       if i<>15 then
-               Throw New System.Exception("Select not working properly. Expected 15 but got "&i)
-       End if
-    End Sub
-End Module
-
diff --git a/mcs/mbas/Test/tests/directives/ConditionalStatementsJ.vb b/mcs/mbas/Test/tests/directives/ConditionalStatementsJ.vb
deleted file mode 100644 (file)
index 1b1a085..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-'Author:
-'   V. Sudharsan (vsudharsan@novell.com)
-'
-' (C) 2005 Novell, Inc.
-
-Module Test
-    Sub Main() 
-       Dim i as integer = 10
-        Select Case i
-               Case 20-10.5
-                       i = 15
-        End Select
-       if i<>15 then
-               Throw New System.Exception("Select not working properly. Expected 15 but got "&i)
-       End if
-    End Sub
-End Module
-
index 058d9f29910df62ba1670825a32ba8e6bdb2fd7d..86fdce31d134d4e38be73c2e3ee8abcde87563cb 100644 (file)
@@ -20,7 +20,7 @@ Module M
                dim o as object = new C()
                dim o1 as object = new B()
                o1.fun(o.a, 1)
-               if o.a(1)<>2 then
+               if o.a(1) <> 0 then
                        throw new System.Exception("LateBinding Not Working ")
                end if
        End Sub
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsA.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsA.vb
new file mode 100644 (file)
index 0000000..d31d887
--- /dev/null
@@ -0,0 +1,48 @@
+Imports System
+
+Module ConditionalStatementsA
+
+       Sub Main()
+
+               Dim i As Integer = 0
+
+               if i = 0 then i = 1
+
+               if i <> 1 then throw new exception("#CSA1") else i = 2
+               
+               if i = 1 then else i = 3
+
+               if i <> 3 then i = 2 else    ' Should give compile time error
+
+               if i <> 2
+                       i = 3
+               end if
+                               
+               if i = 3
+               end if
+                               
+               if i <> 3
+                       throw new exception("#CSA2")   
+               else
+                       i = 4
+               end if
+
+               if i <> 4 then
+                       throw new exception("#CSA3")
+               elseif i = 4
+                       i = 5
+               end if
+
+               if i <> 5
+                       throw new exception("#CSA4") 
+               elseif i = 6
+                       throw new exception("#CSA5")
+               elseif i = 5 then
+                       i = 6
+               else
+                       throw new exception("#CSA6")
+               end if
+               
+       End Sub
+       
+End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsB.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsB.vb
new file mode 100644 (file)
index 0000000..dad4ab6
--- /dev/null
@@ -0,0 +1,44 @@
+Imports System
+
+Module ConditionalStatementsB
+
+    Sub Main()
+
+        Dim i As Integer = 0
+       
+       ' With the single-line form, it is possible to have multiple 
+       ' statements executed as the result of an If...Then decision.
+
+        If i = 0 Then i += 1 : i += 2 : i += 3
+       
+
+       If i <> 6 Then throw new exception("#CSB1 - LineIfThenStatement failed")  _
+               else i += 6 : i += 12   
+       
+       
+       If i <> 24 Then 
+               throw new exception("#CSB2 - LineIfThenStatement failed")
+       End If
+       
+       ' Execution of a Case block is not permitted to "fall through" to 
+       ' next switch section
+
+       Dim j As Integer = 0
+       for i = 0 To 3
+               Select Case i
+                       Case 0
+                       Case 2
+                               j += 2  
+                       Case 1
+                       Case 3
+                               j += 3
+               End Select
+       next
+
+       if j <> 5 then
+               throw new exception("#CSB3 - Switch Case Statement failed")
+       end if
+       
+    End Sub
+
+End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsC.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsC.vb
new file mode 100644 (file)
index 0000000..e167171
--- /dev/null
@@ -0,0 +1,48 @@
+Imports System
+
+Module ConditionalStatementsC
+
+    Sub Main()
+
+        Dim i As Integer
+        Dim arr(10) As Integer
+        Dim flag As Boolean
+
+        For i = 0 To 10
+
+            Select Case i
+                Case 0 To 2
+                    arr(i) = 1
+                Case Is < 2, 3, 6 To 7
+                    arr(i) = 2
+                    Select Case i           ' Nested Select Case Statement
+                        Case 0 To 2
+                            flag = False
+                        Case 3, 6 To 7
+                            flag = True
+                        Case Else
+                            flag = False
+                    End Select
+                Case Is <= 8, Is >= 7
+                    arr(i) = 3
+                Case Else
+                    arr(i) = 4
+            End Select
+
+        Next
+
+        If arr(0) <> 1 Or arr(1) <> 1 Or arr(2) <> 1 Then
+            Throw New Exception("#CSC1 - Select Case Statement failed")
+        ElseIf arr(3) <> 2 Or arr(6) <> 2 Or arr(7) <> 2 Then
+            Throw New Exception("#CSC2 - Select Case Statement failed")
+        ElseIf arr(4) <> 3 Or arr(5) <> 3 Or arr(8) <> 3 Or arr(9) <> 3 Or arr(10) <> 3 Then
+            Throw New Exception("#CSC3 - Select Case Statement failed")
+        ElseIf flag = False Then
+            Throw New Exception("#CSC4 - Nested Select Case Statement failed")
+        Else
+            Console.WriteLine("OK")
+        End If
+
+    End Sub
+
+End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsD.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsD.vb
new file mode 100644 (file)
index 0000000..186dbaa
--- /dev/null
@@ -0,0 +1,43 @@
+Imports System
+
+Module ConditionalStatementsD
+
+    Sub Main()
+
+        Dim i As Integer
+        Dim sarr() As String = {"cat", "awk", "zebra", "mouse", "snake", "tiger", "lion"}
+       Dim str As String = "Lion"
+       Dim arr(6) As Integer
+       
+        For i = 0 To 6
+
+            Select sarr(i)
+                Case "ant" To "cow"
+                    arr(i) = 1
+                Case < "dog", = "tiger", str
+                    arr(i) = 2
+               Case "lion"
+                   arr(i) = 3
+                Case >= "elepahant"
+                    arr(i) = 4
+                Case Else
+                    arr(i) = 5
+            End Select
+
+        Next
+
+        If arr(0) <> 1 Or arr(1) <> 1 Then
+            Throw New Exception("#CSD1 - Switch Statement failed")
+        ElseIf arr(5) <> 2 Then
+            Throw New Exception("#CSD2 - Switch Statement failed")
+        ElseIf arr(6) <> 3 Then
+            Throw New Exception("#CSD3 - Switch Statement failed")
+       ElseIf arr(2) <> 4 Or arr(3) <> 4 Or arr(4) <> 4 Then
+            Throw New Exception("#CSD4 - Switch Statement failed")
+        Else
+            Console.WriteLine("OK")
+        End If
+
+    End Sub
+
+End Module
\ No newline at end of file
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsE.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsE.vb
new file mode 100644 (file)
index 0000000..3fd6905
--- /dev/null
@@ -0,0 +1,25 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 0
+       if False then 
+               i = 1
+       Elseif False
+               i = 2
+       Else 
+               if False then
+                       i = 3
+               else
+                       i = 4
+               End if
+       End if
+       if i<>4 then
+               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsF.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsF.vb
new file mode 100644 (file)
index 0000000..8866fec
--- /dev/null
@@ -0,0 +1,25 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+'To prove "Else if" and "Elseif" are same
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 0
+       if False then 
+               i = 1
+       Elseif False then
+               i = 2
+       Else if False then
+               i = 3
+       else
+               i = 4
+       End if
+       if i<>4 then
+               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsG.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsG.vb
new file mode 100644 (file)
index 0000000..60ae177
--- /dev/null
@@ -0,0 +1,21 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+'To prove "Else if" and "Elseif" are same
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 1000
+       if i then 
+               i = 4
+       else
+               i = 1
+       End if
+       if i<>4 then
+               Throw New System.Exception("If else if not working properly. Expected 4 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsH.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsH.vb
new file mode 100644 (file)
index 0000000..7bdceb4
--- /dev/null
@@ -0,0 +1,26 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 5
+        Select Case i
+            Case 5
+                       i = 10          
+            Case 10
+                       i = 20
+             Case 20
+                       i = 30
+               Case 30
+                       i = 5
+               Case Else 
+                       i = 6
+        End Select
+       if i<>10 then
+               Throw New System.Exception("Select not working properly. Expected 10 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsI.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsI.vb
new file mode 100644 (file)
index 0000000..67b91c1
--- /dev/null
@@ -0,0 +1,22 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 10
+        Select Case i
+               Case 10.5
+                       i = 15
+               Case 20.5
+                       i = 20
+               Case 30.5
+                       i = 30
+        End Select
+       if i<>15 then
+               Throw New System.Exception("Select not working properly. Expected 15 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/ConditionalStatementsJ.vb b/mcs/mbas/Test/tests/statements/ConditionalStatementsJ.vb
new file mode 100644 (file)
index 0000000..1b1a085
--- /dev/null
@@ -0,0 +1,18 @@
+'Author:
+'   V. Sudharsan (vsudharsan@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+Module Test
+    Sub Main() 
+       Dim i as integer = 10
+        Select Case i
+               Case 20-10.5
+                       i = 15
+        End Select
+       if i<>15 then
+               Throw New System.Exception("Select not working properly. Expected 15 but got "&i)
+       End if
+    End Sub
+End Module
+
diff --git a/mcs/mbas/Test/tests/statements/SelectCaseStatementA.vb b/mcs/mbas/Test/tests/statements/SelectCaseStatementA.vb
new file mode 100644 (file)
index 0000000..0bf23c2
--- /dev/null
@@ -0,0 +1,133 @@
+'Author:
+'   Satya Sudha K (ksathyasudha@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+' Testing whether all kinds of primitive types work well as 'Select' expression
+' Testing the case clauses like comma-separated-values
+
+Imports System
+
+Module SelectCaseStatementA
+
+    Sub Main()
+       Dim errMsg As String = ""
+       Dim numMatches As Integer = 0
+
+        Dim a As Byte = 12
+        Select Case a
+       Case 1,2,23 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte " & vbCrLf
+       Case 12,34 
+               numMatches += 1
+               Console.WriteLine ("Byte")
+       Case 45,23,12 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte" & vbCrLf
+        End Select
+
+        Dim b As Short = 234
+        Select Case b
+       Case 1,2,23 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case 12,34 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case 45,23,234 
+               numMatches += 1
+               Console.WriteLine ("Short")
+       End Select
+               
+        Dim c As Integer = 45
+        Select Case c
+       Case 1,2,23
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       Case 23,234 
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       End Select
+
+        Dim d As Long = 465
+        Select Case d
+       Case 1,2,23 
+               errMsg = errMsg & "#A4 Case statement not working with Select Expression of type Long" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Long")
+       End Select
+
+        Dim e As Decimal = 234232
+        Select Case e
+       Case 12,34 
+               errMsg = errMsg & "#A5 Case statement not working with Select Expression of type Decimal" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Decimal")
+       End Select
+
+        Dim f As Single = 23.5
+        Select Case f
+       Case 23.5 
+               numMatches += 1
+               Console.WriteLine ("Single")
+       Case 45.23,234 
+               errMsg = errMsg & "#A6 Case statement not working with Select Expression of type Single" & vbCrLf
+       Case 12.34 
+               errMsg = errMsg & "#A6 Case statement not working with Select Expression of type Single" & vbCrLf
+       End Select
+
+        Dim g As Double = 1.90
+        Select Case g
+       Case 34.327 
+               errMsg = errMsg & "#A7 Case statement not working with Select Expression of type double" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Double")
+       End Select
+
+        Dim h As String = "Sudha"
+        Select Case h
+       Case "Satya"
+               errMsg = errMsg & "#A8 Case statement not working with Select Expression of type String" & vbCrLf
+       Case "Sudha"
+               numMatches += 1
+               Console.WriteLine ("String")
+       Case "None"
+               errMsg = errMsg & "#A8 Case statement not working with Select Expression of type String" & vbCrLf
+       End Select
+
+        Dim i As Char = "4"
+        Select Case i
+       Case "g"
+               errMsg = errMsg & "#A9 Case statement not working with Select Expression of type Char" & vbCrLf
+       Case Else
+               Console.WriteLine ("Char")
+               numMatches += 1
+       End Select
+
+        Dim j As Object = "Object"
+        Select Case j
+       Case "Object"
+               numMatches += 1
+               Console.WriteLine ("Object")
+       Case 45,23,234 
+               errMsg = errMsg & "#A10 Case statement not working with Select Expression of type Object" & vbCrLf
+       End Select
+
+        Dim k As Date = #04/23/2005#
+        Select Case k
+       Case #1/1/1998#
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       Case #04/23/2005#, #02/11/2004#
+               numMatches += 1
+               Console.WriteLine ("DateTime")
+       Case Else
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       End Select
+
+       if (errMsg <> "")
+               Throw New Exception (errMsg)
+       End If
+       if  numMatches <> 10
+               throw new Exception ("select-case statements not working properly")
+       End If
+    End Sub
+
+End Module
diff --git a/mcs/mbas/Test/tests/statements/SelectCaseStatementB.vb b/mcs/mbas/Test/tests/statements/SelectCaseStatementB.vb
new file mode 100644 (file)
index 0000000..608bbaa
--- /dev/null
@@ -0,0 +1,133 @@
+'Author:
+'   Satya Sudha K (ksathyasudha@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+' Testing whether all kinds of primitive types work well as 'Select' expression
+' Testing the case clauses like 'x To Y'
+
+Imports System
+
+Module SelectCaseStatementB
+
+    Sub Main()
+       Dim errMsg As String = ""
+       Dim numMatches As Integer = 0
+
+        Dim a As Byte = 12
+        Select Case a
+       Case 1 To 11 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte " & vbCrLf
+       Case 12 To 23
+               numMatches += 1
+               Console.WriteLine ("Byte")
+       Case 5 To 16 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte" & vbCrLf
+        End Select
+
+        Dim b As Short = 234
+        Select Case b
+       Case 150 To 23 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case 150 To 200 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case 200 To 234 
+               numMatches += 1
+               Console.WriteLine ("Short")
+       End Select
+               
+        Dim c As Integer = 45
+        Select Case c
+       Case 1 To 23
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       Case 23 To 44
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       End Select
+
+        Dim d As Long = 465
+        Select Case d
+       Case 1 To 460
+               errMsg = errMsg & "#A4 Case statement not working with Select Expression of type Long" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Long")
+       End Select
+
+        Dim e As Decimal = 234232
+        Select Case e
+       Case 12 To 34 
+               errMsg = errMsg & "#A5 Case statement not working with Select Expression of type Decimal" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Decimal")
+       End Select
+
+        Dim f As Single = 23.5
+        Select Case f
+       Case 23 To 24 
+               numMatches += 1
+               Console.WriteLine ("Single")
+       Case 23 To 5 
+               errMsg = errMsg & "#A6 Case statement not working with Select Expression of type Single" & vbCrLf
+       Case 12.34 
+               errMsg = errMsg & "#A6 Case statement not working with Select Expression of type Single" & vbCrLf
+       End Select
+
+        Dim g As Double = 1.90
+        Select Case g
+       Case 34 To 327 
+               errMsg = errMsg & "#A7 Case statement not working with Select Expression of type double" & vbCrLf
+       Case 1 To 20
+               numMatches += 1
+               Console.WriteLine ("Double")
+       End Select
+
+        Dim h As String = "Sudha"
+        Select Case h
+       Case "K" To "Satya"
+               errMsg = errMsg & "#A8 Case statement not working with Select Expression of type String" & vbCrLf
+       Case "SAAA" To "Szzzz"
+               numMatches += 1
+               Console.WriteLine ("String")
+       Case "None"
+               errMsg = errMsg & "#A8 Case statement not working with Select Expression of type String" & vbCrLf
+       End Select
+
+        Dim i As Char = "4"
+        Select Case i
+       Case "g"
+               errMsg = errMsg & "#A9 Case statement not working with Select Expression of type Char" & vbCrLf
+       Case Else
+               Console.WriteLine ("Char")
+               numMatches += 1
+       End Select
+
+        Dim j As Object = 45.6
+        Select Case j
+       Case 23 To 90
+               numMatches += 1
+               Console.WriteLine ("Object")
+       Case 45,23,234 
+               errMsg = errMsg & "#A10 Case statement not working with Select Expression of type Object" & vbCrLf
+       End Select
+
+        Dim k As Date = #04/23/2005#
+        Select Case k
+       Case #1/1/1998#
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       Case #01/01/2002#  To #02/11/2006#
+               numMatches += 1
+               Console.WriteLine ("DateTime")
+       Case Else
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       End Select
+
+       if (errMsg <> "")
+               Throw New Exception (errMsg)
+       End If
+       if  numMatches <> 10
+               throw new Exception ("select-case statements not working properly")
+       End If
+    End Sub
+
+End Module
diff --git a/mcs/mbas/Test/tests/statements/SelectCaseStatementC.vb b/mcs/mbas/Test/tests/statements/SelectCaseStatementC.vb
new file mode 100644 (file)
index 0000000..eb45dc2
--- /dev/null
@@ -0,0 +1,129 @@
+'Author:
+'   Satya Sudha K (ksathyasudha@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+' Testing whether all kinds of primitive types work well as 'Select' expression
+' Testing the case clauses like '<relational op> X'
+
+Imports System
+
+Module ConditionalStatementsC
+
+    Sub Main()
+       Dim errMsg As String = ""
+       Dim numMatches As Integer = 0
+
+        Dim a As Byte = 12
+        Select Case a
+       Case is < 11 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte " & vbCrLf
+       Case >= 12
+               numMatches += 1
+               Console.WriteLine ("Byte")
+       Case 5 To 16 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte" & vbCrLf
+        End Select
+
+        Dim b As Short = 234
+        Select Case b
+       Case <= 23 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case is = 200 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case <> 24 
+               numMatches += 1
+               Console.WriteLine ("Short")
+       End Select
+               
+        Dim c As Integer = 45
+        Select Case c
+       Case < 23
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       Case <= 44
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       End Select
+
+        Dim d As Long = 465
+        Select Case d
+       Case is >= 480
+               errMsg = errMsg & "#A4 Case statement not working with Select Expression of type Long" & vbCrLf
+       Case Else
+               numMatches += 1
+               Console.WriteLine ("Long")
+       End Select
+
+        Dim e As Decimal = 234232
+        Select Case e
+       Case 12 To 34 
+               errMsg = errMsg & "#A5 Case statement not working with Select Expression of type Decimal" & vbCrLf
+       Case >= 200
+               numMatches += 1
+               Console.WriteLine ("Decimal")
+       End Select
+
+        Dim f As Single = 23.5
+        Select Case f
+       Case <= 23.6 
+               numMatches += 1
+               Console.WriteLine ("Single")
+       Case = 24 
+               errMsg = errMsg & "#A6 Case statement not working with Select Expression of type Single" & vbCrLf
+       End Select
+
+        Dim g As Double = 1.90
+        Select Case g
+       Case is > 34
+               errMsg = errMsg & "#A7 Case statement not working with Select Expression of type double" & vbCrLf
+       Case < 20
+               numMatches += 1
+               Console.WriteLine ("Double")
+       End Select
+
+        Dim h As String = "Sudha"
+        Select Case h
+       Case <> "Satya"
+               numMatches += 1
+               Console.WriteLine ("String")
+       Case Else
+               errMsg = errMsg & "#A8 Case statement not working with Select Expression of type String" & vbCrLf
+       End Select
+
+        Dim i As Char = "4"
+        Select Case i
+       Case < "g"
+               Console.WriteLine ("Char")
+               numMatches += 1
+       Case Else
+               errMsg = errMsg & "#A9 Case statement not working with Select Expression of type Char" & vbCrLf
+       End Select
+
+        Dim j As Object = 45.6
+        Select Case j
+       Case 23 To 90
+               numMatches += 1
+               Console.WriteLine ("Object")
+       Case 45,23,234 
+               errMsg = errMsg & "#A10 Case statement not working with Select Expression of type Object" & vbCrLf
+       End Select
+
+        Dim k As Date = #04/23/2005#
+        Select Case k
+       Case is = #1/1/1998#
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       Case >= #01/01/2002# 
+               numMatches += 1
+               Console.WriteLine ("DateTime")
+       Case <= #02/11/2006#
+               errMsg = errMsg & "#A11 Case statement not working with Select Expression of type DateTime" & vbCrLf
+       End Select
+
+       if (errMsg <> "")
+               Throw New Exception (errMsg)
+       End If
+       if  numMatches <> 10
+               throw new Exception ("select-case statements not working properly")
+       End If
+    End Sub
+
+End Module
diff --git a/mcs/mbas/Test/tests/statements/SelectCaseStatementD.vb b/mcs/mbas/Test/tests/statements/SelectCaseStatementD.vb
new file mode 100644 (file)
index 0000000..a6e44c2
--- /dev/null
@@ -0,0 +1,56 @@
+'Author:
+'   Satya Sudha K (ksathyasudha@novell.com)
+'
+' (C) 2005 Novell, Inc.
+
+' Testing whether variables work well as 'case' expressions
+' 'Select' expressions and 'case' expressions are of different types
+
+Imports System
+
+Module SelectCaseStatementD
+
+    Sub Main()
+       Dim errMsg As String = ""
+       Dim numMatches As Integer = 0
+
+        Dim a As Byte = 5
+        Dim b As Integer = 5
+        Dim c As Decimal = 10
+        Dim d As String = "15"
+
+        Select Case a
+       Case is <= b
+               numMatches += 1
+       Case >= c
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte " & vbCrLf
+       Case c To d 
+               errMsg = errMsg & "#A1 Case statement not working with Select Expression of type byte" & vbCrLf
+        End Select
+
+        a = 12
+        Select Case a
+       Case <= d 
+               numMatches += 1
+       Case is = c 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       Case <> b 
+               errMsg = errMsg & "#A2 Case statement not working with Select Expression of type Short" & vbCrLf
+       End Select
+               
+        a = 20
+        Select Case a
+       Case < c, is = b, d To 90
+               numMatches += 1
+       Case Else
+               errMsg = errMsg & "#A3 Case statement not working with Select Expression of type Integer" & vbCrLf
+       End Select
+       if (errMsg <> "")
+               throw new Exception (errMsg)
+       End If
+       if (numMatches <> 3)
+               throw new Exception ("Select Case statement not working properly")
+       End If
+    End Sub
+
+End Module
index 5913c75c320947cd8e02c4097a9e5a2c74a9e7f0..f12f57af78601ec461fe176df61411d5091cb4f0 100644 (file)
@@ -3845,16 +3845,26 @@ namespace Mono.MonoBASIC {
                        return count;
                }
 
+               static ConversionType IsApplicable (EmitContext ec, ArrayList arguments, MethodBase candidate,
+                                                   out bool expanded)
+               {
+                       bool objectArgsPresent;
+                       return IsApplicable (ec, arguments, candidate, out expanded, out objectArgsPresent);
+               }
+
                /// <summary>
                ///  Determines if the candidate method is applicable (section 14.4.2.1)
                ///  to the given set of arguments
                /// </summary>
-               static ConversionType IsApplicable (EmitContext ec, ArrayList arguments, MethodBase candidate, out bool expanded)
+               static ConversionType IsApplicable (EmitContext ec, ArrayList arguments, MethodBase candidate,
+                                                   out bool expanded, out bool objectArgsPresent)
                {
                        int arg_count;
                        Type param_type;
 
-                       expanded = false;
+                       expanded = objectArgsPresent = false;
+                       int num_narr_conv = 0;          // Count the narrowing conversion not involving object
+                                                       // arguments
                        
                        if (arguments == null)
                                arg_count = 0;
@@ -3931,13 +3941,23 @@ namespace Mono.MonoBASIC {
                                                match = CheckParameterAgainstArgument (ec, pd, i, a, param_type);
                                        if (match == ConversionType.None)
                                                return ConversionType.None;
-                                       if (result == ConversionType.None)
+
+                                       if (match == ConversionType.Narrowing) {
+                                               result = match;
+                                               if (a.Expr.Type == TypeManager.object_type)
+                                                       objectArgsPresent = true;
+                                               else {
+                                                       objectArgsPresent = false;
+                                                       num_narr_conv ++;
+                                               }
+                                       } else if (result == ConversionType.None)
                                                result = match;
-                                       else if (match == ConversionType.Narrowing)
-                                               result = ConversionType.Narrowing;                                      
                                }
                        }
 
+                       if (num_narr_conv > 0)  // There were narrowing conversions other than those for object arguments
+                               objectArgsPresent = false;
+
                        return result;
                }
 
@@ -3998,6 +4018,13 @@ namespace Mono.MonoBASIC {
                        return (m.Name == ((string) filterCriteria));
                }
 
+               public static MethodBase OverloadResolve (EmitContext ec, MethodGroupExpr me,
+                                                         ref ArrayList Arguments, Location loc)
+               {
+                       bool isLateBindingRequired;
+                       return OverloadResolve (ec, me, ref Arguments, loc, out isLateBindingRequired); 
+               }
+
                // We need an overload for OverloadResolve because Invocation.DoResolve
                // must pass Arguments by reference, since a later call to IsApplicable
                // can change the argument list if optional parameters are defined
@@ -4043,20 +4070,29 @@ namespace Mono.MonoBASIC {
                ///   loc: The location if we want an error to be reported, or a Null
                ///        location for "probing" purposes.
                ///
+               ///   isLateBindingRequired : Flag to indicate that this method call is
+               ///                           is a candidate for late binding. Set to true if
+               ///                           there is atleast one object argument and we get
+               ///                           * Two or more candidates that require widening conv
+               ///                           * Two or more candidates require narrowing conversions
+               ///                             (for object arguments **only**)
                ///   Returns: The MethodBase (either a ConstructorInfo or a MethodInfo)
                ///            that is the best match of me on Arguments.
                ///
                /// </summary>
                public static MethodBase OverloadResolve (EmitContext ec, MethodGroupExpr me,
-                                                         ref ArrayList Arguments, Location loc)
+                                                         ref ArrayList Arguments, Location loc,
+                                                         out bool isLateBindingRequired)
                {
                        MethodBase method = null;
                        int argument_count;
                        ArrayList candidates = new ArrayList ();
+                       ArrayList lateBindingCandidates = new ArrayList ();
                        Hashtable expanded_candidates = new Hashtable();
                        int narrow_count = 0;
                        bool narrowing_candidate = false;
                        errorMsg = "";
+                       isLateBindingRequired = false;
                        CaseInsensitiveHashtable namedArgs = new CaseInsensitiveHashtable ();
 
                        if (Arguments == null)
@@ -4072,7 +4108,7 @@ namespace Mono.MonoBASIC {
 
                        ArrayList newarglist = Arguments;
                        foreach (MethodBase candidate in me.Methods){
-                               bool candidate_expanded;
+                               bool candidate_expanded, object_args_present;
                                newarglist = Arguments;
                                if (argument_count > 0 && namedArgs.Count != 0) {
                                        newarglist = ReorderArguments (candidate, Arguments, namedArgs, ref errorMsg, loc);
@@ -4080,12 +4116,15 @@ namespace Mono.MonoBASIC {
                                                continue;
                                }
 
-                               ConversionType m = IsApplicable (ec, newarglist, candidate, out candidate_expanded);
+                               ConversionType m = IsApplicable (ec, newarglist, candidate, out candidate_expanded, out object_args_present);
                                if (candidate_expanded)
                                        expanded_candidates [candidate] = candidate;
                                if (m == ConversionType.None)
                                        continue;
                                else if (m == ConversionType.Narrowing) {
+                                       if (object_args_present)   // if the narrowing conversion was due 
+                                                                  // to the argument being an object
+                                               lateBindingCandidates.Add (candidate);
                                        if (method == null) {
                                                method = candidate;
                                                narrowing_candidate = true;
@@ -4107,15 +4146,23 @@ namespace Mono.MonoBASIC {
                        }
 
                        if (candidates.Count == 0) {
-                               if (narrow_count > 1)
-                                       method = null;
-                               else if (narrow_count == 1)
+                               if (lateBindingCandidates.Count > 1) {
+                                       isLateBindingRequired = true;
+                                       return null;
+                               }
+
+                               if (narrow_count > 1) {
+                                       if (lateBindingCandidates.Count == 1)
+                                               method = (MethodBase) lateBindingCandidates [0];
+                                       else 
+                                               method = null;
+                               } else if (narrow_count == 1)
                                        candidates = null;
                        } else if (candidates.Count == 1) {
                                method = (MethodBase)candidates [0];
                                candidates = null;
                        } else
-                               narrow_count = 0;
+                               narrow_count  = 0;
 
                        if (method == null) {
                                //
@@ -4493,9 +4540,20 @@ namespace Mono.MonoBASIC {
                        if (expr is MethodGroupExpr) 
                        {
                                MethodGroupExpr mg = (MethodGroupExpr) expr;
-                               method = OverloadResolve (ec, mg, ref Arguments, loc);
+                               bool isLateBindingRequired = false;
+                               method = OverloadResolve (ec, mg, ref Arguments, loc, out isLateBindingRequired);
                                if (method == null)
                                {
+                                       if (isLateBindingRequired) {
+                                               Expression type_expr = new TypeOf (Parser.DecomposeQI (mg.DeclaringType.Name, loc), loc);
+                                               StatementSequence etmp = new StatementSequence (ec.CurrentBlock, 
+                                                                       loc, null, mg.Name, type_expr, 
+                                                                       Arguments, is_retval_required, is_left_hand);
+                                               if (! etmp.ResolveArguments (ec))
+                                                       return null;
+                                               etmp.GenerateLateBindingStatements ();
+                                               return etmp.Resolve (ec);
+                                       }
                                        Error (30455,
                                                "Could not find any applicable function to invoke for this argument list" + errorMsg);
                                        return null;
index 4760bcb306d1eab8f4a5b8919dec59bb05a92a42..e5b96db71b7e2b44925abb964670acb43f1bab58 100644 (file)
@@ -2534,6 +2534,11 @@ constructor_declaration
          { 
                Constructor c = (Constructor) $1;
                c.Block = (Block) end_block();
+
+//To support "Sub New()" add default modifier "public"
+
+               if(current_modifiers ==0)
+                       current_modifiers = Modifiers.PUBLIC;
                c.ModFlags = (int) current_modifiers;
                c.OptAttributes = current_attributes;
                
@@ -3625,7 +3630,7 @@ case_section
                topmost.statements.Add (new Break (lexer.Location));
                
                ArrayList a = new ArrayList();
-               a.Add (new SwitchLabel (null, lexer.Location));                 
+               a.Add (new SwitchLabel (null, SwitchLabel.LabelType.Else, Binary.Operator.TOP, lexer.Location));                        
                $$ = new SwitchSection ((ArrayList) a, topmost);                
          }
        ;         
@@ -3633,20 +3638,14 @@ case_section
 case_clauses
        : case_clause
          {
-                if ($1 is ArrayList) //From expression TO expression 
-                         $$ = $1;
-               else {
-
-                       ArrayList labels = new ArrayList ();
-
-                       labels.Add ($1);
-                       $$ = labels;
-               }
+               ArrayList labels = new ArrayList ();
+               labels.Add ($1);
+               $$ = labels;
          }     
        | case_clauses COMMA case_clause
          {
                ArrayList labels = (ArrayList) ($1);
-               labels.Add ($2);
+               labels.Add ($3);
 
                $$ = labels;
          }     
@@ -3654,27 +3653,17 @@ case_clauses
        
 case_clause
        : opt_is comparison_operator expression
+         {
+               $$ = new SwitchLabel ((Expression) $3, SwitchLabel.LabelType.Operator, (Binary.Operator) $2, lexer.Location);
+         }
        | expression
          {
-               $$ = new SwitchLabel ((Expression) $1, lexer.Location);
+               $$ = new SwitchLabel ((Expression) $1, SwitchLabel.LabelType.Label, Binary.Operator.TOP, lexer.Location);
          }
        | expression TO expression
         {
-               //FIXME: need to handle when expressions are character strings.
-                       Constant start = (Constant) $1;
-                       Constant end = (Constant) $3;
-                       int i = 0, s = 0, e = 0;
-                       Location l = lexer.Location ;
-                       ArrayList labels = new ArrayList ();
-
-                       if (start != null) 
-                               s = (int) start.GetValue ();
-                       if(end != null) 
-                               e = (int) end.GetValue ();
-                       for(i = s; i <= e; i++) {
-                               labels.Add(new SwitchLabel ((Expression)new IntLiteral(i), l));
-                       }
-                       $$ = labels;
+               $$ = new SwitchLabel ((Expression) $1, (Expression) $3, SwitchLabel.LabelType.Range,
+                                        Binary.Operator.TOP, lexer.Location);
         }
 
        ;
@@ -3685,11 +3674,30 @@ opt_is
        ;
 
 comparison_operator
-       : OP_LT
+       : OP_LT 
+         {
+               $$ = Binary.Operator.LessThan;
+         }
        | OP_GT
+         {
+               $$ = Binary.Operator.GreaterThan;
+         }
+       | OP_GE
+         {
+               $$ = Binary.Operator.GreaterThanOrEqual;
+         }
        | OP_LE
+         {
+               $$ = Binary.Operator.LessThanOrEqual;
+         }
        | OP_NE
-       /*| OP_EQ */
+         {
+               $$ = Binary.Operator.Inequality;
+         }
+       | ASSIGN
+         {
+               $$ = Binary.Operator.Equality;
+         }
        ;
 
 opt_case
index 4dadf225bba24784089482dd93ed84757c03a41c..935dc60c2e3272e365ef898d6c1ff30a548d1206 100644 (file)
@@ -1274,8 +1274,12 @@ namespace Mono.MonoBASIC {
                                        }
                                        ec.ig.Emit (OpCodes.Leave, ec.ReturnLabel);
                                } else {
-                                       ec.ig.Emit (OpCodes.Ldloc_0);
-                                       ec.ig.Emit (OpCodes.Ret);
+                                       if(type == ExitType.SUB) {   
+                                                ec.ig.Emit (OpCodes.Ret);
+                                        } else {
+                                               ec.ig.Emit (OpCodes.Ldloc_0);
+                                               ec.ig.Emit (OpCodes.Ret);
+                                       }
 
                                }
 
@@ -3456,17 +3460,40 @@ namespace Mono.MonoBASIC {
                Expression expr;
                bool isRetValRequired;
                bool isLeftHandSide;
+               bool isIndexerAccess;
+               string memberName;
+               Expression type_expr;
 
                public StatementSequence (Block parent, Location loc, Expression expr) 
                        : this (parent, loc, expr, null)
                { }
 
+               public StatementSequence (Block parent, Location loc, Expression expr, string name, 
+                                         Expression type_expr, ArrayList a, bool isRetValRequired,
+                                         bool isLeftHandSide) 
+                       : this (parent, loc, expr, a)
+               {
+                       this.memberName = name;
+                       this.type_expr = type_expr;
+                       this.isRetValRequired = isRetValRequired;
+                       this.isLeftHandSide = isLeftHandSide;
+               }
+
                public StatementSequence (Block parent, Location loc, Expression expr, ArrayList a,
                                          bool isRetValRequired, bool isLeftHandSide) 
                        : this (parent, loc, expr, a)
                {
                        this.isRetValRequired = isRetValRequired;
                        this.isLeftHandSide = isLeftHandSide;
+                       if (expr is MemberAccess) {
+                               this.expr = ((MemberAccess)expr).Expr;
+                               this.memberName = ((MemberAccess)expr).Identifier;
+                               this.isIndexerAccess = false;
+                       } else if (expr is IndexerAccess) {
+                               this.expr = ((IndexerAccess) expr).Instance;
+                               this.memberName = "";
+                               this.isIndexerAccess = true;
+                       }
                }
 
                public StatementSequence (Block parent, Location loc, Expression expr, ArrayList a) 
@@ -3485,6 +3512,8 @@ namespace Mono.MonoBASIC {
                        stmtBlock.IsLateBindingRequired = true;
                        this.loc = loc;
                        this.isRetValRequired = this.isLeftHandSide = false;
+                       this.memberName = "";
+                       this.type_expr = null;
                }
 
                public ArrayList Arguments {
@@ -3578,20 +3607,12 @@ namespace Mono.MonoBASIC {
                                stmtBlock.AddStatement (new StatementExpression ((ExpressionStatement) assign_stmt, loc));
                        }
 
-                       Expression tempExpr = expr;
-                       string memName = "";
-                       bool isIndexerAccess = true;
-                       if (expr is MemberAccess) {
-                               tempExpr = ((MemberAccess)expr).Expr;
-                               memName = ((MemberAccess)expr).Identifier;
-                               isIndexerAccess = false;
-                       } else if (expr is IndexerAccess) {
-                               tempExpr = ((IndexerAccess) expr).Instance;
-                       }
+                       //string memName = "";
+                       //bool isIndexerAccess = true;
 
                        ArrayList invocationArgs = new ArrayList ();
-                       if (isIndexerAccess) {
-                               invocationArgs.Add (new Argument (tempExpr, Argument.AType.Expression));
+                       if (isIndexerAccess || memberName == "") {
+                               invocationArgs.Add (new Argument (expr, Argument.AType.Expression));
                                invocationArgs.Add (new Argument (v1, Argument.AType.Expression));
                                invocationArgs.Add (new Argument (NullLiteral.Null, Argument.AType.Expression));
                                Expression tmp = null;
@@ -3604,9 +3625,16 @@ namespace Mono.MonoBASIC {
                                stmtBlock.AddStatement (new StatementExpression ((ExpressionStatement) invStmt, loc));
                                return;
                        }
-                       invocationArgs.Add (new Argument (tempExpr, Argument.AType.Expression));
-                       invocationArgs.Add (new Argument (NullLiteral.Null, Argument.AType.Expression));
-                       invocationArgs.Add (new Argument (new StringLiteral (memName), Argument.AType.Expression));
+
+                       if (expr != null)
+                               invocationArgs.Add (new Argument (expr, Argument.AType.Expression));
+                       else
+                               invocationArgs.Add (new Argument (NullLiteral.Null, Argument.AType.Expression));
+                       if (type_expr != null)
+                               invocationArgs.Add (new Argument (type_expr, Argument.AType.Expression));
+                       else
+                               invocationArgs.Add (new Argument (NullLiteral.Null, Argument.AType.Expression));
+                       invocationArgs.Add (new Argument (new StringLiteral (memberName), Argument.AType.Expression));
                        invocationArgs.Add (new Argument (v1, Argument.AType.Expression));
                        if (ArgumentNames != null && ArgumentNames.Count > 0)
                                invocationArgs.Add (new Argument (v2, Argument.AType.Expression));
@@ -3617,7 +3645,7 @@ namespace Mono.MonoBASIC {
                        bool isCopyBackRequired = false;
                        if (!isLeftHandSide) {
                                for (int i = 0; i < argCount; i++) {
-                                       Argument origArg = (Argument) originalArgs [i];
+                                       Argument origArg = (Argument) Arguments [i];
                                        Expression origExpr = origArg.Expr; 
                                        if (!(origExpr is Constant || origArg.ArgType == Argument.AType.NoArg)) 
                                                isCopyBackRequired = true;
@@ -3630,7 +3658,7 @@ namespace Mono.MonoBASIC {
                                rank_specifier.Add (new IntLiteral (argCount));
                                arrayInitializers = new ArrayList ();
                                for (int i = 0; i < argCount; i++) {
-                                       Argument a = (Argument) originalArgs [i];
+                                       Argument a = (Argument) Arguments [i];
                                        Expression origExpr = a.Expr;
                                        if (origExpr is Constant || a.ArgType == Argument.AType.NoArg || origExpr is New)
                                                arrayInitializers.Add (new BoolLiteral (false));
@@ -3661,6 +3689,9 @@ namespace Mono.MonoBASIC {
                        inv_stmt.IsLateBinding = true;
                        stmtBlock.AddStatement (new StatementExpression ((ExpressionStatement) inv_stmt, loc));
 
+                       if (! isCopyBackRequired)
+                               return;
+
                        for (int i = argCount - 1; i >= 0; i --) {
                                Argument arg = (Argument) originalArgs [i];
                                Expression origExpr = (Expression) arg.Expr;
@@ -3686,13 +3717,18 @@ namespace Mono.MonoBASIC {
                public override void Emit (EmitContext ec)
                {
                        stmtBlock.Emit (ec);
-                       //ec.ig.Emit (OpCodes.Ldloc_0);
                }
        }
 
        public class SwitchLabel {
-               Expression label;
-               object converted;
+               public enum LabelType : byte {
+                       Operator, Range, Label, Else
+               }
+
+               Expression label, start, end;
+               LabelType label_type;
+               Expression label_condition, start_condition, end_condition;
+               Binary.Operator oper;
                public Location loc;
                public Label ILLabel;
                public Label ILLabelCode;
@@ -3700,10 +3736,23 @@ namespace Mono.MonoBASIC {
                //
                // if expr == null, then it is the default case.
                //
-               public SwitchLabel (Expression expr, Location l)
+               public SwitchLabel (Expression start, Expression end, LabelType ltype, Binary.Operator oper, Location l) {
+                       this.start = start;
+                       this.end = end;
+                       this.label_type = ltype;
+                       this.oper = oper;
+                       this.loc = l;
+                       label_condition = start_condition = end_condition = null;
+               }
+
+               public SwitchLabel (Expression expr, LabelType ltype, Binary.Operator oper, Location l)
                {
                        label = expr;
+                       start = end = null;
+                       label_condition = start_condition = end_condition = null;
                        loc = l;
+                       this.label_type = ltype;
+                       this.oper = oper;
                }
 
                public Expression Label {
@@ -3712,9 +3761,27 @@ namespace Mono.MonoBASIC {
                        }
                }
 
-               public object Converted {
+               public LabelType Type {
                        get {
-                               return converted;
+                               return label_type;
+                       }
+               }
+
+               public Expression ConditionStart {
+                       get {
+                               return start_condition;
+                       }
+               }
+
+               public Expression ConditionEnd {
+                       get {
+                               return end_condition;
+                       }
+               }
+
+               public Expression ConditionLabel {
+                       get {
+                               return label_condition;
                        }
                }
 
@@ -3722,37 +3789,55 @@ namespace Mono.MonoBASIC {
                // Resolves the expression, reduces it to a literal if possible
                // and then converts it to the requested type.
                //
-               public bool ResolveAndReduce (EmitContext ec, Type required_type)
+               public bool ResolveAndReduce (EmitContext ec, Expression expr)
                {
                        ILLabel = ec.ig.DefineLabel ();
                        ILLabelCode = ec.ig.DefineLabel ();
 
-                       if (label == null)
+                       Expression e = null;
+                       switch (label_type) {
+                       case LabelType.Label :
+                               if (label == null)
+                                       return false;
+                               e = label.Resolve (ec);
+                               if (e != null)
+                                       e = Expression.ConvertImplicit (ec, e, expr.Type, loc);
+                               if (e == null)
+                                       return false;
+                               label_condition = new Binary (Binary.Operator.Equality, expr, e, loc);
+                               if ((label_condition = label_condition.DoResolve (ec)) == null)
+                                       return false;
+                               return true;
+                       case LabelType.Operator :
+                               e = label.Resolve (ec);
+                               label_condition = new Binary (oper, expr, e, loc);
+                               if ((label_condition = label_condition.DoResolve (ec)) == null)
+                                       return false;
+                               return true;
+                       case LabelType.Range :
+                               if (start == null || end == null)
+                                       return false;
+                               e = start.Resolve (ec);
+                               if (e != null)
+                                       e = Expression.ConvertImplicit (ec, e, expr.Type, loc);
+                               if (e == null)
+                                       return false;
+                               start_condition = new Binary (Binary.Operator.GreaterThanOrEqual, expr, e, loc);
+                               start_condition = start_condition.Resolve (ec);
+                               e = end.Resolve (ec);
+                               if (e != null)
+                                       e = Expression.ConvertImplicit (ec, e, expr.Type, loc);
+                               if (e == null)
+                                       return false;
+                               end_condition = new Binary (Binary.Operator.LessThanOrEqual, expr, e, loc);
+                               end_condition = end_condition.Resolve (ec);
+                               if (start_condition == null || end_condition == null)
+                                       return false;
                                return true;
-                       
-                       Expression e = label.Resolve (ec);
-
-                       if (e == null)
-                               return false;
-
-                       if (!(e is Constant)){
-                               Console.WriteLine ("Value is: " + label);
-                               Report.Error (150, loc, "A constant value is expected");
-                               return false;
-                       }
 
-                       if (e is StringConstant || e is NullLiteral){
-                               if (required_type == TypeManager.string_type){
-                                       converted = e;
-                                       ILLabel = ec.ig.DefineLabel ();
-                                       return true;
-                               }
+                       case LabelType.Else :
+                               break;
                        }
-
-                       converted = Expression.ConvertIntLiteral ((Constant) e, required_type, loc);
-                       if (converted == null)
-                               return false;
-
                        return true;
                }
        }
@@ -3794,7 +3879,7 @@ namespace Mono.MonoBASIC {
                // The types allowed to be implicitly cast from
                // on the governing type
                //
-               static Type [] allowed_types;
+               //static Type [] allowed_types;
                
                public Switch (Expression e, ArrayList sects, Location l)
                {
@@ -3823,20 +3908,21 @@ namespace Mono.MonoBASIC {
                //
                Expression SwitchGoverningType (EmitContext ec, Type t)
                {
-                       if (t == TypeManager.int32_type ||
-                           t == TypeManager.uint32_type ||
-                           t == TypeManager.char_type ||
-                           t == TypeManager.byte_type ||
-                           t == TypeManager.sbyte_type ||
-                           t == TypeManager.ushort_type ||
+                       if (t == TypeManager.byte_type ||
                            t == TypeManager.short_type ||
-                           t == TypeManager.uint64_type ||
+                           t == TypeManager.int32_type ||
                            t == TypeManager.int64_type ||
+                           t == TypeManager.decimal_type ||
+                           t == TypeManager.float_type ||
+                           t == TypeManager.double_type ||
+                           t == TypeManager.date_type ||
+                           t == TypeManager.char_type ||
+                           t == TypeManager.object_type ||
                            t == TypeManager.string_type ||
                                t == TypeManager.bool_type ||
                                t.IsSubclassOf (TypeManager.enum_type))
                                return Expr;
-
+/*
                        if (allowed_types == null){
                                allowed_types = new Type [] {
                                        TypeManager.sbyte_type,
@@ -3876,6 +3962,8 @@ namespace Mono.MonoBASIC {
                                        converted = e;
                        }
                        return converted;
+*/
+                       return null;
                }
 
                void error152 (string n)
@@ -3905,14 +3993,16 @@ namespace Mono.MonoBASIC {
                        } else
                                compare_type = SwitchType;
                        
-                       foreach (SwitchSection ss in Sections){
-                               foreach (SwitchLabel sl in ss.Labels){
-                                       if (!sl.ResolveAndReduce (ec, SwitchType)){
+                       for (int secIndex = 0; secIndex < Sections.Count; secIndex ++) {
+                               SwitchSection ss = (SwitchSection) Sections [secIndex];
+                               for (int labelIndex = 0; labelIndex < ss.Labels.Count; labelIndex ++) {
+                                       SwitchLabel sl  = (SwitchLabel) ss.Labels [labelIndex];
+                                       if (!sl.ResolveAndReduce (ec, Expr)){
                                                error = true;
                                                continue;
                                        }
 
-                                       if (sl.Label == null){
+                                       if (sl.Type == SwitchLabel.LabelType.Else){
                                                if (got_default){
                                                        error152 ("default");
                                                        error = true;
@@ -3920,111 +4010,6 @@ namespace Mono.MonoBASIC {
                                                got_default = true;
                                                continue;
                                        }
-                                       
-                                       object key = sl.Converted;
-
-                                       if (key is Constant)
-                                               key = ((Constant) key).GetValue ();
-
-                                       if (key == null)
-                                               key = NullLiteral.Null;
-                                       
-                                       string lname = null;
-                                       if (compare_type == TypeManager.uint64_type){
-                                               ulong v = (ulong) key;
-
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.int64_type){
-                                               long v = (long) key;
-
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.uint32_type){
-                                               uint v = (uint) key;
-
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.char_type){
-                                               char v = (char) key;
-                                               
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.byte_type){
-                                               byte v = (byte) key;
-                                               
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.sbyte_type){
-                                               sbyte v = (sbyte) key;
-                                               
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.short_type){
-                                               short v = (short) key;
-                                               
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.ushort_type){
-                                               ushort v = (ushort) key;
-                                               
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.string_type){
-                                               if (key is NullLiteral){
-                                                       if (Elements.Contains (NullLiteral.Null))
-                                                               lname = "null";
-                                                       else
-                                                               Elements.Add (NullLiteral.Null, null);
-                                               } else {
-                                                       string s = (string) key;
-
-                                                       if (Elements.Contains (s))
-                                                               lname = s;
-                                                       else
-                                                               Elements.Add (s, sl);
-                                               }
-                                       } else if (compare_type == TypeManager.int32_type) {
-                                               int v = (int) key;
-
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       } else if (compare_type == TypeManager.bool_type) {
-                                               bool v = (bool) key;
-
-                                               if (Elements.Contains (v))
-                                                       lname = v.ToString ();
-                                               else
-                                                       Elements.Add (v, sl);
-                                       }
-                                       else
-                                       {
-                                               throw new Exception ("Unknown switch type!" +
-                                                                    SwitchType + " " + compare_type);
-                                       }
-
-                                       if (lname != null){
-                                               error152 ("case + " + lname);
-                                               error = true;
-                                       }
                                }
                        }
                        if (error)
@@ -4109,6 +4094,7 @@ namespace Mono.MonoBASIC {
                        }
                }
 
+/*
                /// <summary>
                /// This method emits code for a lookup-based switch statement (non-string)
                /// Basically it groups the cases into blocks that are at least half full,
@@ -4420,6 +4406,7 @@ namespace Mono.MonoBASIC {
                        
                        return all_return;
                }
+*/
 
                public override bool Resolve (EmitContext ec)
                {
@@ -4429,7 +4416,7 @@ namespace Mono.MonoBASIC {
 
                        new_expr = SwitchGoverningType (ec, Expr.Type);
                        if (new_expr == null){
-                               Report.Error (151, loc, "An integer type or string was expected for switch");
+                               Report.Error (30338, loc, "'Select' expression cannot be of type '" + Expr.Type +"'");
                                return false;
                        }
 
@@ -4468,15 +4455,7 @@ namespace Mono.MonoBASIC {
                
                protected override bool DoEmit (EmitContext ec)
                {
-                       // Store variable for comparission purposes
-                       LocalBuilder value = ec.ig.DeclareLocal (SwitchType);
-                       new_expr.Emit (ec);
-                       ec.ig.Emit (OpCodes.Stloc, value);
-
                        ILGenerator ig = ec.ig;
-
-                       default_target = ig.DefineLabel ();
-
                        //
                        // Setup the codegen context
                        //
@@ -4486,12 +4465,47 @@ namespace Mono.MonoBASIC {
                        ec.LoopEnd = ig.DefineLabel ();
                        ec.Switch = this;
 
-                       // Emit Code.
-                       bool all_return;
-                       if (SwitchType == TypeManager.string_type)
-                               all_return = SimpleSwitchEmit (ec, value);
-                       else
-                               all_return = TableSwitchEmit (ec, value);
+                       for (int secIndex = 0; secIndex < Sections.Count; secIndex ++) {
+                               SwitchSection section = (SwitchSection) Sections [secIndex];
+                               Label sLabel = ig.DefineLabel ();
+                               Label lLabel = ig.DefineLabel ();
+                               ArrayList Labels = section.Labels;
+                               for (int labelIndex = 0; labelIndex < Labels.Count; labelIndex ++) {
+                                       SwitchLabel sl = (SwitchLabel) Labels [labelIndex];
+                                       switch (sl.Type) {
+                                       case SwitchLabel.LabelType.Range :
+                                               if (labelIndex + 1 == Labels.Count) {
+                                                       EmitBoolExpression (ec, sl.ConditionStart, sLabel, false);
+                                                       EmitBoolExpression (ec, sl.ConditionEnd, sLabel, false);
+                                                       ig.Emit (OpCodes.Br, lLabel);
+                                               } else {
+                                                       Label newLabel = ig.DefineLabel ();
+                                                       EmitBoolExpression (ec, sl.ConditionStart, newLabel, false);
+                                                       EmitBoolExpression (ec, sl.ConditionEnd, newLabel, false);
+                                                       ig.Emit (OpCodes.Br, lLabel);
+                                                       ig.MarkLabel (newLabel);
+                                               }
+                                               break;
+                                       case SwitchLabel.LabelType.Else :
+                                               // Nothing to be done here
+                                               break;
+                                       case SwitchLabel.LabelType.Operator :
+                                               EmitBoolExpression (ec, sl.ConditionLabel, lLabel, true);
+                                               if (labelIndex + 1 == Labels.Count)
+                                                       ig.Emit (OpCodes.Br, sLabel);
+                                               break;
+                                       case SwitchLabel.LabelType.Label :
+                                               EmitBoolExpression (ec, sl.ConditionLabel, lLabel, true);
+                                               if (labelIndex + 1 == Labels.Count)
+                                                       ig.Emit (OpCodes.Br, sLabel);
+                                               break;
+                                       }
+
+                               }
+                               ig.MarkLabel (lLabel);
+                               section.Block.Emit (ec);
+                               ig.MarkLabel (sLabel);
+                       }
 
                        // Restore context state. 
                        ig.MarkLabel (ec.LoopEnd);
@@ -4501,8 +4515,7 @@ namespace Mono.MonoBASIC {
                        //
                        ec.LoopEnd = old_end;
                        ec.Switch = old_switch;
-                       
-                       return all_return;
+                       return true;
                }
        }
 
index 1c29d16dbe5639756efdc2a50ea5ef8af6d5f530..c1ccfc51bc966db0049251ad11233c76f122a6e4 100644 (file)
@@ -3,6 +3,7 @@
 //
 // Author: Miguel de Icaza (miguel@gnu.org)
 //         Ravi Pratap     (ravi@ximian.com)
+//         Manjula GHM     (mmanjula@novell.com)
 //
 // Licensed under the terms of the GNU GPL
 //
@@ -1828,9 +1829,26 @@ public class TypeManager {
                                        t == TypeManager.int32_type ||
                                        t == TypeManager.uint32_type ||
                                        t == TypeManager.int64_type ||
+                                       t == TypeManager.float_type ||
+                                       t == TypeManager.double_type ||
+                                       t == TypeManager.decimal_type ||
                                        t == TypeManager.uint64_type)
                                return t;
-                       throw new Exception ("Unhandled typecode in enum " + " from " + t.AssemblyQualifiedName);
+                       // Following line is commented out to handle case like 
+                       // Module M
+                       // Enum E
+                       //      A
+                       //      B
+                       // End Enum
+                       // Sub Main
+                       //      Dim e1 As E
+                       //      Dim i As Integer
+                       //      e1 = E.A
+                       //      i = e1
+                       // End Sub
+                       // End Module
+
+                       // throw new Exception ("Unhandled typecode in enum " + " from " + t.AssemblyQualifiedName);
                }
                TypeCode tc = Type.GetTypeCode (t);
 
@@ -1855,6 +1873,12 @@ public class TypeManager {
                        return TypeManager.int64_type;
                case TypeCode.UInt64:
                        return TypeManager.uint64_type;
+               case TypeCode.Single:
+                       return TypeManager.float_type;
+               case TypeCode.Double:
+                       return TypeManager.double_type;
+               case TypeCode.Decimal:
+                       return TypeManager.decimal_type;
                }
                throw new Exception ("Unhandled typecode in enum " + tc + " from " + t.AssemblyQualifiedName);
        }
index 6b5852a0d913c7ee0acc0e370a5b1a2bf31354ff..7a6e5f564cf9d444fd864b649aec43028576d039 100644 (file)
@@ -1,3 +1,66 @@
+2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
+
+       * attribute.cs: Use internal MethodBuilder methods to set
+       ExactSpelling and SetLastError on PInvoke methods, instead
+       of passing them via charset.  Fixes #75060.
+
+2005-05-27  Raja R Harinath  <rharinath@novell.com>
+
+       * parameter.cs (Parameter): Remove TODO comment.
+       (Parameter.DefineParameter): Remove Location parameter.
+       (Parameters.LabelParameters): Likewise.
+       * class.cs (Constructor.Emit): Update to change.
+       (MethodData.Emit): Likewise.
+       * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
+       * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
+
+2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * parameter.cs,
+         Removed Parameters.Location and added Parameter.Location instead.
+         Removed Location parameter from Emit() and GetSignature().
+       * anonymous.cs,
+         class.cs,
+         cs-parser.jay,
+         delegate.cs,
+         iterators.cs,
+         statement.cs :
+         Modified all related calls.
+
+2005-05-26  Raja R Harinath  <rharinath@novell.com>
+
+       Improve user-defined conversion handling.
+       * convert.cs (GetConversionOperators): Rewrite.  Return only the
+       applicable operators.
+       (AddConversionOperators): New.  Helper for GetConversionOperators.
+       (FindMostEncompassedType, FindMostEncompassingType): Verify that
+       there is only one most encompassed/encompassing type.
+       (FindMostSpecificSource, FindMostSpecificTarget): Remove
+       "applicable operator" handling.
+       (UserConversion): Move cache here from GetConversionOperators.
+       Directly cache the chosen operator, rather than the whole
+       MethodGroup.
+       (ExplicitNumericConversion): Fix buggy implementation of Decimal
+       case.  Allow conversion of decimal to sbyte and byte too.
+       * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
+       New static methods.  Used to avoid allocating EmptyExpressions in
+       convert.cs.
+
+2005-05-24  Duncan Mak  <duncan@novell.com>
+
+       * ecore.cs (CastFromDecimal): New class for casting a decimal to
+       another class, used in Convert.ExplicitNumericConversion.
+       (CastToDecimal): New class, similar to above, but casts to
+       System.Decimal, used in Convert.ImplicitNumericConversion and also
+       in explicit convesion from double/float to decimal.
+
+       * convert.cs (ImplicitNumericConversion): Handle implicit
+       conversions to System.Decimal.
+       (ExplicitNumericConversion): handle explicit conversions to
+       System.Decimal.
+
+       This fixes #68711.
+       
 2005-05-20  Miguel de Icaza  <miguel@novell.com>
 
        * typemanager.cs (EnumToUnderlying): Do not throw if we do not
index 9bf6cd1890f1b61bf7fe9e7163be4fad90ab67c6..dd6d9028a853efd5af2d6eecf82b3da22878e03c 100644 (file)
@@ -186,7 +186,7 @@ namespace Mono.CSharp {
                                                continue;
                                        fixedpars [j] = new Parameter (
                                                new TypeExpression (invoke_pd.ParameterType (i), loc),
-                                               "+" + j, invoke_pd.ParameterModifier (i), null);
+                                               "+" + j, invoke_pd.ParameterModifier (i), null, loc);
                                        j++;
                                }
                                
@@ -194,10 +194,10 @@ namespace Mono.CSharp {
                                if (params_idx != -1){
                                        variable = new Parameter (
                                                new TypeExpression (invoke_pd.ParameterType (params_idx), loc),
-                                               "+" + params_idx, invoke_pd.ParameterModifier (params_idx), null);
+                                               "+" + params_idx, invoke_pd.ParameterModifier (params_idx), null, loc);
                                }
 
-                               Parameters = new Parameters (fixedpars, variable, loc);
+                               Parameters = new Parameters (fixedpars, variable);
                        }
                        
                        //
@@ -298,7 +298,7 @@ namespace Mono.CSharp {
                        ILGenerator ig = builder.GetILGenerator ();
                        aec.ig = ig;
                        
-                       Parameters.LabelParameters (aec, builder, loc);
+                       Parameters.LabelParameters (aec, builder);
 
                        //
                        // Adjust based on the computed state of the
index 11349d58c24cdd84b80563fa9a25480f67539639..1c0f81d3551507fdb4741641fde32b65d987113b 100644 (file)
@@ -1121,15 +1121,20 @@ namespace Mono.CSharp {
                        string entry_point = name;
                        bool best_fit_mapping = false;
                        bool throw_on_unmappable = false;
+                       bool exact_spelling = false;
+                       bool set_last_error = false;
 
                        bool best_fit_mapping_set = false;
                        bool throw_on_unmappable_set = false;
+                       bool exact_spelling_set = false;
+                       bool set_last_error_set = false;
 
                        MethodInfo set_best_fit = null;
                        MethodInfo set_throw_on = null;
+                       MethodInfo set_exact_spelling = null;
+                       MethodInfo set_set_last_error = null;
 
                        if (field_info_arr != null) {
-                               int char_set_extra = 0;
 
                                for (int i = 0; i < field_info_arr.Length; i++) {
                                        switch (field_info_arr [i].Name) {
@@ -1147,13 +1152,15 @@ namespace Mono.CSharp {
                                                        entry_point = (string) field_values_arr [i];
                                                        break;
                                                case "ExactSpelling":
-                                                       char_set_extra |= 0x01;
+                                                       exact_spelling = (bool) field_values_arr [i];
+                                                       exact_spelling_set = true;
                                                        break;
                                                case "PreserveSig":
                                                        preserve_sig = (bool) field_values_arr [i];
                                                        break;
                                                case "SetLastError":
-                                                       char_set_extra |= 0x40;
+                                                       set_last_error = (bool) field_values_arr [i];
+                                                       set_last_error_set = true;
                                                        break;
                                                case "ThrowOnUnmappableChar":
                                                        throw_on_unmappable = (bool) field_values_arr [i];
@@ -1163,16 +1170,17 @@ namespace Mono.CSharp {
                                                        throw new InternalErrorException (field_info_arr [i].ToString ());
                                        }
                                }
-                               charset |= (CharSet)char_set_extra;
                        }
 
-                       if (throw_on_unmappable_set || best_fit_mapping_set) {
+                       if (throw_on_unmappable_set || best_fit_mapping_set || exact_spelling_set || set_last_error_set) {
                                set_best_fit = typeof (MethodBuilder).GetMethod ("set_BestFitMapping", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                                set_throw_on = typeof (MethodBuilder).GetMethod ("set_ThrowOnUnmappableChar", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+                               set_exact_spelling = typeof (MethodBuilder).GetMethod ("set_ExactSpelling", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+                               set_set_last_error = typeof (MethodBuilder).GetMethod ("set_SetLastError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
 
-                               if ((set_best_fit == null) || (set_throw_on == null)) {
+                               if ((set_best_fit == null) || (set_throw_on == null) || (set_exact_spelling == null) || (set_set_last_error == null)) {
                                        Report.Error (-1, Location,
-                                                                 "The ThrowOnUnmappableChar and BestFitMapping attributes can only be emitted when running on the mono runtime.");
+                                                                 "The ThrowOnUnmappableChar, BestFitMapping, SetLastError, and ExactSpelling attributes can only be emitted when running on the mono runtime.");
                                        return null;
                                }
                        }
@@ -1189,6 +1197,10 @@ namespace Mono.CSharp {
                                        set_throw_on.Invoke (mb, 0, null, new object [] { throw_on_unmappable }, null);
                                if (best_fit_mapping_set)
                                        set_best_fit.Invoke (mb, 0, null, new object [] { best_fit_mapping }, null);
+                               if (exact_spelling_set)
+                                       set_exact_spelling.Invoke  (mb, 0, null, new object [] { exact_spelling }, null);
+                               if (set_last_error_set)
+                                       set_set_last_error.Invoke  (mb, 0, null, new object [] { set_last_error }, null);
                        
                                return mb;
                        }
index fa8f65c24bad29f9554432069ebb0d311e5e0079..34b1a3b0b5d8686ac91b12e49fb8da6a32d7826c 100644 (file)
@@ -4386,7 +4386,7 @@ namespace Mono.CSharp {
                                ec.IsStatic = false;
                        }
 
-                       Parameters.LabelParameters (ec, ConstructorBuilder, Location);
+                       Parameters.LabelParameters (ec, ConstructorBuilder);
                        
                        SourceMethod source = SourceMethod.Create (
                                Parent, ConstructorBuilder, block);
@@ -4785,7 +4785,7 @@ namespace Mono.CSharp {
                                OptAttributes.Emit (ec, kind);
 
                        if (member is MethodCore)
-                               ((MethodCore) member).Parameters.LabelParameters (ec, MethodBuilder, loc);
+                               ((MethodCore) member).Parameters.LabelParameters (ec, MethodBuilder);
 
                        ToplevelBlock block = method.Block;
                        
@@ -5983,7 +5983,7 @@ namespace Mono.CSharp {
                        {
                                if (a.Target == AttributeTargets.Parameter) {
                                        if (param_attr == null)
-                                               param_attr = new ImplicitParameter (method_data.MethodBuilder);
+                                               param_attr = new ImplicitParameter (method_data.MethodBuilder, method.Location);
 
                                        param_attr.ApplyAttributeBuilder (a, cb);
                                        return;
@@ -5995,8 +5995,8 @@ namespace Mono.CSharp {
                        protected virtual InternalParameters GetParameterInfo (EmitContext ec)
                        {
                                Parameter [] parms = new Parameter [1];
-                               parms [0] = new Parameter (method.Type, "value", Parameter.Modifier.NONE, null);
-                               Parameters parameters = new Parameters (parms, null, method.Location);
+                               parms [0] = new Parameter (method.Type, "value", Parameter.Modifier.NONE, null, method.Location);
+                               Parameters parameters = new Parameters (parms, null);
 
                                bool old_unsafe = ec.InUnsafe;
                                ec.InUnsafe = InUnsafe;
@@ -6781,7 +6781,7 @@ namespace Mono.CSharp {
                        {
                                if (a.Target == AttributeTargets.Parameter) {
                                        if (param_attr == null)
-                                               param_attr = new ImplicitParameter (method_data.MethodBuilder);
+                                               param_attr = new ImplicitParameter (method_data.MethodBuilder, method.Location);
 
                                        param_attr.ApplyAttributeBuilder (a, cb);
                                        return;
@@ -6965,8 +6965,8 @@ namespace Mono.CSharp {
                        ec.InUnsafe = InUnsafe;
 
                        Parameter [] parms = new Parameter [1];
-                       parms [0] = new Parameter (Type, "value", Parameter.Modifier.NONE, null);
-                       Parameters parameters = new Parameters (parms, null, Location);
+                       parms [0] = new Parameter (Type, "value", Parameter.Modifier.NONE, null, Location);
+                       Parameters parameters = new Parameters (parms, null);
                        Type [] types = parameters.GetParameterInfo (ec);
                        InternalParameters ip = new InternalParameters (types, parameters);
 
@@ -7130,9 +7130,9 @@ namespace Mono.CSharp {
 
                                fixed_parms.CopyTo (tmp, 0);
                                tmp [fixed_parms.Length] = new Parameter (
-                                       method.Type, "value", Parameter.Modifier.NONE, null);
+                                       method.Type, "value", Parameter.Modifier.NONE, null, method.Location);
 
-                               Parameters set_formal_params = new Parameters (tmp, null, method.Location);
+                               Parameters set_formal_params = new Parameters (tmp, null);
                                Type [] types = set_formal_params.GetParameterInfo (ec);
                                
                                return new InternalParameters (types, set_formal_params);
index e96b796ad77537bda93e2d119dc70775989b8564..16af2c3ad812cf5f5a97594522d044be583a401d 100644 (file)
@@ -303,7 +303,7 @@ namespace Mono.CSharp {
 
                        if (expr_type == TypeManager.sbyte_type){
                                //
-                               // From sbyte to short, int, long, float, double.
+                               // From sbyte to short, int, long, float, double, decimal
                                //
                                if (real_target_type == TypeManager.int32_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_I4);
@@ -315,9 +315,11 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
                                if (real_target_type == TypeManager.short_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_I2);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.byte_type){
                                //
-                               // From byte to short, ushort, int, uint, long, ulong, float, double
+                               // From byte to short, ushort, int, uint, long, ulong, float, double, decimal
                                // 
                                if ((real_target_type == TypeManager.short_type) ||
                                    (real_target_type == TypeManager.ushort_type) ||
@@ -333,9 +335,12 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
                                if (real_target_type == TypeManager.double_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
+                               
                        } else if (expr_type == TypeManager.short_type){
                                //
-                               // From short to int, long, float, double
+                               // From short to int, long, float, double, decimal
                                // 
                                if (real_target_type == TypeManager.int32_type)
                                        return new EmptyCast (expr, target_type);
@@ -345,9 +350,12 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
                                if (real_target_type == TypeManager.float_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
+                               
                        } else if (expr_type == TypeManager.ushort_type){
                                //
-                               // From ushort to int, uint, long, ulong, float, double
+                               // From ushort to int, uint, long, ulong, float, double, decimal
                                //
                                if (real_target_type == TypeManager.uint32_type)
                                        return new EmptyCast (expr, target_type);
@@ -362,9 +370,11 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
                                if (real_target_type == TypeManager.float_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.int32_type){
                                //
-                               // From int to long, float, double
+                               // From int to long, float, double, decimal
                                //
                                if (real_target_type == TypeManager.int64_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_I8);
@@ -372,9 +382,11 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
                                if (real_target_type == TypeManager.float_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.uint32_type){
                                //
-                               // From uint to long, ulong, float, double
+                               // From uint to long, ulong, float, double, decimal
                                //
                                if (real_target_type == TypeManager.int64_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_U8);
@@ -386,6 +398,8 @@ namespace Mono.CSharp {
                                if (real_target_type == TypeManager.float_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R_Un,
                                                               OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.int64_type){
                                //
                                // From long/ulong to float, double
@@ -393,7 +407,9 @@ namespace Mono.CSharp {
                                if (real_target_type == TypeManager.double_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
                                if (real_target_type == TypeManager.float_type)
-                                       return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);     
+                                       return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.uint64_type){
                                //
                                // From ulong to float, double
@@ -403,10 +419,12 @@ namespace Mono.CSharp {
                                                               OpCodes.Conv_R8);
                                if (real_target_type == TypeManager.float_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R_Un,
-                                                              OpCodes.Conv_R4);        
+                                                              OpCodes.Conv_R4);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.char_type){
                                //
-                               // From char to ushort, int, uint, long, ulong, float, double
+                               // From char to ushort, int, uint, long, ulong, float, double, decimal
                                // 
                                if ((real_target_type == TypeManager.ushort_type) ||
                                    (real_target_type == TypeManager.int32_type) ||
@@ -420,6 +438,8 @@ namespace Mono.CSharp {
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R4);
                                if (real_target_type == TypeManager.double_type)
                                        return new OpcodeCast (expr, target_type, OpCodes.Conv_R8);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr);
                        } else if (expr_type == TypeManager.float_type){
                                //
                                // float to double
@@ -477,7 +497,7 @@ namespace Mono.CSharp {
 
                        if (expr_type == TypeManager.sbyte_type){
                                //
-                               // From sbyte to short, int, long, float, double.
+                               // From sbyte to short, int, long, float, double, decimal
                                //
                                if ((target_type == TypeManager.int32_type) || 
                                    (target_type == TypeManager.int64_type) ||
@@ -489,7 +509,7 @@ namespace Mono.CSharp {
                                
                        } else if (expr_type == TypeManager.byte_type){
                                //
-                               // From byte to short, ushort, int, uint, long, ulong, float, double
+                               // From byte to short, ushort, int, uint, long, ulong, float, double, decimal
                                // 
                                if ((target_type == TypeManager.short_type) ||
                                    (target_type == TypeManager.ushort_type) ||
@@ -504,7 +524,7 @@ namespace Mono.CSharp {
        
                        } else if (expr_type == TypeManager.short_type){
                                //
-                               // From short to int, long, float, double
+                               // From short to int, long, double, float, decimal
                                // 
                                if ((target_type == TypeManager.int32_type) ||
                                    (target_type == TypeManager.int64_type) ||
@@ -515,7 +535,7 @@ namespace Mono.CSharp {
                                        
                        } else if (expr_type == TypeManager.ushort_type){
                                //
-                               // From ushort to int, uint, long, ulong, float, double
+                               // From ushort to int, uint, long, ulong, double, float, decimal
                                //
                                if ((target_type == TypeManager.uint32_type) ||
                                    (target_type == TypeManager.uint64_type) ||
@@ -528,7 +548,7 @@ namespace Mono.CSharp {
                                    
                        } else if (expr_type == TypeManager.int32_type){
                                //
-                               // From int to long, float, double
+                               // From int to long, double, float, decimal
                                //
                                if ((target_type == TypeManager.int64_type) ||
                                    (target_type == TypeManager.double_type) ||
@@ -538,7 +558,7 @@ namespace Mono.CSharp {
                                        
                        } else if (expr_type == TypeManager.uint32_type){
                                //
-                               // From uint to long, ulong, float, double
+                               // From uint to long, ulong, double, float, decimal
                                //
                                if ((target_type == TypeManager.int64_type) ||
                                    (target_type == TypeManager.uint64_type) ||
@@ -550,7 +570,7 @@ namespace Mono.CSharp {
                        } else if ((expr_type == TypeManager.uint64_type) ||
                                   (expr_type == TypeManager.int64_type)) {
                                //
-                               // From long/ulong to float, double
+                               // From long/ulong to double, float, decimal
                                //
                                if ((target_type == TypeManager.double_type) ||
                                    (target_type == TypeManager.float_type) ||
@@ -559,7 +579,7 @@ namespace Mono.CSharp {
                                    
                        } else if (expr_type == TypeManager.char_type){
                                //
-                               // From char to ushort, int, uint, long, ulong, float, double
+                               // From char to ushort, int, uint, ulong, long, float, double, decimal
                                // 
                                if ((target_type == TypeManager.ushort_type) ||
                                    (target_type == TypeManager.int32_type) ||
@@ -676,13 +696,6 @@ namespace Mono.CSharp {
                        return false;
                }
 
-               //
-               // Used internally by FindMostEncompassedType, this is used
-               // to avoid creating lots of objects in the tight loop inside
-               // FindMostEncompassedType
-               //
-               static EmptyExpression priv_fmet_param;
-               
                /// <summary>
                ///  Finds "most encompassed type" according to the spec (13.4.2)
                ///  amongst the methods in the MethodGroupExpr
@@ -691,31 +704,34 @@ namespace Mono.CSharp {
                {
                        Type best = null;
 
-                       if (priv_fmet_param == null)
-                               priv_fmet_param = new EmptyExpression ();
+                       EmptyExpression expr = EmptyExpression.Grab ();
 
-                       foreach (Type t in types){
-                               priv_fmet_param.SetType (t);
-                               
+                       foreach (Type t in types) {
                                if (best == null) {
                                        best = t;
                                        continue;
                                }
-                               
-                               if (ImplicitStandardConversionExists (ec, priv_fmet_param, best))
+
+                               expr.SetType (t);
+                               if (ImplicitStandardConversionExists (ec, expr, best))
                                        best = t;
                        }
 
+                       expr.SetType (best);
+                       foreach (Type t in types) {
+                               if (best == t)
+                                       continue;
+                               if (!ImplicitStandardConversionExists (ec, expr, t)) {
+                                       best = null;
+                                       break;
+                               }
+                       }
+
+                       EmptyExpression.Release (expr);
+
                        return best;
                }
-
-               //
-               // Used internally by FindMostEncompassingType, this is used
-               // to avoid creating lots of objects in the tight loop inside
-               // FindMostEncompassingType
-               //
-               static EmptyExpression priv_fmee_ret;
-               
+       
                /// <summary>
                ///  Finds "most encompassing type" according to the spec (13.4.2)
                ///  amongst the types in the given set
@@ -724,77 +740,57 @@ namespace Mono.CSharp {
                {
                        Type best = null;
 
-                       if (priv_fmee_ret == null)
-                               priv_fmee_ret = new EmptyExpression ();
-
-                       foreach (Type t in types){
-                               priv_fmee_ret.SetType (best);
+                       EmptyExpression expr = EmptyExpression.Grab ();
 
+                       foreach (Type t in types) {
                                if (best == null) {
                                        best = t;
                                        continue;
                                }
 
-                               if (ImplicitStandardConversionExists (ec, priv_fmee_ret, t))
+                               expr.SetType (best);
+                               if (ImplicitStandardConversionExists (ec, expr, t))
                                        best = t;
                        }
-                       
+
+                       foreach (Type t in types) {
+                               if (best == t)
+                                       continue;
+                               expr.SetType (t);
+                               if (!ImplicitStandardConversionExists (ec, expr, best)) {
+                                       best = null;
+                                       break;
+                               }
+                       }
+
+                       EmptyExpression.Release (expr);
+
                        return best;
                }
 
-               //
-               // Used to avoid creating too many objects
-               //
-               static EmptyExpression priv_fms_expr;
-               
                /// <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 public Type FindMostSpecificSource (EmitContext ec, MethodGroupExpr me,
+               static public Type FindMostSpecificSource (EmitContext ec, IList list,
                                                           Expression source, bool apply_explicit_conv_rules,
                                                           Location loc)
                {
                        ArrayList src_types_set = new ArrayList ();
                        
-                       if (priv_fms_expr == null)
-                               priv_fms_expr = new EmptyExpression ();
-
                        //
                        // If any operator converts from S then Sx = S
                        //
                        Type source_type = source.Type;
-                       foreach (MethodBase mb in me.Methods){
+                       foreach (MethodBase mb in list){
                                ParameterData pd = TypeManager.GetParameterData (mb);
                                Type param_type = pd.ParameterType (0);
 
                                if (param_type == source_type)
                                        return param_type;
 
-                               if (apply_explicit_conv_rules) {
-                                       //
-                                       // From the spec :
-                                       // Find the set of applicable user-defined conversion operators, U.  This set
-                                       // consists of the
-                                       // user-defined implicit or explicit conversion operators declared by
-                                       // the classes or structs in D that convert from a type encompassing
-                                       // or encompassed by S to a type encompassing or encompassed by T
-                                       //
-                                       priv_fms_expr.SetType (param_type);
-                                       if (ImplicitStandardConversionExists (ec, priv_fms_expr, source_type))
-                                               src_types_set.Add (param_type);
-                                       else {
-                                               if (ImplicitStandardConversionExists (ec, source, param_type))
-                                                       src_types_set.Add (param_type);
-                                       }
-                               } else {
-                                       //
-                                       // Only if S is encompassed by param_type
-                                       //
-                                       if (ImplicitStandardConversionExists (ec, source, param_type))
-                                               src_types_set.Add (param_type);
-                               }
+                               src_types_set.Add (param_type);
                        }
                        
                        //
@@ -829,50 +825,21 @@ namespace Mono.CSharp {
                /// <summary>
                ///  Finds the most specific target Tx according to section 13.4.4
                /// </summary>
-               static public Type FindMostSpecificTarget (EmitContext ec, MethodGroupExpr me,
+               static public Type FindMostSpecificTarget (EmitContext ec, IList list,
                                                           Type target, bool apply_explicit_conv_rules,
                                                           Location loc)
                {
                        ArrayList tgt_types_set = new ArrayList ();
                        
-                       if (priv_fmt_expr == null)
-                               priv_fmt_expr = new EmptyExpression ();
-                       
                        //
                        // If any operator converts to T then Tx = T
                        //
-                       foreach (MethodInfo mi in me.Methods){
+                       foreach (MethodInfo mi in list){
                                Type ret_type = mi.ReturnType;
-
                                if (ret_type == target)
                                        return ret_type;
 
-                               if (apply_explicit_conv_rules) {
-                                       //
-                                       // From the spec :
-                                       // Find the set of applicable user-defined conversion operators, U.
-                                       //
-                                       // This set consists of the
-                                       // user-defined implicit or explicit conversion operators declared by
-                                       // the classes or structs in D that convert from a type encompassing
-                                       // or encompassed by S to a type encompassing or encompassed by T
-                                       //
-                                       priv_fms_expr.SetType (ret_type);
-                                       if (ImplicitStandardConversionExists (ec, priv_fms_expr, target))
-                                               tgt_types_set.Add (ret_type);
-                                       else {
-                                               priv_fms_expr.SetType (target);
-                                               if (ImplicitStandardConversionExists (ec, priv_fms_expr, ret_type))
-                                                       tgt_types_set.Add (ret_type);
-                                       }
-                               } else {
-                                       //
-                                       // Only if T is encompassed by param_type
-                                       //
-                                       priv_fms_expr.SetType (ret_type);
-                                       if (ImplicitStandardConversionExists (ec, priv_fms_expr, target))
-                                               tgt_types_set.Add (ret_type);
-                               }
+                               tgt_types_set.Add (ret_type);
                        }
 
                        //
@@ -881,13 +848,17 @@ namespace Mono.CSharp {
                        if (apply_explicit_conv_rules) {
                                ArrayList candidate_set = new ArrayList ();
 
+                               EmptyExpression expr = EmptyExpression.Grab ();
+
                                foreach (Type ret_type in tgt_types_set){
-                                       priv_fmt_expr.SetType (ret_type);
+                                       expr.SetType (ret_type);
                                        
-                                       if (ImplicitStandardConversionExists (ec, priv_fmt_expr, target))
+                                       if (ImplicitStandardConversionExists (ec, expr, target))
                                                candidate_set.Add (ret_type);
                                }
 
+                               EmptyExpression.Release (expr);
+
                                if (candidate_set.Count != 0)
                                        return FindMostEncompassingType (ec, candidate_set);
                        }
@@ -919,82 +890,90 @@ namespace Mono.CSharp {
                        return UserDefinedConversion (ec, source, target, loc, true);
                }
 
-               static DoubleHash explicit_conv = new DoubleHash (100);
-               static DoubleHash implicit_conv = new DoubleHash (100);
+               static void AddConversionOperators (EmitContext ec, ArrayList list, 
+                                                   Expression source, Type target_type, 
+                                                   bool look_for_explicit,
+                                                   MethodGroupExpr mg)
+               {
+                       if (mg == null)
+                               return;
+
+                       Type source_type = source.Type;
+                       EmptyExpression expr = EmptyExpression.Grab ();
+                       foreach (MethodInfo m in mg.Methods) {
+                               ParameterData pd = TypeManager.GetParameterData (m);
+                               Type return_type = m.ReturnType;
+                               Type arg_type = pd.ParameterType (0);
+
+                               if (source_type != arg_type) {
+                                       if (!ImplicitStandardConversionExists (ec, source, arg_type)) {
+                                               if (!look_for_explicit)
+                                                       continue;
+                                               expr.SetType (arg_type);
+                                               if (!ImplicitStandardConversionExists (ec, expr, source_type))
+                                                       continue;
+                                       }
+                               }
+
+                               if (target_type != return_type) {
+                                       expr.SetType (return_type);
+                                       if (!ImplicitStandardConversionExists (ec, expr, target_type)) {
+                                               if (!look_for_explicit)
+                                                       continue;
+                                               expr.SetType (target_type);
+                                               if (!ImplicitStandardConversionExists (ec, expr, return_type))
+                                                       continue;
+                                       }
+                               }
+
+                               list.Add (m);
+                       }
+
+                       EmptyExpression.Release (expr);
+               }
+
                /// <summary>
-               ///   Computes the MethodGroup for the user-defined conversion
+               ///   Computes the list of the user-defined conversion
                ///   operators from source_type to target_type.  `look_for_explicit'
                ///   controls whether we should also include the list of explicit
                ///   operators
                /// </summary>
-               static MethodGroupExpr GetConversionOperators (EmitContext ec,
-                                                              Type source_type, Type target_type,
-                                                              Location loc, bool look_for_explicit)
+               static IList GetConversionOperators (EmitContext ec,
+                                                    Expression source, Type target_type,
+                                                    Location loc, bool look_for_explicit)
                {
-                       Expression mg1 = null, mg2 = null;
-                       Expression mg5 = null, mg6 = null, mg7 = null, mg8 = null;
-                       string op_name;
+                       ArrayList ret = new ArrayList (4);
 
-                       op_name = "op_Implicit";
-
-                       MethodGroupExpr union3;
-                       object r;
-                       if ((look_for_explicit ? explicit_conv : implicit_conv).Lookup (source_type, target_type, out r))
-                               return (MethodGroupExpr) r;
-                       
-                       mg1 = Expression.MethodLookup (ec, source_type, op_name, loc);
-                       if (source_type.BaseType != null)
-                               mg2 = Expression.MethodLookup (ec, source_type.BaseType, op_name, loc);
-
-                       if (mg1 == null)
-                               union3 = (MethodGroupExpr) mg2;
-                       else if (mg2 == null)
-                               union3 = (MethodGroupExpr) mg1;
-                       else
-                               union3 = Invocation.MakeUnionSet (mg1, mg2, loc);
+                       Type source_type = source.Type;
 
-                       mg1 = Expression.MethodLookup (ec, target_type, op_name, loc);
-                       if (mg1 != null){
-                               if (union3 != null)
-                                       union3 = Invocation.MakeUnionSet (union3, mg1, loc);
-                               else
-                                       union3 = (MethodGroupExpr) mg1;
+                       if (source_type != TypeManager.decimal_type) {
+                               AddConversionOperators (ec, ret, source, target_type, look_for_explicit,
+                                       Expression.MethodLookup (
+                                               ec, source_type, "op_Implicit", loc) as MethodGroupExpr);
+                               if (look_for_explicit) {
+                                       AddConversionOperators (ec, ret, source, target_type, look_for_explicit,
+                                               Expression.MethodLookup (
+                                                       ec, source_type, "op_Explicit", loc) as MethodGroupExpr);
+                               }
                        }
 
-                       if (target_type.BaseType != null)
-                               mg1 = Expression.MethodLookup (ec, target_type.BaseType, op_name, loc);
-                       
-                       if (mg1 != null){
-                               if (union3 != null)
-                                       union3 = Invocation.MakeUnionSet (union3, mg1, loc);
-                               else
-                                       union3 = (MethodGroupExpr) mg1;
+                       if (target_type != TypeManager.decimal_type) {
+                               AddConversionOperators (ec, ret, source, target_type, look_for_explicit,
+                                       Expression.MethodLookup (
+                                               ec, target_type, "op_Implicit", loc) as MethodGroupExpr);
+                               if (look_for_explicit) {
+                                       AddConversionOperators (ec, ret, source, target_type, look_for_explicit,
+                                               Expression.MethodLookup (
+                                                       ec, target_type, "op_Explicit", loc) as MethodGroupExpr);
+                               }
                        }
 
-                       MethodGroupExpr union4 = null;
-
-                       if (look_for_explicit) {
-                               op_name = "op_Explicit";
-
-                               mg5 = Expression.MemberLookup (ec, source_type, op_name, loc);
-                               if (source_type.BaseType != null)
-                                       mg6 = Expression.MethodLookup (ec, source_type.BaseType, op_name, loc);
-                               
-                               mg7 = Expression.MemberLookup (ec, target_type, op_name, loc);
-                               if (target_type.BaseType != null)
-                                       mg8 = Expression.MethodLookup (ec, target_type.BaseType, op_name, loc);
-                               
-                               MethodGroupExpr union5 = Invocation.MakeUnionSet (mg5, mg6, loc);
-                               MethodGroupExpr union6 = Invocation.MakeUnionSet (mg7, mg8, loc);
-
-                               union4 = Invocation.MakeUnionSet (union5, union6, loc);
-                       }
-                       
-                       MethodGroupExpr ret = Invocation.MakeUnionSet (union3, union4, loc);
-                       (look_for_explicit ? explicit_conv : implicit_conv).Insert (source_type, target_type, ret);
                        return ret;
                }
-               
+
+               static DoubleHash explicit_conv = new DoubleHash (100);
+               static DoubleHash implicit_conv = new DoubleHash (100);
+
                /// <summary>
                ///   User-defined conversions
                /// </summary>
@@ -1002,42 +981,62 @@ namespace Mono.CSharp {
                                                                Type target, Location loc,
                                                                bool look_for_explicit)
                {
-                       MethodGroupExpr union;
                        Type source_type = source.Type;
-                       MethodBase method = null;
-
-                       union = GetConversionOperators (ec, source_type, target, loc, look_for_explicit);
-                       if (union == null)
-                               return null;
-                       
-                       Type most_specific_source, most_specific_target;
-
-                       most_specific_source = FindMostSpecificSource (ec, union, source, look_for_explicit, loc);
-                       if (most_specific_source == null)
-                               return null;
-
-                       most_specific_target = FindMostSpecificTarget (ec, union, target, look_for_explicit, loc);
-                       if (most_specific_target == null) 
-                               return null;
-
-                       int count = 0;
-
-                       
-                       foreach (MethodBase mb in union.Methods){
-                               ParameterData pd = TypeManager.GetParameterData (mb);
-                               MethodInfo mi = (MethodInfo) mb;
+                       MethodInfo method = null;
+                       Type most_specific_source = null;
+                       Type most_specific_target = null;
+
+                       object o;
+                       DoubleHash hash = look_for_explicit ? explicit_conv : implicit_conv;
+
+                       if (!(source is Constant) && hash.Lookup (source_type, target, out o)) {
+                               method = (MethodInfo) o;
+                               if (method != null) {
+                                       ParameterData pd = TypeManager.GetParameterData (method);
+                                       most_specific_source = pd.ParameterType (0);
+                                       most_specific_target = method.ReturnType;
+                               }
+                       } else {
+                               IList ops = GetConversionOperators (ec, source, target, loc, look_for_explicit);
+                               if (ops == null || ops.Count == 0) {
+                                       method = null;
+                                       goto skip;
+                               }
+                                       
+                               most_specific_source = FindMostSpecificSource (ec, ops, source, look_for_explicit, loc);
+                               if (most_specific_source == null) {
+                                       method = null;
+                                       goto skip;
+                               }
                                
-                               if (pd.ParameterType (0) == most_specific_source &&
-                                   mi.ReturnType == most_specific_target) {
-                                       method = mb;
-                                       count++;
+                               most_specific_target = FindMostSpecificTarget (ec, ops, target, look_for_explicit, loc);
+                               if (most_specific_target == null) {
+                                       method = null;
+                                       goto skip;
                                }
+                               
+                               int count = 0;
+                               
+                               foreach (MethodInfo m in ops) {
+                                       ParameterData pd = TypeManager.GetParameterData (m);
+                                       
+                                       if (pd.ParameterType (0) == most_specific_source &&
+                                           m.ReturnType == most_specific_target) {
+                                               method = m;
+                                               count++;
+                                       }
+                               }
+                               if (count > 1)
+                                       method = null;
+                               
+                       skip:
+                               if (!(source is Constant))
+                                       hash.Insert (source_type, target, method);
                        }
-                       
-                       if (method == null || count > 1)
+
+                       if (method == null)
                                return null;
                        
-                       
                        //
                        // This will do the conversion to the best match that we
                        // found.  Now we need to perform an implict standard conversion
@@ -1053,7 +1052,7 @@ namespace Mono.CSharp {
                                return null;
 
                        Expression e;
-                       e =  new UserCast ((MethodInfo) method, source, loc);
+                       e =  new UserCast (method, source, loc);
                        if (e.Type != target){
                                if (!look_for_explicit)
                                        e = ImplicitConversionStandard (ec, e, target, loc);
@@ -1496,9 +1495,11 @@ namespace Mono.CSharp {
                                        return new ConvCast (ec, expr, target_type, ConvCast.Mode.R4_U8);
                                if (real_target_type == TypeManager.char_type)
                                        return new ConvCast (ec, expr, target_type, ConvCast.Mode.R4_CH);
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr, true);
                        } else if (expr_type == TypeManager.double_type){
                                //
-                               // From double to byte, byte, short,
+                               // From double to sbyte, byte, short,
                                // ushort, int, uint, long, ulong,
                                // char, float or decimal
                                //
@@ -1522,10 +1523,26 @@ namespace Mono.CSharp {
                                        return new ConvCast (ec, expr, target_type, ConvCast.Mode.R8_CH);
                                if (real_target_type == TypeManager.float_type)
                                        return new ConvCast (ec, expr, target_type, ConvCast.Mode.R8_R4);
-                       } 
-
-                       // decimal is taken care of by the op_Explicit methods.
-
+                               if (real_target_type == TypeManager.decimal_type)
+                                       return new CastToDecimal (ec, expr, true);
+                       } else if (expr_type == TypeManager.decimal_type) {
+                               //
+                               // From decimal to sbyte, byte, short, ushort, int, uint,
+                               // long, ulong, char, double or float
+                               //
+                               if (real_target_type == TypeManager.sbyte_type ||
+                                   real_target_type == TypeManager.byte_type ||
+                                   real_target_type == TypeManager.short_type ||
+                                   real_target_type == TypeManager.ushort_type ||
+                                   real_target_type == TypeManager.int32_type ||
+                                   real_target_type == TypeManager.uint32_type ||
+                                   real_target_type == TypeManager.int64_type ||
+                                   real_target_type == TypeManager.uint64_type ||
+                                   real_target_type == TypeManager.char_type ||
+                                   real_target_type == TypeManager.double_type ||
+                                   real_target_type == TypeManager.float_type)
+                                       return new CastFromDecimal (ec, expr, target_type);
+                       }
                        return null;
                }
 
@@ -1858,7 +1875,7 @@ namespace Mono.CSharp {
                                              TypeManager.CSharpName (target_type) + "'");
                                return null;
                        }
-                               
+
                        Error_CannotConvertType (loc, original_expr_type, target_type);
                        return null;
                }
index ff495c5140b37468ffd947bc1e411077dc832366..f41682058da05578c88f2a1ac59b1730f470cfd2 100644 (file)
@@ -1135,7 +1135,7 @@ formal_parameter_list
                Parameter [] pars = new Parameter [pars_list.Count];
                pars_list.CopyTo (pars);
 
-               $$ = new Parameters (pars, null, lexer.Location); 
+               $$ = new Parameters (pars, null); 
          } 
        | fixed_parameters COMMA parameter_array
          {
@@ -1144,7 +1144,7 @@ formal_parameter_list
                Parameter [] pars = new Parameter [pars_list.Count];
                pars_list.CopyTo (pars);
 
-               $$ = new Parameters (pars, (Parameter) $3, lexer.Location); 
+               $$ = new Parameters (pars, (Parameter) $3); 
          }
        | fixed_parameters COMMA ARGLIST
          {
@@ -1153,7 +1153,7 @@ formal_parameter_list
                Parameter [] pars = new Parameter [pars_list.Count];
                pars_list.CopyTo (pars);
 
-               $$ = new Parameters (pars, true, lexer.Location);
+               $$ = new Parameters (pars, true);
          }
        | parameter_array COMMA fixed_parameters
          {
@@ -1167,11 +1167,11 @@ formal_parameter_list
          }
        | parameter_array 
          {
-               $$ = new Parameters (null, (Parameter) $1, lexer.Location);
+               $$ = new Parameters (null, (Parameter) $1);
          }
        | ARGLIST
          {
-               $$ = new Parameters (null, true, lexer.Location);
+               $$ = new Parameters (null, true);
          }
        ;
 
@@ -1198,7 +1198,7 @@ fixed_parameter
          type
          IDENTIFIER
          {
-               $$ = new Parameter ((Expression) $3, (string) $4, (Parameter.Modifier) $2, (Attributes) $1);
+               $$ = new Parameter ((Expression) $3, (string) $4, (Parameter.Modifier) $2, (Attributes) $1, lexer.Location);
          }
        | opt_attributes
          opt_parameter_modifier
@@ -1247,7 +1247,7 @@ parameter_modifier
 parameter_array
        : opt_attributes PARAMS type IDENTIFIER
          { 
-               $$ = new Parameter ((Expression) $3, (string) $4, Parameter.Modifier.PARAMS, (Attributes) $1);
+               $$ = new Parameter ((Expression) $3, (string) $4, Parameter.Modifier.PARAMS, (Attributes) $1, lexer.Location);
                note ("type must be a single-dimension array type"); 
          }
        | opt_attributes PARAMS parameter_modifier type IDENTIFIER 
@@ -1375,12 +1375,12 @@ set_accessor_declaration
                Parameter [] args;
                Parameter implicit_value_parameter = new Parameter (
                        implicit_value_parameter_type, "value", 
-                       Parameter.Modifier.NONE, null);
+                       Parameter.Modifier.NONE, null, lexer.Location);
 
                if (parsing_indexer == false) {
                        args  = new Parameter [1];
                        args [0] = implicit_value_parameter;
-                       current_local_parameters = new Parameters (args, null, lexer.Location);
+                       current_local_parameters = new Parameters (args, null);
                } else {
                        Parameter [] fpars = indexer_parameters.FixedParameters;
 
@@ -1393,7 +1393,7 @@ set_accessor_declaration
                        } else 
                                args = null;
                        current_local_parameters = new Parameters (
-                               args, indexer_parameters.ArrayParameter, lexer.Location);
+                               args, indexer_parameters.ArrayParameter);
                }
                
                lexer.PropertyParsing = false;
@@ -1727,13 +1727,13 @@ operator_declaration
                
                Parameter [] param_list = new Parameter [decl.arg2type != null ? 2 : 1];
 
-               param_list[0] = new Parameter (decl.arg1type, decl.arg1name, Parameter.Modifier.NONE, null);
+               param_list[0] = new Parameter (decl.arg1type, decl.arg1name, Parameter.Modifier.NONE, null, decl.location);
                if (decl.arg2type != null)
-                       param_list[1] = new Parameter (decl.arg2type, decl.arg2name, Parameter.Modifier.NONE, null);
+                       param_list[1] = new Parameter (decl.arg2type, decl.arg2name, Parameter.Modifier.NONE, null, decl.location);
 
                Operator op = new Operator (
                        current_class, decl.optype, decl.ret_type, (int) $2, 
-                       new Parameters (param_list, null, decl.location),
+                       new Parameters (param_list, null),
                        (ToplevelBlock) $5, (Attributes) $1, decl.location);
 
                if (RootContext.Documentation != null) {
@@ -1772,9 +1772,9 @@ operator_declarator
                Parameter [] pars = new Parameter [1];
                Expression type = (Expression) $5;
 
-               pars [0] = new Parameter (type, (string) $6, Parameter.Modifier.NONE, null);
+               pars [0] = new Parameter (type, (string) $6, Parameter.Modifier.NONE, null, lexer.Location);
 
-               current_local_parameters = new Parameters (pars, null, lexer.Location);
+               current_local_parameters = new Parameters (pars, null);
 
                if (RootContext.Documentation != null) {
                        tmpComment = Lexer.consume_doc_comment ();
@@ -1797,10 +1797,10 @@ operator_declarator
                Expression typeL = (Expression) $5;
                Expression typeR = (Expression) $8;
 
-              pars [0] = new Parameter (typeL, (string) $6, Parameter.Modifier.NONE, null);
-              pars [1] = new Parameter (typeR, (string) $9, Parameter.Modifier.NONE, null);
+              pars [0] = new Parameter (typeL, (string) $6, Parameter.Modifier.NONE, null, lexer.Location);
+              pars [1] = new Parameter (typeR, (string) $9, Parameter.Modifier.NONE, null, lexer.Location);
 
-              current_local_parameters = new Parameters (pars, null, lexer.Location);
+              current_local_parameters = new Parameters (pars, null);
 
                if (RootContext.Documentation != null) {
                        tmpComment = Lexer.consume_doc_comment ();
@@ -1863,9 +1863,9 @@ conversion_operator_declarator
          {
                Parameter [] pars = new Parameter [1];
 
-               pars [0] = new Parameter ((Expression) $5, (string) $6, Parameter.Modifier.NONE, null);
+               pars [0] = new Parameter ((Expression) $5, (string) $6, Parameter.Modifier.NONE, null, lexer.Location);
 
-               current_local_parameters = new Parameters (pars, null, lexer.Location);  
+               current_local_parameters = new Parameters (pars, null);  
                  
                if (RootContext.Documentation != null) {
                        tmpComment = Lexer.consume_doc_comment ();
@@ -1879,9 +1879,9 @@ conversion_operator_declarator
          {
                Parameter [] pars = new Parameter [1];
 
-               pars [0] = new Parameter ((Expression) $5, (string) $6, Parameter.Modifier.NONE, null);
+               pars [0] = new Parameter ((Expression) $5, (string) $6, Parameter.Modifier.NONE, null, lexer.Location);
 
-               current_local_parameters = new Parameters (pars, null, lexer.Location);  
+               current_local_parameters = new Parameters (pars, null);  
                  
                if (RootContext.Documentation != null) {
                        tmpComment = Lexer.consume_doc_comment ();
@@ -2036,7 +2036,7 @@ destructor_declaration
                         
                        Method d = new Destructor (
                                current_class, TypeManager.system_void_expr, m, "Finalize", 
-                               new Parameters (null, null, l), (Attributes) $1, l);
+                               new Parameters (null, null), (Attributes) $1, l);
                        if (RootContext.Documentation != null)
                                d.DocComment = ConsumeStoredComment ();
                  
@@ -2143,11 +2143,11 @@ add_accessor_declaration
                Parameter [] args = new Parameter [1];
                Parameter implicit_value_parameter = new Parameter (
                        implicit_value_parameter_type, "value", 
-                       Parameter.Modifier.NONE, null);
+                       Parameter.Modifier.NONE, null, lexer.Location);
 
                args [0] = implicit_value_parameter;
                
-               current_local_parameters = new Parameters (args, null, lexer.Location);  
+               current_local_parameters = new Parameters (args, null);  
                lexer.EventParsing = false;
          }
           block
@@ -2171,11 +2171,11 @@ remove_accessor_declaration
                Parameter [] args = new Parameter [1];
                Parameter implicit_value_parameter = new Parameter (
                        implicit_value_parameter_type, "value", 
-                       Parameter.Modifier.NONE, null);
+                       Parameter.Modifier.NONE, null, lexer.Location);
 
                args [0] = implicit_value_parameter;
                
-               current_local_parameters = new Parameters (args, null, lexer.Location);  
+               current_local_parameters = new Parameters (args, null);  
                lexer.EventParsing = false;
          }
           block
@@ -3047,7 +3047,7 @@ anonymous_method_signature
                        ArrayList par_list = (ArrayList) $2;
                        Parameter [] pars = new Parameter [par_list.Count];
                        par_list.CopyTo (pars);
-                       $$ = new Parameters (pars, null, lexer.Location);
+                       $$ = new Parameters (pars, null);
                }
          }
        ;
@@ -3074,7 +3074,7 @@ anonymous_method_parameter_list
 
 anonymous_method_parameter
        : opt_parameter_modifier type IDENTIFIER {
-               $$ = new Parameter ((Expression) $2, (string) $3, (Parameter.Modifier) $1, null);
+               $$ = new Parameter ((Expression) $2, (string) $3, (Parameter.Modifier) $1, null, lexer.Location);
          }
        | PARAMS type IDENTIFIER {
                Report.Error (1670, lexer.Location, "params modifier not allowed in anonymous method declaration");
index 1f88e06ec79752566d5bf0e33787491dcb4ffc1c..1a14bd913658f378fb7e60ea954d8aed8a47ac00 100644 (file)
@@ -142,14 +142,12 @@ namespace Mono.CSharp {
                        //
                        // HACK because System.Reflection.Emit is lame
                        //
-                       //
-                       // FIXME: POSSIBLY make these static, as they are always the same
                        Parameter [] fixed_pars = new Parameter [2];
                        fixed_pars [0] = new Parameter (TypeManager.system_object_expr, "object",
-                                                       Parameter.Modifier.NONE, null);
+                                                       Parameter.Modifier.NONE, null, Location);
                        fixed_pars [1] = new Parameter (TypeManager.system_intptr_expr, "method", 
-                                                       Parameter.Modifier.NONE, null);
-                       Parameters const_parameters = new Parameters (fixed_pars, null, Location);
+                                                       Parameter.Modifier.NONE, null, Location);
+                       Parameters const_parameters = new Parameters (fixed_pars, null);
                        
                        TypeManager.RegisterMethod (
                                ConstructorBuilder,
@@ -236,7 +234,7 @@ namespace Mono.CSharp {
                                
                                for (; i < top; i++) {
                                        p = Parameters.FixedParameters [i];
-                                       p.DefineParameter (ec, InvokeBuilder, null, i + 1, Location);
+                                       p.DefineParameter (ec, InvokeBuilder, null, i + 1);
 
                                        if ((p.ModFlags & Parameter.Modifier.ISBYREF) != 0)
                                                out_params++;
@@ -298,12 +296,12 @@ namespace Mono.CSharp {
                                for (i = 0 ; i < top; i++) {
                                        p = Parameters.FixedParameters [i];
 
-                                       p.DefineParameter (ec, BeginInvokeBuilder, null, i + 1, Location);
+                                       p.DefineParameter (ec, BeginInvokeBuilder, null, i + 1);
                                }
                        }
                        if (Parameters.ArrayParameter != null){
                                Parameter p = Parameters.ArrayParameter;
-                               p.DefineParameter (ec, BeginInvokeBuilder, null, i + 1, Location);
+                               p.DefineParameter (ec, BeginInvokeBuilder, null, i + 1);
 
                                i++;
                        }
@@ -324,12 +322,12 @@ namespace Mono.CSharp {
                        
                        async_params [params_num] = new Parameter (
                                TypeManager.system_asynccallback_expr, "callback",
-                                                                  Parameter.Modifier.NONE, null);
+                                                                  Parameter.Modifier.NONE, null, Location);
                        async_params [params_num + 1] = new Parameter (
                                TypeManager.system_object_expr, "object",
-                                                                  Parameter.Modifier.NONE, null);
+                                                                  Parameter.Modifier.NONE, null, Location);
 
-                       Parameters async_parameters = new Parameters (async_params, null, Location);
+                       Parameters async_parameters = new Parameters (async_params, null);
 
                        TypeManager.RegisterMethod (BeginInvokeBuilder,
                                                    new InternalParameters (async_parameters.GetParameterInfo (ec), async_parameters),
@@ -356,7 +354,7 @@ namespace Mono.CSharp {
                                }
                        }
                        end_param_types [out_params] = TypeManager.iasyncresult_type;
-                       end_params [out_params] = new Parameter (TypeManager.system_iasyncresult_expr, "result", Parameter.Modifier.NONE, null);
+                       end_params [out_params] = new Parameter (TypeManager.system_iasyncresult_expr, "result", Parameter.Modifier.NONE, null, Location);
 
                        //
                        // Create method, define parameters, register parameters with type system
@@ -372,7 +370,7 @@ namespace Mono.CSharp {
                                EndInvokeBuilder.DefineParameter (i + 1, end_params [i].Attributes, end_params [i].Name);
                        }
 
-                       Parameters end_parameters = new Parameters (end_params, null, Location);
+                       Parameters end_parameters = new Parameters (end_params, null);
 
                        TypeManager.RegisterMethod (
                                EndInvokeBuilder,
@@ -385,7 +383,7 @@ namespace Mono.CSharp {
                public override void Emit ()
                {
                        if (OptAttributes != null) {
-                               Parameters.LabelParameters (ec, InvokeBuilder, Location);
+                               Parameters.LabelParameters (ec, InvokeBuilder);
                                OptAttributes.Emit (ec, this);
                        }
 
index 64bd5383f416a7b1fa2ad52ccfb07a5572267a6e..2cd7103fced99cd506ae0bc2e67fb99904137706 100644 (file)
@@ -1382,6 +1382,104 @@ namespace Mono.CSharp {
                        child.Emit (ec);
                }
        }
+       /// <summary>
+       ///     This is a numeric cast to a Decimal
+       /// </summary>
+       public class CastToDecimal : EmptyCast {
+
+               MethodInfo conversion_operator;
+
+               public CastToDecimal (EmitContext ec, Expression child)
+                       : this (ec, child, false)
+               {
+               }
+
+               public CastToDecimal (EmitContext ec, Expression child, bool find_explicit)
+                       : base (child, TypeManager.decimal_type)
+               {
+                       conversion_operator = GetConversionOperator (ec, find_explicit);
+
+                       if (conversion_operator == null)
+                               Convert.Error_CannotImplicitConversion (loc, child.Type, type);
+               }
+
+               // Returns the implicit operator that converts from
+               // 'child.Type' to System.Decimal.
+               MethodInfo GetConversionOperator (EmitContext ec, bool find_explicit)
+               {
+                       string operator_name = "op_Implicit";
+
+                       if (find_explicit)
+                               operator_name = "op_Explicit";
+                       
+                       MethodGroupExpr opers = Expression.MethodLookup (
+                               ec, type, operator_name, loc) as MethodGroupExpr;
+
+                       if (opers == null)
+                               Convert.Error_CannotImplicitConversion (loc, child.Type, type);
+                       
+                       foreach (MethodInfo oper in opers.Methods) {
+                               ParameterData pd = TypeManager.GetParameterData (oper);
+
+                               if (pd.ParameterType (0) == child.Type && oper.ReturnType == type)
+                                       return oper;
+                       }
+
+                       return null;
+               }
+               public override void Emit (EmitContext ec)
+               {
+                       ILGenerator ig = ec.ig;
+                       child.Emit (ec);
+
+                       ig.Emit (OpCodes.Call, conversion_operator);
+               }
+       }
+       /// <summary>
+       ///     This is an explicit numeric cast from a Decimal
+       /// </summary>
+       public class CastFromDecimal : EmptyCast
+       {
+               MethodInfo conversion_operator;
+               public CastFromDecimal (EmitContext ec, Expression child, Type return_type)
+                       : base (child, return_type)
+               {
+                       if (child.Type != TypeManager.decimal_type)
+                               throw new InternalErrorException (
+                                       "The expected type is Decimal, instead it is " + child.Type.FullName);
+
+                       conversion_operator = GetConversionOperator (ec);
+                       if (conversion_operator == null)
+                               Convert.Error_CannotImplicitConversion (loc, child.Type, type);
+               }
+
+               // Returns the explicit operator that converts from an
+               // express of type System.Decimal to 'type'.
+               MethodInfo GetConversionOperator (EmitContext ec)
+               {                               
+                       MethodGroupExpr opers = Expression.MethodLookup (
+                               ec, child.Type, "op_Explicit", loc) as MethodGroupExpr;
+
+                       if (opers == null)
+                               Convert.Error_CannotImplicitConversion (loc, child.Type, type);
+                       
+                       foreach (MethodInfo oper in opers.Methods) {
+                               ParameterData pd = TypeManager.GetParameterData (oper);
+
+                               if (pd.ParameterType (0) == child.Type && oper.ReturnType == type)
+                                       return oper;
+                       }
+
+                       return null;
+               }
+               public override void Emit (EmitContext ec)
+               {
+                       ILGenerator ig = ec.ig;
+                       child.Emit (ec);
+
+                       ig.Emit (OpCodes.Call, conversion_operator);
+               }
+       }
 
         //
        // We need to special case this since an empty cast of
index e2c96ee3a7668d775ddcf3a07d8b6481f143a974..08733dd952ebf74750f18171347d567549c7cc75 100644 (file)
@@ -8462,6 +8462,23 @@ namespace Mono.CSharp {
        public class EmptyExpression : Expression {
                public static readonly EmptyExpression Null = new EmptyExpression ();
 
+               static EmptyExpression temp = new EmptyExpression ();
+               public static EmptyExpression Grab ()
+               {
+                       if (temp == null)
+                               throw new InternalErrorException ("Nested Grab");
+                       EmptyExpression retval = temp;
+                       temp = null;
+                       return retval;
+               }
+
+               public static void Release (EmptyExpression e)
+               {
+                       if (temp != null)
+                               throw new InternalErrorException ("Already released");
+                       temp = e;
+               }
+
                // TODO: should be protected
                public EmptyExpression ()
                {
index c3c4bac08d5f25a1a6a872b012b4b539ea9846f4..62bb473c9a5862a4849d7f0ca0e0e5d87920a48a 100644 (file)
@@ -517,10 +517,11 @@ namespace Mono.CSharp {
                        if (!is_static)
                                list.Add (new Parameter (
                                        new TypeExpression (container.TypeBuilder, Location),
-                                       "this", Parameter.Modifier.NONE, null));
+                                       "this", Parameter.Modifier.NONE,
+                                       null, Location));
                        list.Add (new Parameter (
                                TypeManager.system_boolean_expr, "initialized",
-                               Parameter.Modifier.NONE, null));
+                               Parameter.Modifier.NONE, null, Location));
 
                        Parameter[] old_fixed = parameters.Parameters.FixedParameters;
                        if (old_fixed != null)
@@ -530,8 +531,7 @@ namespace Mono.CSharp {
                        list.CopyTo (fixed_params);
 
                        ctor_params = new Parameters (
-                               fixed_params, parameters.Parameters.ArrayParameter,
-                               Location);
+                               fixed_params, parameters.Parameters.ArrayParameter);
 
                        Constructor ctor = new Constructor (
                                this, Name, Modifiers.PUBLIC, ctor_params,
index 61fe88ff82c483042b2adfb82cce7fc11b9078b9..cfe1f907bdd3e75f1df084e283ebc2349ad07afd 100644 (file)
@@ -22,10 +22,12 @@ namespace Mono.CSharp {
        public abstract class ParameterBase : Attributable {
 
                protected ParameterBuilder builder;
+               public readonly Location Location;
 
-               public ParameterBase (Attributes attrs)
+               public ParameterBase (Attributes attrs, Location loc)
                        : base (attrs)
                {
+                       Location = loc;
                }
 
                public override void ApplyAttributeBuilder (Attribute a, CustomAttributeBuilder cb)
@@ -57,7 +59,7 @@ namespace Mono.CSharp {
        /// </summary>
        public class ReturnParameter: ParameterBase {
                public ReturnParameter (MethodBuilder mb, Location location):
-                       base (null)
+                       base (null, location)
                {
                        try {
                                builder = mb.DefineParameter (0, ParameterAttributes.None, "");                 
@@ -101,8 +103,8 @@ namespace Mono.CSharp {
        /// of the 'set' method in properties, and the 'add' and 'remove' methods in events.
        /// </summary>
        public class ImplicitParameter: ParameterBase {
-               public ImplicitParameter (MethodBuilder mb):
-                       base (null)
+               public ImplicitParameter (MethodBuilder mb, Location loc):
+                       base (null, loc)
                {
                        builder = mb.DefineParameter (1, ParameterAttributes.None, "");                 
                }
@@ -126,8 +128,6 @@ namespace Mono.CSharp {
        /// <summary>
        ///   Represents a single method parameter
        /// </summary>
-
-       //TODO: Add location member to this or base class for better error location and all methods simplification.
        public class Parameter : ParameterBase {
                [Flags]
                public enum Modifier : byte {
@@ -149,8 +149,8 @@ namespace Mono.CSharp {
 
                EmitContext ec;  // because ApplyAtrribute doesn't have ec
                
-               public Parameter (Expression type, string name, Modifier mod, Attributes attrs)
-                       : base (attrs)
+               public Parameter (Expression type, string name, Modifier mod, Attributes attrs, Location loc)
+                       : base (attrs, loc)
                {
                        Name = name;
                        ModFlags = mod;
@@ -186,7 +186,7 @@ namespace Mono.CSharp {
                // <summary>
                //   Resolve is used in method definitions
                // </summary>
-               public bool Resolve (EmitContext ec, Location l)
+               public bool Resolve (EmitContext ec)
                {
                        this.ec = ec;
 
@@ -197,19 +197,19 @@ namespace Mono.CSharp {
                        parameter_type = texpr.ResolveType (ec);
                        
                        if (parameter_type.IsAbstract && parameter_type.IsSealed) {
-                               Report.Error (721, l, "'{0}': static types cannot be used as parameters", GetSignatureForError ());
+                               Report.Error (721, Location, "'{0}': static types cannot be used as parameters", GetSignatureForError ());
                                return false;
                        }
 
                        if (parameter_type == TypeManager.void_type){
-                               Report.Error (1536, l, "Invalid parameter type 'void'");
+                               Report.Error (1536, Location, "Invalid parameter type 'void'");
                                return false;
                        }
 
                        if ((ModFlags & Parameter.Modifier.ISBYREF) != 0){
                                if (parameter_type == TypeManager.typed_reference_type ||
                                    parameter_type == TypeManager.arg_iterator_type){
-                                       Report.Error (1601, l,
+                                       Report.Error (1601, Location,
                                                      "out or ref parameter can not be of type TypedReference or ArgIterator");
                                        return false;
                                }
@@ -260,10 +260,10 @@ namespace Mono.CSharp {
                ///   Returns the signature for this parameter evaluating it on the
                ///   @tc context
                /// </summary>
-               public string GetSignature (EmitContext ec, Location loc)
+               public string GetSignature (EmitContext ec)
                {
                        if (parameter_type == null){
-                               if (!Resolve (ec, loc))
+                               if (!Resolve (ec))
                                        return null;
                        }
 
@@ -303,7 +303,7 @@ namespace Mono.CSharp {
                        }
                }
 
-               public void DefineParameter (EmitContext ec, MethodBuilder mb, ConstructorBuilder cb, int index, Location loc)
+               public void DefineParameter (EmitContext ec, MethodBuilder mb, ConstructorBuilder cb, int index)
                {
                        ParameterAttributes par_attr = Attributes;
                                        
@@ -333,22 +333,19 @@ namespace Mono.CSharp {
                public readonly bool HasArglist;
                string signature;
                Type [] types;
-               Location loc;
                
                static Parameters empty_parameters;
                
-               public Parameters (Parameter [] fixed_parameters, Parameter array_parameter, Location l)
+               public Parameters (Parameter [] fixed_parameters, Parameter array_parameter)
                {
                        FixedParameters = fixed_parameters;
                        ArrayParameter  = array_parameter;
-                       loc = l;
                }
 
-               public Parameters (Parameter [] fixed_parameters, bool has_arglist, Location l)
+               public Parameters (Parameter [] fixed_parameters, bool has_arglist)
                {
                        FixedParameters = fixed_parameters;
                        HasArglist = has_arglist;
-                       loc = l;
                }
 
                /// <summary>
@@ -358,7 +355,7 @@ namespace Mono.CSharp {
                public static Parameters EmptyReadOnlyParameters {
                        get {
                                if (empty_parameters == null)
-                                       empty_parameters = new Parameters (null, null, Location.Null);
+                                       empty_parameters = new Parameters (null, null);
                        
                                return empty_parameters;
                        }
@@ -370,10 +367,6 @@ namespace Mono.CSharp {
                        }
                }
 
-               public Location Location {
-                       get { return loc; }
-               }
-               
                public void ComputeSignature (EmitContext ec)
                {
                        signature = "";
@@ -381,7 +374,7 @@ namespace Mono.CSharp {
                                for (int i = 0; i < FixedParameters.Length; i++){
                                        Parameter par = FixedParameters [i];
                                        
-                                       signature += par.GetSignature (ec, loc);
+                                       signature += par.GetSignature (ec);
                                }
                        }
                        //
@@ -390,7 +383,7 @@ namespace Mono.CSharp {
                        //
                }
 
-               void Error_DuplicateParameterName (string name)
+               void Error_DuplicateParameterName (string name, Location loc)
                {
                        Report.Error (
                                100, loc, "The parameter name `" + name + "' is a duplicate");
@@ -412,12 +405,14 @@ namespace Mono.CSharp {
                                for (j = i + 1; j < count; j++){
                                        if (base_name != FixedParameters [j].Name)
                                                continue;
-                                       Error_DuplicateParameterName (base_name);
+                                       Error_DuplicateParameterName (base_name,
+                                               FixedParameters [i].Location);
                                        return false;
                                }
 
                                if (base_name == array_par_name){
-                                       Error_DuplicateParameterName (base_name);
+                                       Error_DuplicateParameterName (base_name,
+                                               FixedParameters [i].Location);
                                        return false;
                                }
                        }
@@ -496,7 +491,7 @@ namespace Mono.CSharp {
                                foreach (Parameter p in FixedParameters){
                                        Type t = null;
                                        
-                                       if (p.Resolve (ec, loc))
+                                       if (p.Resolve (ec))
                                                t = p.ExternalType ();
                                        else
                                                failed = true;
@@ -507,7 +502,7 @@ namespace Mono.CSharp {
                        }
                        
                        if (extra > 0){
-                               if (ArrayParameter.Resolve (ec, loc))
+                               if (ArrayParameter.Resolve (ec))
                                        types [i] = ArrayParameter.ExternalType ();
                                else 
                                        failed = true;
@@ -596,9 +591,8 @@ namespace Mono.CSharp {
                // The method's attributes are passed in because we need to extract
                // the "return:" attribute from there to apply on the return type
                //
-               public void LabelParameters (EmitContext ec,
-                       MethodBase builder,
-                       Location loc) {
+               public void LabelParameters (EmitContext ec, MethodBase builder)
+               {
                        //
                        // Define each type attribute (in/out/ref) and
                        // the argument names.
@@ -610,7 +604,7 @@ namespace Mono.CSharp {
 
                        if (FixedParameters != null) {
                                for (i = 0; i < FixedParameters.Length; i++) {
-                                       FixedParameters [i].DefineParameter (ec, mb, cb, i + 1, loc);
+                                       FixedParameters [i].DefineParameter (ec, mb, cb, i + 1);
                                }
                        }
 
index a35af12a8783da0331ed729554fa07b0f3bad288..9123efa5baf47268e39e89d2064d9a00535e9039 100644 (file)
@@ -1574,7 +1574,7 @@ namespace Mono.CSharp {
                        int idx;
                        Parameter p = Toplevel.Parameters.GetParameterByName (name, out idx);
                        if (p != null) {
-                               Report.SymbolRelatedToPreviousError (Toplevel.Parameters.Location, name);
+                               Report.SymbolRelatedToPreviousError (p.Location, name);
                                Report.Error (136, l, "'{0}' hides a method parameter", name);
                                return null;
                        }
index 871a8ad11b2ac233ec16f31aa69a0a3bf18928e8..e0f149b9286f54d766c328290d1c5a1c87ac64b2 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-26  Duncan Mak  <duncan@novell.com>
+           Raja R Harinath  <rharinath@novell.com>
+
+       * test-387.cs: New test from #54928.
+
+2005-05-24  Duncan Mak  <duncan@novell.com>
+
+       * test-386.cs: New test from #68711.
+
 2005-05-20  Martin Baulig  <martin@ximian.com>
 
        * test-336.cs: Replaced with a working test.
index ff8dc1b01f4f748f8b9af27833ad84ddf5007960..ded6092fbf7d90825e3d6cc65decc1afe177ffbc 100644 (file)
@@ -33,7 +33,7 @@ USE_MCS_FLAGS :=
 # Martin Baulig will manually move them into TEST_SOURCES_common after merging the code into GMCS.
 # He may also move some to TEST_EXCLUDE_net_2_0 if some of the merges are inappropriate for GMCS.
 #
-NEW_TEST_SOURCES_common =
+NEW_TEST_SOURCES_common = test-386 test-387
 
 #
 # Please do _not_ add any tests here - all new tests should go into NEW_TEST_SOURCES_common
@@ -80,7 +80,7 @@ TEST_SOURCES_common = \
        test-351 test-352 test-353 test-354 test-355 test-356 test-357 test-358 test-359 test-360 \
        test-361 test-362 test-363 test-364 test-365 test-366 test-367 test-368 test-369 test-370 \
        test-371 test-372 test-373 test-374 test-375 test-376 test-377 test-378 test-379 test-380 \
-       test-381 test-382 test-383 test-384 test-385                                              \
+       test-381 test-382 test-383 test-384 test-385                                              \
        cls-test-0 cls-test-1 cls-test-2 cls-test-3 cls-test-5 cls-test-6 cls-test-7 cls-test-10  \
        cls-test-11 cls-test-12 cls-test-14 cls-test-15 cls-test-16 \
        2test-1  2test-2  2test-3  2test-4  2test-5  2test-6  2test-7  2test-8  2test-9  2test-10 \
diff --git a/mcs/tests/test-386.cs b/mcs/tests/test-386.cs
new file mode 100644 (file)
index 0000000..0a95d45
--- /dev/null
@@ -0,0 +1,21 @@
+using System;
+
+class SuperDecimal{
+       private Decimal val;
+
+       public SuperDecimal (Decimal val)
+       {
+               this.val = val;
+       }
+
+       public static implicit operator SuperDecimal (Decimal val)
+       {
+               return new SuperDecimal (val);
+       }
+
+       public static void Main ()
+       {
+               int i = 2;
+               SuperDecimal sd = i;
+       }
+}
diff --git a/mcs/tests/test-387.cs b/mcs/tests/test-387.cs
new file mode 100644 (file)
index 0000000..680a355
--- /dev/null
@@ -0,0 +1,25 @@
+public struct ObjectID {
+       long l;
+
+       public ObjectID (long l)
+       {
+               this.l = l;
+       }
+
+       public static implicit operator long (ObjectID p)
+       {
+               return p.l;
+       }
+
+       public static implicit operator ObjectID (long l)
+       {
+               return new ObjectID (l);
+       }
+
+       static void Main ()
+       {
+               ObjectID x = new ObjectID (0);
+               decimal y = x;
+       }
+}
+
diff --git a/mono.sln b/mono.sln
new file mode 100644 (file)
index 0000000..d744aaa
--- /dev/null
+++ b/mono.sln
@@ -0,0 +1,210 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 9.00\r
+# Visual Studio 2005\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmdesc", "genmdesc.vcproj", "{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
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5} = {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {EB56000B-C80B-4E8B-908D-D84D31B517D3}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-invoke", "samples\embed\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
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Embedded Samples", "Embedded Samples", "{5FE09AA5-C3C9-45EA-A323-36A11B653CEC}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "teste", "samples\embed\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
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{EE2CC761-9652-44AC-9204-7EB31194CAA6}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mono", "mono.vcproj", "{A0EDDCD9-940F-432C-A28F-7EF322437D79}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc\libgc.vcproj", "{EB56000B-C80B-4E8B-908D-D84D31B517D3}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodis", "mono\dis\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
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pedump", "mono\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
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monodiet", "mono\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
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monoburg", "mono\monoburg\monoburg.vcproj", "{5DCFA645-3358-4A20-9630-AEAAC5EED2D5}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monograph", "mono\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
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{0EBA83B7-0EB4-4C83-A900-77300A97E8B1}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-metadata", "samples\embed\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
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Debug|Mixed Platforms = Debug|Mixed Platforms\r
+               Debug|Win32 = Debug|Win32\r
+               Release|Any CPU = Release|Any CPU\r
+               Release|Mixed Platforms = Release|Mixed Platforms\r
+               Release|Win32 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Debug|Mixed Platforms.Build.0 = Debug|Win32\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}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.ActiveCfg = Release|Win32\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149}.Release|Win32.Build.0 = Release|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Debug|Mixed Platforms.Build.0 = Debug|Win32\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}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Win32.ActiveCfg = Release|Win32\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771}.Release|Win32.Build.0 = Release|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D}.Release|Win32.Build.0 = Release|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Debug|Win32.Build.0 = Debug|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.ActiveCfg = Release|Win32\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4}.Release|Win32.Build.0 = Release|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Debug|Mixed Platforms.Build.0 = Debug|Win32\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}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.ActiveCfg = Release|Win32\r
+               {A0EDDCD9-940F-432C-A28F-7EF322437D79}.Release|Win32.Build.0 = Release|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32\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}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.ActiveCfg = Release|Win32\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3}.Release|Win32.Build.0 = Release|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Debug|Win32.Build.0 = Debug|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.ActiveCfg = Release|Win32\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E}.Release|Win32.Build.0 = Release|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Debug|Win32.Build.0 = Debug|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.ActiveCfg = Release|Win32\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}.Release|Win32.Build.0 = Release|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Debug|Win32.Build.0 = Debug|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|Win32.ActiveCfg = Release|Win32\r
+               {8F90007F-8019-4191-8808-891E4762D958}.Release|Win32.Build.0 = Release|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Debug|Win32.Build.0 = Debug|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Release|Win32.ActiveCfg = Release|Win32\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5}.Release|Win32.Build.0 = Release|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Debug|Win32.Build.0 = Debug|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Win32.ActiveCfg = Release|Win32\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122}.Release|Win32.Build.0 = Release|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Any CPU.ActiveCfg = Debug|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Mixed Platforms.Build.0 = Debug|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Debug|Win32.Build.0 = Debug|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Any CPU.ActiveCfg = Release|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Mixed Platforms.ActiveCfg = Release|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Mixed Platforms.Build.0 = Release|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.ActiveCfg = Release|Win32\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770}.Release|Win32.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(NestedProjects) = preSolution\r
+               {B7098DFA-31E6-4006-8A15-1C9A4E925149} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {37F50E5A-4818-46CF-81FE-4BB06DE5D42E} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {8F90007F-8019-4191-8808-891E4762D958} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {5DCFA645-3358-4A20-9630-AEAAC5EED2D5} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {CA2A69D6-3B9D-45A5-8BF7-4E242E683122} = {EE2CC761-9652-44AC-9204-7EB31194CAA6}\r
+               {EB56000B-C80B-4E8B-908D-D84D31B517D3} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1}\r
+               {CB0D9E92-293C-439C-9AC7-C5F59B6E0771} = {0EBA83B7-0EB4-4C83-A900-77300A97E8B1}\r
+               {C5639B3F-288A-4A4B-A4A5-C0D85834221D} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC}\r
+               {6FDE4E5E-57D0-432F-A987-6C226A7827E4} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC}\r
+               {C2EB666E-9146-4B7A-85F6-25F9EA313770} = {5FE09AA5-C3C9-45EA-A323-36A11B653CEC}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/mono.vcproj b/mono.vcproj
new file mode 100644 (file)
index 0000000..8e9c601
--- /dev/null
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="mono"\r
+       ProjectGUID="{A0EDDCD9-940F-432C-A28F-7EF322437D79}"\r
+       RootNamespace="mono"\r
+       Keyword="Win32Proj"\r
+       SignManifests="true"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="./VSDependancies/temp/mono/Debug"\r
+                       IntermediateDirectory="./VSDependancies/temp/mono/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories=".;.\libgc\include;.\mono;&quot;.\VSDependancies\include\glib-2.0\glib&quot;;.\VSDependancies\include"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;PLATFORM_WIN32;__i386__"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4996"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories=".;.\VSDependancies\lib"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\mono\mini\main.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index 1de7a6d1a08666cc9a6af292a57bb67682277f9a..ba6ac1a44b3aa8311544437365d6a1ed0487fe0f 100644 (file)
@@ -1,3 +1,15 @@
+2005-05-28  Zoltan Varga  <vargaz@freemail.hu>
+
+       * ia64/ia64-codegen.h: Ongoing IA64 work.
+       
+       * ia64/ia64-codegen.h: Ongoing IA64 work.
+
+       * ia64/ia64-codegen.h: Ongoing IA64 work.
+
+2005-05-26  Zoltan Varga  <vargaz@freemail.hu>
+
+       * ia64/ia64-codegen.h: Ongoing IA64 work.
+
 2005-05-22  Zoltan Varga  <vargaz@freemail.hu>
 
        * ia64/ia64-codegen.h: Ongoing IA64 work.
index ed52ab35402ef0b015c4528176aae56b13a3d33b..74572de19b3ad10d8a40a61e554c54503e9e29d3 100644 (file)
@@ -120,6 +120,7 @@ typedef enum {
 #define ia64_ins_opcode(ins) (((guint64)(ins)) >> 37)
 #define ia64_ins_qp(ins) (((guint64)(ins)) & 0x3f)
 #define ia64_ins_r1(ins) ((((guint64)(ins)) >> 6) & 0x7f)
+#define ia64_ins_b1(ins) ((((guint64)(ins)) >> 6) & 0x3)
 #define ia64_ins_btype(ins) ((((guint64)(ins)) >> 6) & 0x7)
 #define ia64_ins_x3(ins) ((((guint64)(ins)) >> 33) & 0x7)
 #define ia64_ins_x6(ins) ((((guint64)(ins)) >> 27) & 0x3f)
@@ -142,7 +143,7 @@ typedef struct {
        int nins;
 } Ia64CodegenState;
 
-static void ia64_emit_bundle (Ia64CodegenState *code, gboolean flush);
+G_GNUC_UNUSED static void ia64_emit_bundle (Ia64CodegenState *code, gboolean flush);
 
 /*
  * FIXME:
@@ -180,19 +181,19 @@ static void ia64_emit_bundle (Ia64CodegenState *code, gboolean flush);
 #endif
 
 #define ia64_emit_bundle_template(code, template, i1, i2, i3) do { \
+    guint64 *buf64 = (guint64*)(gpointer)(code)->buf; \
     guint64 dw1, dw2; \
     dw1 = (((guint64)(template)) & 0x1f) | ((guint64)(i1) << 5) | ((((guint64)(i2)) & 0x3ffff) << 46); \
     dw2 = (((guint64)(i2)) >> 18) | (((guint64)(i3)) << 23); \
-    ((guint64*)(code)->buf)[0] = dw1; \
-    ((guint64*)(code)->buf)[1] = dw2; \
+    buf64[0] = dw1; \
+    buf64[1] = dw2; \
     (code)->buf += 16; \
 } while (0)
 
-static void 
+G_GNUC_UNUSED static void 
 ia64_emit_bundle (Ia64CodegenState *code, gboolean flush)
 {
-       int i, template;
-       guint64 i1, i2, i3;
+       int i;
 
        for (i = 0; i < code->nins; ++i) {
                switch (code->itypes [i]) {
@@ -1252,6 +1253,8 @@ typedef enum {
 
 #define ia64_br_call_reg_hint_pred(code, qp, b1, b2, bwh, ph, dh) ia64_b5 ((code), (qp), (b1), (b2), (bwh), (ph), (dh))
 
+#define ia64_br_call_reg_pred(code, qp, b1, b2) ia64_br_call_reg_hint_pred ((code), (qp), (b1), (b2), 0, 0, 0)
+
 typedef enum {
        IA64_IPWH_SPTK = 0,
        IA64_IPWH_LOOP = 1,
@@ -1296,6 +1299,10 @@ typedef enum {
 #define ia64_fnma_d_sf_pred(code, qp, f1, f3, f4, f2, sf) ia64_f1 ((code), (qp), (f1), (f3), (f4), (f2), (sf), 0xD, 0)
 #define ia64_fpnma_sf_pred(code, qp, f1, f3, f4, f2, sf) ia64_f1 ((code), (qp), (f1), (f3), (f4), (f2), (sf), 0xD, 1)
 
+/* Pseudo ops */
+#define ia64_fnorm_s_sf_pred(code, qp, f1, f3, sf) ia64_fma_s_sf_pred ((code), (qp), (f1), (f3), 1, 0, (sf))
+#define ia64_fnorm_d_sf_pred(code, qp, f1, f3, sf) ia64_fma_d_sf_pred ((code), (qp), (f1), (f3), 1, 0, (sf))
+
 #define ia64_f2(code, qp, f1, f3, f4, f2, opcode, x, x2) do { check_fr ((f1)); check_fr ((f2)); check_fr ((f3)); check_fr ((f4)); ia64_emit_ins_8 ((code), IA64_INS_TYPE_F, (qp), 0, (f1), 6, (f2), 13, (f3), 20, (f4), 27, (x2), 34, (x), 36, (opcode), 37); } while (0)
 
 #define ia64_xma_l_pred(code, qp, f1, f3, f4, f2) ia64_f2 ((code), (qp), (f1), (f3), (f4), (f2), 0xE, 1, 0)
@@ -1383,6 +1390,9 @@ typedef enum {
 #define ia64_fpmerge_ns_pred(code, qp, f1, f2, f3) ia64_f9 ((code), (qp), (f1), (f2), (f3), 0, 0, 0x11)
 #define ia64_fpmerge_se_pred(code, qp, f1, f2, f3) ia64_f9 ((code), (qp), (f1), (f2), (f3), 0, 0, 0x12)
 
+/* Pseudo ops */
+#define ia64_fmov_pred(code, qp, f1, f3) ia64_fmerge_s_pred ((code), (qp), (f1), (f3), (f3))
+
 #define ia64_f10(code, qp, f1, f2, sf, opcode, x, x6) do { check_sf ((sf)); check_fr ((f1)); check_fr ((f2)); ia64_emit_ins_7 ((code), IA64_INS_TYPE_F, (qp), 0, (f1), 6, (f2), 13, (x6), 27, (x), 33, (sf), 34, (opcode), 37); } while (0)
 
 #define ia64_fcvt_fx_sf_pred(code, qp, f1, f2, sf) ia64_f10 ((code), (qp), (f1), (f2), (sf), 0, 0, 0x18)
@@ -1680,6 +1690,7 @@ typedef enum {
 #define ia64_pshl4(code, r1, r3, r2) ia64_pshl4_pred ((code), 0, r1, r3, r2)
 #define ia64_shl(code, r1, r3, r2) ia64_shl_pred ((code), 0, r1, r3, r2)
 
+#define ia64_shl_imm(code, r1, r3, count) ia64_dep_z ((code), (r1), (r3), count, 64 - count)
 
 #define ia64_pshl2_imm(code, r1, r2, count) ia64_pshl2_imm_pred ((code), 0, r1, r2, count)
 #define ia64_pshl4_imm(code, r1, r2, count) ia64_pshl4_imm_pred ((code), 0, r1, r2, count)
@@ -1935,6 +1946,11 @@ typedef enum {
 #define ia64_st16_hint(code, r3, r2, hint) ia64_st16_hint_pred ((code), 0, r3, r2, hint)
 #define ia64_st16_rel_hint(code, r3, r2, hint) ia64_st16_rel_hint_pred ((code), 0, r3, r2, hint)
 
+/* Pseudo ops */
+#define ia64_ld1(code, r1, r3) ia64_ld1_hint ((code), (r1), (r3), 0)
+#define ia64_ld2(code, r1, r3) ia64_ld2_hint ((code), (r1), (r3), 0)
+#define ia64_ld4(code, r1, r3) ia64_ld4_hint ((code), (r1), (r3), 0)
+#define ia64_ld8(code, r1, r3) ia64_ld8_hint ((code), (r1), (r3), 0)
 
 #define ia64_st1_inc_imm_hint(code, r3, r2, imm, hint) ia64_st1_inc_imm_hint_pred ((code), 0, r3, r2, imm, hint)
 #define ia64_st2_inc_imm_hint(code, r3, r2, imm, hint) ia64_st2_inc_imm_hint_pred ((code), 0, r3, r2, imm, hint)
@@ -2240,17 +2256,16 @@ typedef enum {
 #define ia64_br_cexit_hint(code, disp, bwh, ph, dh) ia64_br_cexit_hint_pred ((code), 0, disp, bwh, ph, dh)
 #define ia64_br_ctop_hint(code, disp, bwh, ph, dh) ia64_br_ctop_hint_pred ((code), 0, disp, bwh, ph, dh)
 
-
 #define ia64_br_call_hint(code, b1, disp, bwh, ph, dh) ia64_br_call_hint_pred ((code), 0, b1, disp, bwh, ph, dh)
 
-
 #define ia64_br_cond_reg_hint(code, b1, bwh, ph, dh) ia64_br_cond_reg_hint_pred ((code), 0, b1, bwh, ph, dh)
 #define ia64_br_ia_reg_hint(code, b1, bwh, ph, dh) ia64_br_ia_reg_hint_pred ((code), 0, b1, bwh, ph, dh)
 #define ia64_br_ret_reg_hint(code, b1, bwh, ph, dh) ia64_br_ret_reg_hint_pred ((code), 0, b1, bwh, ph, dh)
 
-
 #define ia64_br_call_reg_hint(code, b1, b2, bwh, ph, dh) ia64_br_call_reg_hint_pred ((code), 0, b1, b2, bwh, ph, dh)
 
+#define ia64_br_call_reg(code, b1, b2) ia64_br_call_reg_hint ((code), (b1), (b2), 0, 0, 0)
+
 #define ia64_cover(code) ia64_cover_pred ((code), 0)
 #define ia64_clrrrb(code) ia64_clrrrb_pred ((code), 0)
 #define ia64_clrrrb_pr(code) ia64_clrrrb_pr_pred ((code), 0)
@@ -2304,6 +2319,10 @@ typedef enum {
 #define ia64_fnma_d_sf(code, f1, f3, f4, f2, sf) ia64_fnma_d_sf_pred ((code), 0, f1, f3, f4, f2, sf)
 #define ia64_fpnma_sf(code, f1, f3, f4, f2, sf) ia64_fpnma_sf_pred ((code), 0, f1, f3, f4, f2, sf)
 
+/* Pseudo ops */
+#define ia64_fnorm_s_sf(code, f1, f3, sf) ia64_fnorm_s_sf_pred ((code), 0, (f1), (f3), (sf))
+#define ia64_fnorm_d_sf(code, f1, f3, sf) ia64_fnorm_d_sf_pred ((code), 0, (f1), (f3), (sf))
+
 #define ia64_xma_l(code, f1, f3, f4, f2) ia64_xma_l_pred ((code), 0, f1, f3, f4, f2)
 #define ia64_xma_h(code, f1, f3, f4, f2) ia64_xma_h_pred ((code), 0, f1, f3, f4, f2)
 #define ia64_xma_hu(code, f1, f3, f4, f2) ia64_xma_hu_pred ((code), 0, f1, f3, f4, f2)
@@ -2375,6 +2394,9 @@ typedef enum {
 #define ia64_fpmerge_ns(code, f1, f2, f3) ia64_fpmerge_ns_pred ((code), 0, f1, f2, f3)
 #define ia64_fpmerge_se(code, f1, f2, f3) ia64_fpmerge_se_pred ((code), 0, f1, f2, f3)
 
+/* Pseudo ops */
+#define ia64_fmov(code, f1, f3) ia64_fmov_pred ((code), 0, (f1), (f3))
+
 #define ia64_fcvt_fx_sf(code, f1, f2, sf) ia64_fcvt_fx_sf_pred ((code), 0, f1, f2, sf)
 #define ia64_fcvt_fxu_sf(code, f1, f2, sf) ia64_fcvt_fxu_sf_pred ((code), 0, f1, f2, sf)
 #define ia64_fcvt_fx_trunc_sf(code, f1, f2, sf) ia64_fcvt_fx_trunc_sf_pred ((code), 0, f1, f2, sf)
index 6e8d01cb91605da23c005ce0bbcc22dc38665ec3..705c0809540e9e88e9aa45efbf0e775c4c939d98 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * monodis.vcproj: Project file for monodis.
+
 2005-05-06  Zoltan Varga  <vargaz@freemail.hu>
 
        * main.c: Respect MONO_PATH when loading assemblies.
diff --git a/mono/dis/monodis.vcproj b/mono/dis/monodis.vcproj
new file mode 100644 (file)
index 0000000..f18d5cc
--- /dev/null
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="monodis"\r
+       ProjectGUID="{37F50E5A-4818-46CF-81FE-4BB06DE5D42E}"\r
+       RootNamespace="dis"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../../VSDependancies/temp/monodis/Debug"\r
+                       IntermediateDirectory="../../VSDependancies/temp/monodis/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\..\;..\..\libgc\include;&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include;..\..\mono\;..\..\mono\jit"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;PLATFORM_WIN32;__i386__"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4996;4018;4244"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\..\;..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\dis-cil.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\dump.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\get.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\main.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\util.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\dis-cil.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\dump.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\get.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\meta.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\push-pop.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\util.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index 49c3deb0db42f8bdc0e9e8173e0e4cc941b51c6b..8d86734b13ccfea192f65fdc6aa518f51d04a23a 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * processes.c: make ExitCode be valid even if the user didn't call
+       WaitForExit() and is just polling on HasExited.
+
 2005-05-17  Dick Porter  <dick@ximian.com>
 
        * io.c (file_getfilesize): Clear the error value, so that files
index fc6abec90babb156724838fb3fe790216cc60481..e8a4dbaba6a99ceb6011ddcd9f4ff387acb6c453 100644 (file)
@@ -3518,7 +3518,14 @@ static gboolean _wapi_lock_file_region (int fd, off_t offset, off_t length)
                 * if locks are not available (NFS for example),
                 * ignore the error
                 */
-               if (errno == ENOLCK) {
+               if (errno == ENOLCK
+#ifdef EOPNOTSUPP
+                   || errno == EOPNOTSUPP
+#endif
+#ifdef ENOTSUP
+                   || errno == ENOTSUP
+#endif
+                  ) {
                        return (TRUE);
                }
                
@@ -3548,6 +3555,21 @@ static gboolean _wapi_unlock_file_region (int fd, off_t offset, off_t length)
 #endif
        
        if (ret == -1) {
+               /*
+                * if locks are not available (NFS for example),
+                * ignore the error
+                */
+               if (errno == ENOLCK
+#ifdef EOPNOTSUPP
+                   || errno == EOPNOTSUPP
+#endif
+#ifdef ENOTSUP
+                   || errno == ENOTSUP
+#endif
+                  ) {
+                       return (TRUE);
+               }
+               
                SetLastError (ERROR_LOCK_VIOLATION);
                return(FALSE);
        }
index d5393130418f04ea642bb6d2df665d5808574929..d51f7bcc3783f4358ac92b8cdf2b345af4537155 100644 (file)
@@ -932,11 +932,13 @@ gboolean GetExitCodeProcess (gpointer process, guint32 *code)
                return(FALSE);
        }
        
-       /* A process handle is only signalled if the process has exited */
-       if(_wapi_handle_issignalled (process)==TRUE) {
-               *code=process_handle->exitstatus;
+       /* A process handle is only signalled if the process has exited
+        * and has been waited for */
+       if (_wapi_handle_issignalled (process) == TRUE ||
+           process_wait (process, 0) == WAIT_OBJECT_0) {
+               *code = process_handle->exitstatus;
        } else {
-               *code=STILL_ACTIVE;
+               *code = STILL_ACTIVE;
        }
        
        return(TRUE);
index 03b551bacf81cd38373a92ce8c10c3a40d38ccdf..2ceca78bc9787e867298884150c6fda9c878e362 100644 (file)
@@ -1,3 +1,41 @@
+2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
+
+       * appdomain.c, verify.c, object-internals.h, reflection.c:
+       bumped corlib number to 36, and added new extra_flags field
+       to ReflectionMethodBuilder and friends.  Fixes #75060.
+
+Fri May 27 14:45:56 CEST 2005 Paolo Molaro <lupus@ximian.com>
+
+       * gc.c: register a new weak link only if the object is non-null
+       (fixes bug#75047).
+
+2005-05-26  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * culture-info.h : short time pattern too.
+
+2005-05-26  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * culture-info.h : expand long time pattern string length.
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * culture-info-table.h : update (more French date format; #72788).
+
+2005-05-25  Zoltan Varga  <vargaz@freemail.hu>
+
+       * icall.c (ves_icall_InternalInvoke): Avoid type checks on this if
+       the method is static. Fixes #75029.
+
+2005-05-25  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * reflection.c: Update the table_idx field of method builders after
+       saving the module, since it can change. This is a workaround for
+       bug #74914. 
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * culture-info-table.h : update (additional French date format).
+
 2005-05-20  Zoltan Varga  <vargaz@freemail.hu>
 
        * icall.c (ves_icall_type_Equals): Revert last change.
index 1e61c04e9ebe68f07f0c3be13df3ea6615754092..d003bfd8c51718787e4b057ca40e43cb814defb7 100644 (file)
@@ -30,7 +30,7 @@
 #include <mono/metadata/threadpool.h>
 #include <mono/utils/mono-uri.h>
 
-#define MONO_CORLIB_VERSION 35
+#define MONO_CORLIB_VERSION 36
 
 CRITICAL_SECTION mono_delegate_section;
 
index 40390ef0cfb3d3d0499b0697f6d1f56100f4615b..c653556bf678e528aac32fbe11abe28e54dc38aa 100644 (file)
@@ -18,550 +18,550 @@ static const DateTimeFormatEntry datetime_format_entries [] = {
        {2179, 349, 37, 2204, 56, 393, 403, 2215, 2220, {2225, 2240, 2255, 2266, 2281, 2294, 2313}, {2328, 2335, 2342, 2349, 2356, 2363, 2370}, {2377, 2398, 2421, 2436, 2453, 2464, 2479, 2494, 2513, 2536, 2555, 2574}, {2595, 2602, 2609, 2616, 2623, 2630, 2639, 2648, 2655, 2662, 2669, 2676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {2683, 2708, 2728, 2204, 2737, 393, 2745, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
        {3030, 3058, 1414, 1423, 387, 3075, 1436, 411, 414, {3089, 3099, 3109, 3117, 3129, 3137, 3147}, {3156, 3159, 3162, 3165, 3168, 3171, 3174}, {3177, 3186, 3195, 3205, 3214, 3223, 3232, 3242, 3249, 3257, 3265, 3275}, {3284, 3290, 3296, 3303, 3309, 3315, 3321, 3328, 3332, 3337, 3342, 3349, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 825, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {3557, 813, 825, 378, 387, 393, 74, 411, 414, {3580, 3598, 3612, 3630, 3648, 3666, 3682}, {3689, 3692, 3695, 3698, 3701, 3704, 3707}, {3710, 3721, 3734, 3741, 3752, 3759, 3768, 3777, 3790, 3803, 3818, 3831}, {3842, 3849, 3734, 3856, 3752, 3863, 3870, 3877, 3884, 3891, 3898, 3905, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {3912, 3936, 3950, 1423, 1431, 3964, 2745, 3975, 3978, {3981, 3991, 3999, 4004, 4011, 4024, 4032}, {1639, 4040, 4042, 4044, 4048, 4051, 4053}, {4057, 4065, 4074, 4083, 4092, 4099, 4107, 4115, 4125, 4136, 1860, 1869}, {4145, 4150, 4156, 4163, 4169, 4175, 4181, 4187, 4192, 4199, 1041, 4204, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1922, 1401, 1414, 378, 387, 393, 1436, 411, 414, {4209, 4220, 4231, 4245, 4259, 4271, 4283}, {4295, 4299, 4304, 4309, 4314, 4318, 4323}, {4327, 4335, 3459, 4344, 4351, 4356, 4363, 4370, 1842, 4136, 4378, 4388}, {1878, 1882, 1886, 1890, 4351, 4397, 4402, 4407, 1906, 1910, 4413, 4418, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {4422, 349, 825, 4445, 387, 393, 74, 4453, 4456, {4459, 4468, 4476, 4485, 4496, 4505, 4514}, {4521, 4525, 1886, 4529, 4533, 4537, 4541}, {4545, 4553, 4562, 4568, 4575, 4582, 4589, 4596, 4603, 4613, 989, 4621}, {4630, 1882, 1886, 1890, 4634, 4638, 4642, 4646, 4650, 4654, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {4662, 1096, 4694, 4705, 1431, 1157, 1168, 4715, 4722, {4729, 4739, 4749, 4759, 4769, 4779, 4789}, {1260, 4799, 4803, 4807, 4811, 4815, 4819}, {4823, 4828, 4833, 4838, 4843, 4848, 4853, 4858, 4863, 4868, 4874, 4880}, {4886, 4888, 4890, 4892, 4894, 4896, 4898, 4900, 4902, 4904, 4907, 4910, 322}, 0, 0, 323, 325, {4694,2930,4913,1118,4920,4939,4956},{1096,4975,4999,5026},{1431,387,5055,5063},{1423,378,5072,5083}},
-       {5095, 5145, 4694, 5169, 5055, 5195, 5207, 5216, 5223, {5230, 5240, 5250, 5260, 5270, 5280, 5290}, {5300, 5304, 5308, 5312, 5316, 5320, 5324}, {5328, 5333, 5338, 5343, 5348, 5353, 5358, 5363, 5368, 5373, 5379, 5385}, {5328, 5333, 5338, 5343, 5348, 5353, 5358, 5363, 5368, 5373, 5379, 5385, 322}, 0, 0, 323, 325, {4694,2930,4913,1118,5391,5404},{5145,5415,5441,5463},{1431,387,5487,5501,5516,5055,5063,5532,5549,5567},{5169,5586,5608,1423,378,5632,5657,5072,5083}},
-       {5684, 813, 5706, 1423, 1431, 393, 74, 411, 414, {5715, 5722, 5730, 5738, 5747, 5757, 5765}, {5774, 3159, 5777, 5780, 5783, 5786, 5789}, {5792, 5800, 5809, 1815, 5815, 1825, 1830, 5819, 1842, 1852, 1860, 1869}, {1878, 1882, 5828, 1890, 5815, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 2939, 378, 387, 393, 74, 411, 414, {5832, 5842, 5856, 5863, 5870, 5879, 1504}, {5887, 5889, 5892, 5895, 5899, 5902, 2030}, {5905, 5914, 5919, 5926, 1821, 5936, 5945, 5952, 5962, 5972, 1609, 5985}, {5995, 5999, 1886, 6003, 1821, 6007, 6011, 6015, 6019, 6023, 6028, 6032, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {6036, 6075, 37, 378, 387, 6097, 6112, 411, 414, {6124, 6132, 6146, 6159, 6172, 6185, 6197}, {4521, 6205, 6209, 6213, 6217, 6221, 6225}, {6230, 6238, 6248, 943, 6255, 6260, 6266, 4596, 6272, 6281, 6289, 6298}, {1878, 6307, 1886, 6311, 3470, 1894, 1898, 4646, 4650, 6315, 1914, 6319, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 1946, 378, 387, 393, 74, 411, 414, {6323, 6333, 6338, 6345, 6354, 6358, 6365}, {6376, 6378, 6380, 2039, 6383, 1639, 6385}, {6387, 6396, 6406, 6413, 3470, 6421, 6427, 1835, 6433, 6444, 6454, 6464}, {6474, 2139, 2891, 2147, 2078, 6478, 6482, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {6486, 6514, 1946, 1423, 1431, 393, 74, 411, 414, {6532, 6555, 451, 6578, 6589, 6604, 6619}, {6634, 6639, 6644, 6649, 6654, 6659, 6664}, {6669, 6682, 6697, 6706, 6719, 6726, 6735, 6744, 6757, 6774, 6789, 6802}, {6817, 6824, 6831, 6838, 624, 6845, 6852, 6859, 6866, 6873, 6880, 6887, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {6894, 6919, 1414, 1423, 387, 3964, 6933, 411, 414, {6941, 6950, 6962, 6969, 6977, 6987, 6993}, {7000, 7004, 7008, 7012, 7016, 7021, 7025}, {7029, 7039, 7048, 7056, 7064, 7072, 7079, 7086, 7094, 1609, 7100, 7108}, {7117, 7121, 7125, 7130, 7134, 6011, 7138, 7142, 7146, 6028, 7150, 7154, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1378, 1401, 7158, 1423, 1431, 393, 1436, 411, 414, {7169, 7177, 7186, 7193, 7200, 7209, 7216}, {7223, 7226, 7229, 7232, 7235, 7239, 2030}, {4057, 4065, 7242, 4344, 7248, 4397, 4402, 1835, 1842, 4136, 1860, 1869}, {1878, 1882, 1886, 1890, 7248, 4397, 4402, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {7253, 349, 2939, 7278, 7289, 393, 403, 7296, 7299, {7302, 7309, 7318, 7327, 7339, 7347, 7356}, {7366, 7370, 2891, 7375, 7380, 7384, 7388}, {7392, 7398, 3459, 7405, 1821, 7411, 7419, 7426, 7432, 7440, 7446, 7454}, {2135, 7462, 2891, 7466, 7470, 7474, 7478, 7482, 7388, 7486, 7490, 7495, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {7499, 7527, 2939, 378, 7544, 393, 74, 7550, 7553, {7556, 7564, 7572, 1734, 1741, 1749, 7579}, {7587, 7591, 3162, 7595, 3168, 7598, 7601}, {5792, 5800, 3459, 1815, 1821, 1825, 1830, 7605, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {7613, 813, 37, 1423, 1431, 393, 74, 7666, 7697, {7728, 7759, 7787, 7815, 7834, 7868, 7893}, {7918, 7926, 7931, 7936, 7941, 7949, 7954}, {7959, 7978, 8009, 8028, 8047, 8069, 8094, 8116, 8138, 8160, 8179, 8207}, {8229, 8238, 8247, 8259, 8271, 8280, 8292, 8301, 8310, 8319, 8328, 8337, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {8346, 8375, 1946, 378, 387, 393, 403, 411, 414, {8393, 8399, 8409, 8415, 8426, 8436, 8441}, {8451, 8455, 8459, 8463, 8468, 8472, 8476}, {8480, 8485, 8492, 8497, 8503, 8510, 8518, 8525, 8534, 8541, 8546, 8553}, {8561, 8565, 2891, 8570, 2860, 8574, 8578, 8582, 8587, 8591, 8595, 8599, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {8603, 349, 825, 1423, 1431, 393, 403, 411, 414, {8624, 8631, 8637, 8644, 8649, 8655, 8661}, {8667, 8671, 8675, 8679, 8683, 8687, 8691}, {8695, 8703, 8712, 2072, 8718, 2082, 2087, 8722, 2099, 2109, 2117, 8730}, {2135, 2139, 2891, 2147, 8718, 2151, 2155, 8739, 2163, 2167, 2171, 8743, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 1946, 1423, 387, 393, 74, 411, 414, {8747, 8760, 8779, 8796, 8809, 8822, 8838}, {8851, 6639, 6644, 6649, 6654, 6659, 6664}, {8856, 8867, 8880, 8895, 8908, 8921, 8934, 8945, 8958, 8973, 8986, 9005}, {9018, 9025, 9032, 9039, 9048, 9057, 9066, 9073, 9082, 9089, 9098, 9107, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {9116, 813, 1946, 1423, 7544, 393, 74, 411, 414, {9139, 9154, 9175, 9190, 9203, 9216, 9231}, {9244, 9249, 9254, 9259, 9264, 9269, 9274}, {9279, 9296, 9305, 9320, 624, 9337, 9352, 9365, 9380, 9397, 9418, 9435}, {9450, 9025, 9457, 9464, 624, 9471, 9478, 9485, 9082, 9492, 9499, 9506, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {9513, 9537, 1414, 1423, 1431, 393, 9551, 411, 414, {9560, 9568, 9579, 9585, 9591, 9600, 1504}, {7000, 7004, 1781, 9606, 7016, 7021, 9610}, {1794, 1801, 7242, 1815, 1821, 9614, 9620, 9626, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 9633, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {5684, 813, 9637, 1423, 1431, 393, 9647, 411, 414, {9655, 9666, 9677, 9688, 9699, 9710, 9716}, {4051, 9725, 9727, 4042, 5887, 9729, 6378}, {9731, 9739, 9748, 9755, 3470, 9762, 9768, 1835, 1842, 9774, 1860, 9783}, {9793, 9798, 9748, 1890, 3470, 9762, 9768, 1902, 9804, 1910, 1914, 9809, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {9814, 9846, 9867, 1423, 387, 9879, 1436, 411, 414, {9897, 9908, 9918, 9927, 9938, 9950, 9961}, {9971, 4051, 9974, 9727, 9976, 9978, 6385}, {9981, 9991, 1809, 10002, 10011, 10017, 10025, 10033, 10041, 10052, 10061, 10071}, {2135, 2139, 2891, 2147, 2078, 10081, 10086, 2159, 2163, 2167, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {10091, 10124, 10146, 378, 387, 10157, 2745, 411, 414, {10172, 10184, 10196, 10208, 10222, 10237, 10250}, {10264, 10267, 10270, 10273, 10276, 5889, 7235}, {10279, 10286, 10294, 10299, 10310, 10320, 10330, 10337, 10349, 10358, 10365, 10376}, {10386, 10390, 10394, 10398, 10402, 10406, 10410, 10414, 10418, 10422, 10426, 10430, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {10434, 813, 2728, 3018, 387, 393, 74, 10459, 10466, {10473, 10489, 10502, 10518, 10535, 10553, 10562}, {10571, 10575, 10579, 10583, 10587, 10591, 10595}, {10599, 10612, 208, 10623, 10634, 10639, 10648, 10659, 10666, 10681, 10692, 10705}, {10718, 10725, 10732, 10739, 10746, 10753, 10760, 10659, 10767, 10774, 10781, 10788, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {10795, 349, 825, 2204, 387, 393, 403, 10819, 10822, {10825, 10838, 10848, 10857, 10867, 10878, 10889}, {10901, 10904, 10909, 10914, 10919, 10924, 10929}, {10934, 10947, 10958, 10968, 10979, 10991, 11003, 11016, 11028, 11041, 11056, 11077}, {11096, 11102, 11108, 11114, 11120, 11126, 11132, 11138, 11144, 11150, 11157, 11164, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {11171, 2960, 1946, 1423, 387, 393, 2745, 11196, 11204, {11212, 11225, 11246, 11265, 11286, 11305, 11318}, {11329, 11336, 11343, 11350, 11357, 11364, 11371}, {11378, 11395, 11412, 11421, 11432, 11443, 11456, 11469, 11484, 11503, 11522, 11539}, {11558, 11565, 11572, 11579, 11586, 11593, 11600, 11607, 11614, 11621, 11628, 11635, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {11171, 2960, 1946, 1423, 387, 393, 2745, 11196, 11642, {11212, 11225, 11246, 11265, 11286, 11305, 11318}, {11329, 11336, 11343, 11350, 11357, 11364, 11371}, {11650, 11665, 11412, 11421, 11432, 11680, 11693, 11469, 11484, 11503, 11522, 11539}, {11706, 11713, 11572, 11579, 11586, 11720, 11727, 11607, 11614, 11621, 11628, 11635, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {11734, 11775, 4694, 378, 387, 11805, 11820, 411, 414, {11833, 11841, 11852, 11862, 11873, 11882, 11891}, {11901, 11904, 11907, 11910, 11913, 11916, 11919}, {11922, 11932, 11940, 11948, 11956, 11964, 11971, 11979, 11987, 11994, 12000, 12007}, {12015, 12019, 1886, 12023, 3470, 12027, 12031, 12035, 12039, 12043, 12047, 12051, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12055, 349, 1946, 378, 387, 393, 403, 411, 414, {12079, 430, 451, 6578, 12092, 12109, 12120}, {520, 528, 536, 12133, 12141, 558, 12149}, {12157, 587, 604, 613, 12172, 12179, 12188, 645, 658, 677, 694, 709}, {12197, 732, 12205, 740, 12213, 12221, 12229, 748, 12237, 764, 772, 12247, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12259, 349, 4694, 3018, 56, 393, 403, 322, 322, {12282, 12289, 12297, 12305, 12314, 12324, 12331}, {2030, 6380, 2036, 12340, 2042, 12343, 2048}, {12346, 12355, 12365, 2072, 8718, 12371, 12377, 12383, 2099, 2109, 2117, 8730}, {2135, 2139, 2891, 2147, 8718, 2151, 2155, 2159, 2163, 2167, 2171, 8743, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1665, 1688, 1700, 12392, 387, 393, 403, 411, 414, {4209, 12401, 12412, 12422, 12432, 12442, 12456}, {4295, 4299, 12468, 12473, 12477, 12482, 12487}, {1794, 1801, 3459, 4344, 3470, 1825, 1830, 1835, 1842, 1852, 1860, 4388}, {1878, 1882, 1886, 1890, 3470, 1894, 1898, 1902, 1906, 1910, 1914, 4418, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12491, 813, 1700, 378, 56, 393, 74, 12515, 12543, {12565, 12584, 12603, 12625, 12644, 12666, 12691}, {12710, 12720, 12730, 12743, 12753, 12766, 12782}, {12792, 12808, 12824, 12840, 12859, 12866, 12876, 12892, 12908, 12930, 12952, 12971}, {12792, 12808, 12824, 12840, 12859, 12866, 12876, 12892, 12908, 12930, 12952, 12971, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12993, 13017, 2728, 13030, 387, 13041, 6933, 411, 414, {13051, 13060, 13069, 13077, 13086, 13095, 13102}, {13111, 13115, 13119, 13123, 13127, 13131, 13135}, {8695, 8703, 13139, 13145, 8718, 2082, 13152, 13158, 13165, 13174, 13181, 13189}, {2135, 2139, 2891, 2147, 8718, 2151, 2155, 13197, 2163, 2167, 2171, 8743, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {13201, 813, 13226, 13234, 13247, 393, 74, 13255, 13297, {13339, 13358, 13377, 13399, 13418, 13440, 13465}, {13484, 13494, 13504, 13517, 13527, 13540, 13556}, {13566, 13594, 13622, 13638, 13657, 13664, 13674, 13690, 13706, 13734, 13756, 13778}, {13803, 13822, 13622, 13638, 13657, 13664, 13674, 13690, 13841, 13857, 13873, 13883, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12491, 813, 13896, 13903, 56, 393, 74, 13915, 13928, {13941, 13960, 13982, 14007, 14023, 14045, 14064}, {14074, 14081, 14088, 14095, 14102, 14109, 14116}, {14120, 14136, 14161, 14180, 14199, 14206, 14219, 14232, 14251, 14282, 14307, 14329}, {14354, 14362, 14376, 14390, 14199, 14206, 14219, 14401, 14409, 14423, 14434, 14442, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12491, 813, 14453, 13903, 56, 393, 74, 14462, 14490, {14512, 14534, 14556, 14581, 14603, 14628, 14656}, {14678, 14688, 14698, 14711, 14721, 14734, 14750}, {14760, 14776, 14801, 14820, 14842, 14849, 14862, 14875, 14894, 14925, 14950, 14969}, {14760, 14776, 14801, 14820, 14842, 14849, 14862, 14875, 14894, 14925, 14950, 14969, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {13201, 813, 13896, 13234, 13247, 393, 74, 14994, 15022, {15044, 15063, 15082, 15104, 15123, 15145, 15170}, {15189, 15194, 15202, 15210, 15218, 15226, 15234}, {15245, 15261, 15286, 15305, 15327, 15334, 15347, 15360, 15379, 15407, 15432, 15454}, {15245, 15261, 15286, 15305, 15327, 15334, 15347, 15360, 15379, 15407, 15432, 15454, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12491, 813, 13896, 13903, 56, 393, 74, 15479, 15491, {12565, 12584, 15503, 12625, 12644, 12666, 12691}, {12710, 12720, 15525, 12743, 12753, 12766, 12782}, {15538, 15563, 12824, 15588, 15607, 12866, 15614, 15627, 15643, 15671, 15693, 15721}, {15538, 15563, 12824, 15588, 15607, 12866, 15614, 15627, 15643, 15671, 15693, 15721, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12055, 349, 15743, 15752, 387, 393, 403, 411, 414, {15763, 15771, 15776, 15783, 15793, 15799, 15806}, {15814, 15818, 2891, 15822, 15827, 15831, 15835}, {15840, 15848, 15857, 15863, 15869, 15874, 15880, 15886, 15893, 15902, 15910, 15919}, {15928, 2139, 2891, 15932, 2078, 15936, 15941, 13197, 15945, 15949, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12491, 813, 13896, 13903, 56, 393, 74, 15479, 15491, {15953, 12584, 15981, 12625, 12644, 12666, 12691}, {12710, 12720, 15525, 12743, 12753, 12766, 12782}, {15538, 16000, 12824, 15588, 15607, 12866, 15614, 15627, 15643, 15671, 15693, 15721}, {15538, 15563, 12824, 15588, 15607, 12866, 15614, 15627, 15643, 15671, 15693, 15721, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 37, 46, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16052, 1096, 16097, 16104, 16127, 1157, 1168, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 825, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {3557,3567},{0},{0},{0}},
+       {3575, 813, 825, 378, 387, 393, 74, 411, 414, {3598, 3616, 3630, 3648, 3666, 3684, 3700}, {3707, 3710, 3713, 3716, 3719, 3722, 3725}, {3728, 3739, 3752, 3759, 3770, 3777, 3786, 3795, 3808, 3821, 3836, 3849}, {3860, 3867, 3752, 3874, 3770, 3881, 3888, 3895, 3902, 3909, 3916, 3923, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {3930, 3954, 3968, 1423, 1431, 3982, 2745, 3993, 3996, {3999, 4009, 4017, 4022, 4029, 4042, 4050}, {1639, 4058, 4060, 4062, 4066, 4069, 4071}, {4075, 4083, 4092, 4101, 4110, 4117, 4125, 4133, 4143, 4154, 1860, 1869}, {4163, 4168, 4174, 4181, 4187, 4193, 4199, 4205, 4210, 4217, 1041, 4222, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1922, 1401, 1414, 378, 387, 393, 1436, 411, 414, {4227, 4238, 4249, 4263, 4277, 4289, 4301}, {4313, 4317, 4322, 4327, 4332, 4336, 4341}, {4345, 4353, 3459, 4362, 4369, 4374, 4381, 4388, 1842, 4154, 4396, 4406}, {1878, 1882, 1886, 1890, 4369, 4415, 4420, 4425, 1906, 1910, 4431, 4436, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {4440, 349, 825, 4463, 387, 393, 74, 4471, 4474, {4477, 4486, 4494, 4503, 4514, 4523, 4532}, {4539, 4543, 1886, 4547, 4551, 4555, 4559}, {4563, 4571, 4580, 4586, 4593, 4600, 4607, 4614, 4621, 4631, 989, 4639}, {4648, 1882, 1886, 1890, 4652, 4656, 4660, 4664, 4668, 4672, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {4680, 1096, 4712, 4723, 1431, 1157, 1168, 4733, 4740, {4747, 4757, 4767, 4777, 4787, 4797, 4807}, {1260, 4817, 4821, 4825, 4829, 4833, 4837}, {4841, 4846, 4851, 4856, 4861, 4866, 4871, 4876, 4881, 4886, 4892, 4898}, {4904, 4906, 4908, 4910, 4912, 4914, 4916, 4918, 4920, 4922, 4925, 4928, 322}, 0, 0, 323, 325, {4712,2930,4931,1118,4938,4957,4974},{1096,4993,5017,5044},{1431,387,5073,5081},{1423,378,5090,5101}},
+       {5113, 5163, 4712, 5187, 5073, 5213, 5225, 5234, 5241, {5248, 5258, 5268, 5278, 5288, 5298, 5308}, {5318, 5322, 5326, 5330, 5334, 5338, 5342}, {5346, 5351, 5356, 5361, 5366, 5371, 5376, 5381, 5386, 5391, 5397, 5403}, {5346, 5351, 5356, 5361, 5366, 5371, 5376, 5381, 5386, 5391, 5397, 5403, 322}, 0, 0, 323, 325, {4712,2930,4931,1118,5409,5422},{5163,5433,5459,5481},{1431,387,5505,5519,5534,5073,5081,5550,5567,5585},{5187,5604,5626,1423,378,5650,5675,5090,5101}},
+       {5702, 813, 5724, 1423, 1431, 393, 74, 411, 414, {5733, 5740, 5748, 5756, 5765, 5775, 5783}, {5792, 3159, 5795, 5798, 5801, 5804, 5807}, {5810, 5818, 5827, 1815, 5833, 1825, 1830, 5837, 1842, 1852, 1860, 1869}, {1878, 1882, 5846, 1890, 5833, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 2939, 378, 387, 393, 74, 411, 414, {5850, 5860, 5874, 5881, 5888, 5897, 1504}, {5905, 5907, 5910, 5913, 5917, 5920, 2030}, {5923, 5932, 5937, 5944, 1821, 5954, 5963, 5970, 5980, 5990, 1609, 6003}, {6013, 6017, 1886, 6021, 1821, 6025, 6029, 6033, 6037, 6041, 6046, 6050, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {6054, 6093, 37, 378, 387, 6115, 6130, 411, 414, {6142, 6150, 6164, 6177, 6190, 6203, 6215}, {4539, 6223, 6227, 6231, 6235, 6239, 6243}, {6248, 6256, 6266, 943, 6273, 6278, 6284, 4614, 6290, 6299, 6307, 6316}, {1878, 6325, 1886, 6329, 3470, 1894, 1898, 4664, 4668, 6333, 1914, 6337, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 1946, 378, 387, 393, 74, 411, 414, {6341, 6351, 6356, 6363, 6372, 6376, 6383}, {6394, 6396, 6398, 2039, 6401, 1639, 6403}, {6405, 6414, 6424, 6431, 3470, 6439, 6445, 1835, 6451, 6462, 6472, 6482}, {6492, 2139, 2891, 2147, 2078, 6496, 6500, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {6504, 6532, 1946, 1423, 1431, 393, 74, 411, 414, {6550, 6573, 451, 6596, 6607, 6622, 6637}, {6652, 6657, 6662, 6667, 6672, 6677, 6682}, {6687, 6700, 6715, 6724, 6737, 6744, 6753, 6762, 6775, 6792, 6807, 6820}, {6835, 6842, 6849, 6856, 624, 6863, 6870, 6877, 6884, 6891, 6898, 6905, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {6912, 6937, 1414, 1423, 387, 3982, 6951, 411, 414, {6959, 6968, 6980, 6987, 6995, 7005, 7011}, {7018, 7022, 7026, 7030, 7034, 7039, 7043}, {7047, 7057, 7066, 7074, 7082, 7090, 7097, 7104, 7112, 1609, 7118, 7126}, {7135, 7139, 7143, 7148, 7152, 6029, 7156, 7160, 7164, 6046, 7168, 7172, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1378, 1401, 7176, 1423, 1431, 393, 1436, 411, 414, {7187, 7195, 7204, 7211, 7218, 7227, 7234}, {7241, 7244, 7247, 7250, 7253, 7257, 2030}, {4075, 4083, 7260, 4362, 7266, 4415, 4420, 1835, 1842, 4154, 1860, 1869}, {1878, 1882, 1886, 1890, 7266, 4415, 4420, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {7271, 349, 2939, 7296, 7307, 393, 403, 7314, 7317, {7320, 7327, 7336, 7345, 7357, 7365, 7374}, {7384, 7388, 2891, 7393, 7398, 7402, 7406}, {7410, 7416, 3459, 7423, 1821, 7429, 7437, 7444, 7450, 7458, 7464, 7472}, {2135, 7480, 2891, 7484, 7488, 7492, 7496, 7500, 7406, 7504, 7508, 7513, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {7517, 7545, 2939, 378, 7562, 393, 74, 7568, 7571, {7574, 7582, 7590, 1734, 1741, 1749, 7597}, {7605, 7609, 3162, 7613, 3168, 7616, 7619}, {5810, 5818, 3459, 1815, 1821, 1825, 1830, 7623, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {7631, 813, 37, 1423, 1431, 393, 74, 7684, 7715, {7746, 7777, 7805, 7833, 7852, 7886, 7911}, {7936, 7944, 7949, 7954, 7959, 7967, 7972}, {7977, 7996, 8027, 8046, 8065, 8087, 8112, 8134, 8156, 8178, 8197, 8225}, {8247, 8256, 8265, 8277, 8289, 8298, 8310, 8319, 8328, 8337, 8346, 8355, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {8364, 8393, 1946, 378, 387, 393, 403, 411, 414, {8411, 8417, 8427, 8433, 8444, 8454, 8459}, {8469, 8473, 8477, 8481, 8486, 8490, 8494}, {8498, 8503, 8510, 8515, 8521, 8528, 8536, 8543, 8552, 8559, 8564, 8571}, {8579, 8583, 2891, 8588, 2860, 8592, 8596, 8600, 8605, 8609, 8613, 8617, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {8621, 349, 825, 1423, 1431, 393, 403, 411, 414, {8642, 8649, 8655, 8662, 8667, 8673, 8679}, {8685, 8689, 8693, 8697, 8701, 8705, 8709}, {8713, 8721, 8730, 2072, 8736, 2082, 2087, 8740, 2099, 2109, 2117, 8748}, {2135, 2139, 2891, 2147, 8736, 2151, 2155, 8757, 2163, 2167, 2171, 8761, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 1946, 1423, 387, 393, 74, 411, 414, {8765, 8778, 8797, 8814, 8827, 8840, 8856}, {8869, 6657, 6662, 6667, 6672, 6677, 6682}, {8874, 8885, 8898, 8913, 8926, 8939, 8952, 8963, 8976, 8991, 9004, 9023}, {9036, 9043, 9050, 9057, 9066, 9075, 9084, 9091, 9100, 9107, 9116, 9125, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {9134, 813, 1946, 1423, 7562, 393, 74, 411, 414, {9157, 9172, 9193, 9208, 9221, 9234, 9249}, {9262, 9267, 9272, 9277, 9282, 9287, 9292}, {9297, 9314, 9323, 9338, 624, 9355, 9370, 9383, 9398, 9415, 9436, 9453}, {9468, 9043, 9475, 9482, 624, 9489, 9496, 9503, 9100, 9510, 9517, 9524, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {9531, 9555, 1414, 1423, 1431, 393, 9569, 411, 414, {9578, 9586, 9597, 9603, 9609, 9618, 1504}, {7018, 7022, 1781, 9624, 7034, 7039, 9628}, {1794, 1801, 7260, 1815, 1821, 9632, 9638, 9644, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 9651, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {5702, 813, 9655, 1423, 1431, 393, 9665, 411, 414, {9673, 9684, 9695, 9706, 9717, 9728, 9734}, {4069, 9743, 9745, 4060, 5905, 9747, 6396}, {9749, 9757, 9766, 9773, 3470, 9780, 9786, 1835, 1842, 9792, 1860, 9801}, {9811, 9816, 9766, 1890, 3470, 9780, 9786, 1902, 9822, 1910, 1914, 9827, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {9832, 9864, 9885, 1423, 387, 9897, 1436, 411, 414, {9915, 9926, 9936, 9945, 9956, 9968, 9979}, {9989, 4069, 9992, 9745, 9994, 9996, 6403}, {9999, 10009, 1809, 10020, 10029, 10035, 10043, 10051, 10059, 10070, 10079, 10089}, {2135, 2139, 2891, 2147, 2078, 10099, 10104, 2159, 2163, 2167, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {10109, 10142, 10164, 378, 387, 10175, 2745, 411, 414, {10190, 10202, 10214, 10226, 10240, 10255, 10268}, {10282, 10285, 10288, 10291, 10294, 5907, 7253}, {10297, 10304, 10312, 10317, 10328, 10338, 10348, 10355, 10367, 10376, 10383, 10394}, {10404, 10408, 10412, 10416, 10420, 10424, 10428, 10432, 10436, 10440, 10444, 10448, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {10452, 813, 2728, 3018, 387, 393, 74, 10477, 10484, {10491, 10507, 10520, 10536, 10553, 10571, 10580}, {10589, 10593, 10597, 10601, 10605, 10609, 10613}, {10617, 10630, 208, 10641, 10652, 10657, 10666, 10677, 10684, 10699, 10710, 10723}, {10736, 10743, 10750, 10757, 10764, 10771, 10778, 10677, 10785, 10792, 10799, 10806, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {10813, 349, 825, 2204, 387, 393, 403, 10837, 10840, {10843, 10856, 10866, 10875, 10885, 10896, 10907}, {10919, 10922, 10927, 10932, 10937, 10942, 10947}, {10952, 10965, 10976, 10986, 10997, 11009, 11021, 11034, 11046, 11059, 11074, 11095}, {11114, 11120, 11126, 11132, 11138, 11144, 11150, 11156, 11162, 11168, 11175, 11182, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {11189, 2960, 1946, 1423, 387, 393, 2745, 11214, 11222, {11230, 11243, 11264, 11283, 11304, 11323, 11336}, {11347, 11354, 11361, 11368, 11375, 11382, 11389}, {11396, 11413, 11430, 11439, 11450, 11461, 11474, 11487, 11502, 11521, 11540, 11557}, {11576, 11583, 11590, 11597, 11604, 11611, 11618, 11625, 11632, 11639, 11646, 11653, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {11189, 2960, 1946, 1423, 387, 393, 2745, 11214, 11660, {11230, 11243, 11264, 11283, 11304, 11323, 11336}, {11347, 11354, 11361, 11368, 11375, 11382, 11389}, {11668, 11683, 11430, 11439, 11450, 11698, 11711, 11487, 11502, 11521, 11540, 11557}, {11724, 11731, 11590, 11597, 11604, 11738, 11745, 11625, 11632, 11639, 11646, 11653, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {11752, 11793, 4712, 378, 387, 11823, 11838, 411, 414, {11851, 11859, 11870, 11880, 11891, 11900, 11909}, {11919, 11922, 11925, 11928, 11931, 11934, 11937}, {11940, 11950, 11958, 11966, 11974, 11982, 11989, 11997, 12005, 12012, 12018, 12025}, {12033, 12037, 1886, 12041, 3470, 12045, 12049, 12053, 12057, 12061, 12065, 12069, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12073, 349, 1946, 378, 387, 393, 403, 411, 414, {12097, 430, 451, 6596, 12110, 12127, 12138}, {520, 528, 536, 12151, 12159, 558, 12167}, {12175, 587, 604, 613, 12190, 12197, 12206, 645, 658, 677, 694, 709}, {12215, 732, 12223, 740, 12231, 12239, 12247, 748, 12255, 764, 772, 12265, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12277, 349, 4712, 3018, 56, 393, 403, 322, 322, {12300, 12307, 12315, 12323, 12332, 12342, 12349}, {2030, 6398, 2036, 12358, 2042, 12361, 2048}, {12364, 12373, 12383, 2072, 8736, 12389, 12395, 12401, 2099, 2109, 2117, 8748}, {2135, 2139, 2891, 2147, 8736, 2151, 2155, 2159, 2163, 2167, 2171, 8761, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1665, 1688, 1700, 12410, 387, 393, 403, 411, 414, {4227, 12419, 12430, 12440, 12450, 12460, 12474}, {4313, 4317, 12486, 12491, 12495, 12500, 12505}, {1794, 1801, 3459, 4362, 3470, 1825, 1830, 1835, 1842, 1852, 1860, 4406}, {1878, 1882, 1886, 1890, 3470, 1894, 1898, 1902, 1906, 1910, 1914, 4436, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12509, 813, 1700, 378, 56, 393, 74, 12533, 12561, {12583, 12602, 12621, 12643, 12662, 12684, 12709}, {12728, 12738, 12748, 12761, 12771, 12784, 12800}, {12810, 12826, 12842, 12858, 12877, 12884, 12894, 12910, 12926, 12948, 12970, 12989}, {12810, 12826, 12842, 12858, 12877, 12884, 12894, 12910, 12926, 12948, 12970, 12989, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {13011, 13035, 2728, 13048, 387, 13059, 6951, 411, 414, {13069, 13078, 13087, 13095, 13104, 13113, 13120}, {13129, 13133, 13137, 13141, 13145, 13149, 13153}, {8713, 8721, 13157, 13163, 8736, 2082, 13170, 13176, 13183, 13192, 13199, 13207}, {2135, 2139, 2891, 2147, 8736, 2151, 2155, 13215, 2163, 2167, 2171, 8761, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {13219, 813, 13244, 13252, 13265, 393, 74, 13273, 13315, {13357, 13376, 13395, 13417, 13436, 13458, 13483}, {13502, 13512, 13522, 13535, 13545, 13558, 13574}, {13584, 13612, 13640, 13656, 13675, 13682, 13692, 13708, 13724, 13752, 13774, 13796}, {13821, 13840, 13640, 13656, 13675, 13682, 13692, 13708, 13859, 13875, 13891, 13901, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12509, 813, 13914, 13921, 56, 393, 74, 13933, 13946, {13959, 13978, 14000, 14025, 14041, 14063, 14082}, {14092, 14099, 14106, 14113, 14120, 14127, 14134}, {14138, 14154, 14179, 14198, 14217, 14224, 14237, 14250, 14269, 14300, 14325, 14347}, {14372, 14380, 14394, 14408, 14217, 14224, 14237, 14419, 14427, 14441, 14452, 14460, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12509, 813, 14471, 13921, 56, 393, 74, 14480, 14508, {14530, 14552, 14574, 14599, 14621, 14646, 14674}, {14696, 14706, 14716, 14729, 14739, 14752, 14768}, {14778, 14794, 14819, 14838, 14860, 14867, 14880, 14893, 14912, 14943, 14968, 14987}, {14778, 14794, 14819, 14838, 14860, 14867, 14880, 14893, 14912, 14943, 14968, 14987, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {13219, 813, 13914, 13252, 13265, 393, 74, 15012, 15040, {15062, 15081, 15100, 15122, 15141, 15163, 15188}, {15207, 15212, 15220, 15228, 15236, 15244, 15252}, {15263, 15279, 15304, 15323, 15345, 15352, 15365, 15378, 15397, 15425, 15450, 15472}, {15263, 15279, 15304, 15323, 15345, 15352, 15365, 15378, 15397, 15425, 15450, 15472, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12509, 813, 13914, 13921, 56, 393, 74, 15497, 15509, {12583, 12602, 15521, 12643, 12662, 12684, 12709}, {12728, 12738, 15543, 12761, 12771, 12784, 12800}, {15556, 15581, 12842, 15606, 15625, 12884, 15632, 15645, 15661, 15689, 15711, 15739}, {15556, 15581, 12842, 15606, 15625, 12884, 15632, 15645, 15661, 15689, 15711, 15739, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12073, 349, 15761, 15770, 387, 393, 403, 411, 414, {15781, 15789, 15794, 15801, 15811, 15817, 15824}, {15832, 15836, 2891, 15840, 15845, 15849, 15853}, {15858, 15866, 15875, 15881, 15887, 15892, 15898, 15904, 15911, 15920, 15928, 15937}, {15946, 2139, 2891, 15950, 2078, 15954, 15959, 13215, 15963, 15967, 2171, 2899, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12509, 813, 13914, 13921, 56, 393, 74, 15497, 15509, {15971, 12602, 15999, 12643, 12662, 12684, 12709}, {12728, 12738, 15543, 12761, 12771, 12784, 12800}, {15556, 16018, 12842, 15606, 15625, 12884, 15632, 15645, 15661, 15689, 15711, 15739}, {15556, 15581, 12842, 15606, 15625, 12884, 15632, 15645, 15661, 15689, 15711, 15739, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 37, 46, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16070, 1096, 16115, 16122, 16145, 1157, 1168, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {1922, 1401, 1946, 378, 387, 393, 1436, 1957, 1963, {1970, 1978, 1985, 1994, 2003, 2014, 2022}, {2030, 2033, 2036, 2039, 2042, 2045, 2048}, {2051, 2058, 2066, 2072, 2078, 2082, 2087, 2092, 2099, 2109, 2117, 2126}, {2135, 2139, 2143, 2147, 2078, 2151, 2155, 2159, 2163, 2167, 2171, 2175, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {790, 813, 825, 378, 387, 393, 74, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 16304, 1423, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 1946, 378, 387, 393, 74, 4453, 4456, {4459, 4468, 4476, 4485, 4496, 4505, 4514}, {4521, 4525, 1886, 4529, 4533, 4537, 4541}, {4545, 4553, 4562, 4568, 4575, 4582, 4589, 4596, 4603, 4613, 989, 4621}, {4630, 1882, 1886, 1890, 4634, 4638, 4642, 4646, 4650, 4654, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 16304, 1423, 387, 393, 74, 411, 414, {5715, 5722, 5730, 5738, 5747, 5757, 5765}, {5774, 3159, 5777, 5780, 5783, 5786, 5789}, {5792, 5800, 5809, 1815, 5815, 1825, 1830, 5819, 1842, 1852, 1860, 1869}, {1878, 1882, 5828, 1890, 5815, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16314, 6075, 1700, 1423, 387, 6097, 6112, 411, 414, {6124, 6132, 6146, 6159, 6172, 6185, 6197}, {4521, 6205, 6209, 6213, 6217, 6221, 6225}, {6230, 6238, 6248, 943, 6255, 6260, 6266, 4596, 6272, 6281, 6289, 6298}, {1878, 6307, 1886, 6311, 3470, 1894, 1898, 4646, 4650, 6315, 1914, 6319, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {7499, 7527, 1414, 378, 7544, 393, 74, 7550, 7553, {7556, 7564, 7572, 1734, 1741, 1749, 7579}, {7587, 7591, 3162, 7595, 3168, 7598, 7601}, {5792, 5800, 3459, 1815, 1821, 1825, 1830, 7605, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16347, 4975, 16394, 1127, 16127, 16414, 16426, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {4823, 4828, 4833, 4838, 4843, 4848, 4853, 4858, 4863, 4868, 4874, 4880, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16436, 9537, 1946, 378, 387, 393, 9551, 1957, 1963, {1970, 1978, 1985, 1994, 2003, 2014, 2022}, {2030, 2033, 2036, 2039, 2042, 2045, 2048}, {16461, 2058, 2066, 2072, 2078, 2082, 2087, 2092, 2099, 2109, 2117, 2126}, {16469, 2139, 16474, 2147, 2078, 2151, 2155, 2159, 2163, 2167, 2171, 2175, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16479, 813, 16304, 2204, 56, 393, 74, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16314, 6075, 825, 1423, 1431, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 2939, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16501, 16524, 15743, 16536, 16547, 393, 403, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 3557, 1423, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {3557,3567},{0},{0},{0}},
+       {790, 813, 1946, 378, 387, 393, 74, 4471, 4474, {4477, 4486, 4494, 4503, 4514, 4523, 4532}, {4539, 4543, 1886, 4547, 4551, 4555, 4559}, {4563, 4571, 4580, 4586, 4593, 4600, 4607, 4614, 4621, 4631, 989, 4639}, {4648, 1882, 1886, 1890, 4652, 4656, 4660, 4664, 4668, 4672, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 3557, 1423, 387, 393, 74, 411, 414, {5733, 5740, 5748, 5756, 5765, 5775, 5783}, {5792, 3159, 5795, 5798, 5801, 5804, 5807}, {5810, 5818, 5827, 1815, 5833, 1825, 1830, 5837, 1842, 1852, 1860, 1869}, {1878, 1882, 5846, 1890, 5833, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16322, 6093, 1700, 1423, 387, 6115, 6130, 411, 414, {6142, 6150, 6164, 6177, 6190, 6203, 6215}, {4539, 6223, 6227, 6231, 6235, 6239, 6243}, {6248, 6256, 6266, 943, 6273, 6278, 6284, 4614, 6290, 6299, 6307, 6316}, {1878, 6325, 1886, 6329, 3470, 1894, 1898, 4664, 4668, 6333, 1914, 6337, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {7517, 7545, 1414, 378, 7562, 393, 74, 7568, 7571, {7574, 7582, 7590, 1734, 1741, 1749, 7597}, {7605, 7609, 3162, 7613, 3168, 7616, 7619}, {5810, 5818, 3459, 1815, 1821, 1825, 1830, 7623, 1842, 1852, 1860, 1869}, {1878, 1882, 1886, 1890, 1821, 1894, 1898, 1902, 1906, 1910, 1914, 1918, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16355, 4993, 16402, 1127, 16145, 16422, 16434, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {4841, 4846, 4851, 4856, 4861, 4866, 4871, 4876, 4881, 4886, 4892, 4898, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16444, 9555, 1946, 378, 387, 393, 9569, 1957, 1963, {1970, 1978, 1985, 1994, 2003, 2014, 2022}, {2030, 2033, 2036, 2039, 2042, 2045, 2048}, {16469, 2058, 2066, 2072, 2078, 2082, 2087, 2092, 2099, 2109, 2117, 2126}, {16477, 2139, 16482, 2147, 2078, 2151, 2155, 2159, 2163, 2167, 2171, 2175, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16487, 813, 3557, 2204, 56, 393, 74, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16322, 6093, 825, 1423, 1431, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 2939, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {3557,3567},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16509, 16532, 15761, 16544, 16555, 393, 403, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {1922, 1401, 1946, 378, 387, 393, 1436, 1957, 1963, {1970, 1978, 1985, 1994, 2003, 2014, 2022}, {2030, 2033, 2036, 2039, 2042, 2045, 2048}, {2051, 2058, 2066, 2072, 2078, 2082, 2087, 2092, 2099, 2109, 2117, 2126}, {2135, 2139, 2143, 2147, 2078, 2151, 2155, 2159, 2163, 2167, 2171, 2175, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {2683, 16555, 825, 2204, 56, 393, 2745, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 1946, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 1700, 1423, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16347, 4975, 16394, 1127, 16127, 16414, 16426, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {4823, 4828, 4833, 4838, 4843, 4848, 4853, 4858, 4863, 4868, 4874, 4880, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16479, 813, 16304, 2204, 56, 393, 74, 16168, 16173, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 825, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 1700, 1423, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {790, 813, 825, 378, 387, 393, 74, 16168, 16173, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16133, 6075, 2919, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {2683, 16563, 825, 2204, 56, 393, 2745, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 1946, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {3557,3567},{0},{0},{0}},
+       {1, 24, 1700, 1423, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16355, 4993, 16402, 1127, 16145, 16422, 16434, 1176, 1183, {1190, 1200, 1210, 1220, 1230, 1240, 1250}, {1260, 1264, 1268, 1272, 1276, 1280, 1284}, {1288, 1295, 1302, 1309, 1316, 1323, 1330, 1337, 1344, 1351, 1358, 1368}, {4841, 4846, 4851, 4856, 4861, 4866, 4871, 4876, 4881, 4886, 4892, 4898, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16487, 813, 3557, 2204, 56, 393, 74, 16186, 16191, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 825, 378, 387, 393, 74, 411, 414, {3355, 3364, 3370, 3376, 3385, 3391, 3400}, {3407, 3412, 3417, 3422, 3427, 3432, 3437}, {3442, 3450, 3459, 3464, 3470, 3474, 3479, 3487, 3493, 3503, 989, 3511}, {3521, 3527, 3459, 3534, 3470, 3474, 3539, 3487, 3545, 1036, 1041, 3551, 322}, 0, 0, 323, 325, {3557,3567},{0},{0},{0}},
+       {1, 24, 1700, 1423, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {790, 813, 825, 378, 387, 393, 74, 16186, 16191, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16151, 6093, 2919, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {1, 24, 1700, 1423, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12259, 349, 4694, 3018, 56, 393, 403, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12277, 349, 4712, 3018, 56, 393, 403, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16568, 6075, 825, 3018, 1431, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16600, 16624, 16633, 16642, 16653, 16662, 16675, 16684, 16689, 16700, 16722, 16746}, {16600, 16624, 16633, 16642, 16653, 16662, 16675, 16684, 16689, 16700, 16722, 16746, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16600, 16624, 16633, 16642, 16768, 16662, 16675, 16684, 16689, 16700, 16722, 16746}, {16600, 16624, 16633, 16642, 16768, 16662, 16675, 16684, 16689, 16700, 16722, 16746, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16568, 6075, 825, 3018, 387, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16600, 16624, 16633, 16642, 16653, 16662, 16675, 16684, 16689, 16700, 16722, 16746}, {16600, 16624, 16633, 16642, 16653, 16662, 16675, 16684, 16689, 16700, 16722, 16746, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {12259, 349, 2728, 2204, 56, 393, 403, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16568, 6075, 825, 1423, 1431, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {2683, 16555, 2728, 2204, 56, 393, 2745, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
-       {16568, 6075, 1700, 1423, 1431, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16031, 16034, 16037, 16040, 16043, 16046, 16049}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16576, 6093, 825, 3018, 1431, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16608, 16632, 16641, 16650, 16661, 16670, 16683, 16692, 16697, 16708, 16730, 16754}, {16608, 16632, 16641, 16650, 16661, 16670, 16683, 16692, 16697, 16708, 16730, 16754, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16608, 16632, 16641, 16650, 16776, 16670, 16683, 16692, 16697, 16708, 16730, 16754}, {16608, 16632, 16641, 16650, 16776, 16670, 16683, 16692, 16697, 16708, 16730, 16754, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16576, 6093, 825, 3018, 387, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {16608, 16632, 16641, 16650, 16661, 16670, 16683, 16692, 16697, 16708, 16730, 16754}, {16608, 16632, 16641, 16650, 16661, 16670, 16683, 16692, 16697, 16708, 16730, 16754, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {12277, 349, 2728, 2204, 56, 393, 403, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16576, 6093, 825, 1423, 1431, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {2683, 16563, 2728, 2204, 56, 393, 2745, 411, 414, {2752, 2759, 2766, 2774, 2784, 2793, 2800}, {2809, 2813, 2817, 2821, 2825, 2829, 2833}, {2837, 2845, 2854, 2072, 2860, 2864, 2869, 2092, 2099, 2874, 2117, 2882}, {2135, 2139, 2891, 2147, 2860, 2151, 2155, 2159, 2163, 2895, 2171, 2899, 322}, 0, 0, 323, 325, {2728,2903,2903,2910,2919,2930,2939,2950},{2708,2960,2974,2994},{2737,3009,1431,387},{2204,3018,1423,378}},
+       {16576, 6093, 1700, 1423, 1431, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {16049, 16052, 16055, 16058, 16061, 16064, 16067}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
        {1, 24, 825, 3018, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309}, {184, 195, 208, 217, 228, 237, 248, 259, 270, 283, 296, 309, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16777, 16813, 825, 3018, 13247, 6097, 16836, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
-       {16133, 6075, 825, 3018, 13247, 6097, 6112, 16168, 16173, {6124, 16178, 16184, 16191, 16202, 16209, 6197}, {4521, 4525, 1886, 16217, 16222, 16226, 6225}, {16230, 16236, 4562, 943, 16244, 16249, 16255, 4596, 16261, 981, 16272, 16282}, {16292, 1882, 1886, 6311, 16296, 1894, 1898, 4646, 1906, 16300, 1914, 4658, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16785, 16821, 825, 3018, 13265, 6115, 16844, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
+       {16151, 6093, 825, 3018, 13265, 6115, 6130, 16186, 16191, {6142, 16196, 16202, 16209, 16220, 16227, 6215}, {4539, 4543, 1886, 16235, 16240, 16244, 6243}, {16248, 16254, 4580, 943, 16262, 16267, 16273, 4614, 16279, 981, 16290, 16300}, {16310, 1882, 1886, 6329, 16314, 1894, 1898, 4664, 1906, 16318, 1914, 4676, 322}, 0, 0, 323, 325, {0},{0},{0},{0}},
 };
 
 
 static const NumberFormatEntry number_format_entries [] = {
-       {16849, 16852, 16849, 16852, 16849, 16852, 16855, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16894, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16908, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16935, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16939, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 1, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16944, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16948, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16951, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16955, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16957, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16961, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16965, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16969, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16973, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16977, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 10264, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16980, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16939, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16984, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16988, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16991, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16994, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 0, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17002, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16939, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 17006, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17009, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {2, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17012, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 0, 3, 2, 2, 1, 0, 2, 2, {5, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17016, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 0, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 0, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17019, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 0, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 9729, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16939, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17023, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17030, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17034, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17041, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17048, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17023, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17023, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17023, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17056, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17066, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 17070, 16902, 17070, 16902, 17070, 17072, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17077, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 17070, 16902, 17070, 16902, 17070, 17072, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17080, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17090, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16891, 16889, 16891, 16889, 16891, 16942, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17094, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17104, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17107, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 17070, 16902, 17070, 16902, 17070, 17109, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17114, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 4051, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17124, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16904, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17128, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16904, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17138, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17141, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 9729, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17151, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17155, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17165, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17168, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16942, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17178, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17188, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17191, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16942, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17201, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17211, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17214, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17218, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17228, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 16942, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17232, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17242, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17246, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17256, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 12, 2, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16849, 16852, 16849, 16852, 16849, 16852, 17259, 16865, 16868, 16872, 16876, 16881, 16885, 16887, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16889, 16902, 16889, 16902, 16889, 16902, 17269, 16900, 16868, 16872, 16876, 16881, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17272, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17276, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 17279, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {16902, 16889, 16902, 16889, 16902, 16889, 16942, 16900, 16912, 16872, 16916, 16926, 16885, 16887, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 16863, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16902, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16916, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16943, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16947, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 1, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16952, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16956, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16959, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16963, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16965, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16969, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16973, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16977, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16981, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16985, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 10282, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16988, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16947, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16992, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16996, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16999, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 17002, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 0, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17010, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16947, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 17014, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17017, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {2, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17020, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 0, 3, 2, 2, 1, 0, 2, 2, {5, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17024, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 0, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 0, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17027, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 0, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 9747, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16947, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17031, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17038, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17042, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17049, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17056, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17031, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17031, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17031, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17064, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17074, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 17078, 16910, 17078, 16910, 17078, 17080, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17085, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 17078, 16910, 17078, 16910, 17078, 17080, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17088, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17098, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16899, 16897, 16899, 16897, 16899, 16950, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17102, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17112, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17115, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 17078, 16910, 17078, 16910, 17078, 17117, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17122, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 4069, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17132, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16912, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17136, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16912, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17146, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17149, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 9747, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17159, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17163, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17173, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17176, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16950, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17186, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17196, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17199, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16950, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17209, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17219, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17222, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17226, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17236, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 16950, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17240, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17250, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17254, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17264, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 12, 2, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16857, 16860, 16857, 16860, 16857, 16860, 17267, 16873, 16876, 16880, 16884, 16889, 16893, 16895, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16897, 16910, 16897, 16910, 16897, 16910, 17277, 16908, 16876, 16880, 16884, 16889, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17280, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17284, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 17287, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {16910, 16897, 16910, 16897, 16910, 16897, 16950, 16908, 16920, 16880, 16924, 16934, 16893, 16895, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
 };
 
 
 static const CultureInfoEntry culture_entries [] = {
-       {0x0001, 0x007F, 0x0401, 17282, 17285, 17285, 17285, 17292, 17307, 17311, 17282, {0, 0, 0, 0, 0}, -1, -1, { 1256, 20420, 10004, 720, ';' }},
-       {0x0002, 0x007F, 0x0402, 17315, 17318, 17318, 17318, 17328, 17347, 17351, 17315, {0, 0, 0, 0, 0}, -1, -1, { 1251, 20420, 10007, 866, ';' }},
-       {0x0003, 0x007F, 0x0403, 17355, 17358, 17358, 17358, 17366, 17374, 17378, 17355, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
-       {0x0004, 0x007F, 0x0000, 17382, 17389, 17389, 17389, 17397, 17404, 17408, 17412, {0, 0, 0, 0, 0}, -1, -1, { 936, 500, 10008, 936, ',' }},
-       {0x0005, 0x007F, 0x0405, 17415, 17418, 17418, 17418, 17424, 17434, 17438, 17415, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10029, 852, ';' }},
-       {0x0006, 0x007F, 0x0406, 17442, 17445, 17445, 17445, 17452, 17458, 17462, 17442, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20277, 10000, 850, ';' }},
-       {0x0007, 0x007F, 0x0407, 17466, 17469, 17469, 17469, 17476, 17484, 17488, 17466, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20273, 10000, 850, ';' }},
-       {0x0008, 0x007F, 0x0408, 17492, 17495, 17495, 17495, 17501, 17518, 17522, 17492, {0, 0, 0, 0, 0}, -1, -1, { 1253, 20273, 10006, 737, ';' }},
-       {0x0009, 0x007F, 0x0409, 17526, 17529, 17529, 17529, 17529, 17537, 17541, 17526, {0, 0, 0, 0, 0}, -1, -1, { 1252, 37, 10000, 437, ',' }},
-       {0x000A, 0x007F, 0x0C0A, 17545, 17548, 17548, 17548, 17556, 17565, 17569, 17545, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20284, 10000, 850, ';' }},
-       {0x000B, 0x007F, 0x040B, 17573, 17576, 17576, 17576, 17584, 17590, 17594, 17573, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20278, 10000, 850, ';' }},
-       {0x000C, 0x007F, 0x040C, 7598, 17598, 17598, 17598, 17605, 17615, 17619, 7598, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20297, 10000, 850, ';' }},
-       {0x000D, 0x007F, 0x040D, 17623, 17626, 17626, 17626, 17633, 17644, 17648, 17623, {0, 0, 0, 0, 0}, -1, -1, { 1255, 500, 10005, 862, ',' }},
-       {0x000E, 0x007F, 0x040E, 17652, 17655, 17655, 17655, 17665, 17672, 17676, 17652, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10029, 852, ';' }},
-       {0x000F, 0x007F, 0x040F, 17680, 17683, 17683, 17683, 17693, 17703, 17707, 17680, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20871, 10079, 850, ';' }},
-       {0x0010, 0x007F, 0x0410, 17711, 17714, 17714, 17714, 17722, 17731, 17735, 17711, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20280, 10000, 850, ';' }},
-       {0x0011, 0x007F, 0x0411, 17739, 17742, 17742, 17742, 17751, 17761, 17765, 17739, {0, 0, 0, 0, 0}, -1, -1, { 932, 20290, 10001, 932, ',' }},
-       {0x0012, 0x007F, 0x0412, 17769, 17772, 17772, 17772, 17779, 17789, 17793, 17769, {0, 0, 0, 0, 0}, -1, -1, { 949, 20833, 10003, 949, ',' }},
-       {0x0013, 0x007F, 0x0413, 17797, 17800, 17800, 17800, 17806, 17817, 17821, 17797, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
-       {0x0015, 0x007F, 0x0415, 17825, 17828, 17828, 17828, 17835, 17842, 17846, 17825, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
-       {0x0016, 0x007F, 0x0416, 17850, 17853, 17853, 17853, 17864, 17875, 17879, 17850, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
-       {0x0018, 0x007F, 0x0418, 17883, 17886, 17886, 17886, 17895, 17904, 17908, 17883, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
-       {0x0019, 0x007F, 0x0419, 17912, 17915, 17915, 17915, 17923, 17938, 17942, 17912, {0, 0, 0, 0, 0}, -1, -1, { 1251, 20880, 10007, 866, ';' }},
-       {0x001A, 0x007F, 0x041A, 17946, 17949, 17949, 17949, 17958, 17967, 17971, 17946, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10082, 852, ';' }},
-       {0x001B, 0x007F, 0x041B, 17975, 17978, 17978, 17978, 17985, 17996, 18000, 17975, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
-       {0x001C, 0x007F, 0x041C, 18004, 18007, 18007, 18007, 18016, 18023, 18027, 18004, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
-       {0x001D, 0x007F, 0x041D, 18031, 18034, 18034, 18034, 18042, 18050, 18054, 18031, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20278, 10000, 850, ';' }},
-       {0x001E, 0x007F, 0x041E, 18058, 18061, 18061, 18061, 18066, 18076, 18080, 18058, {0, 0, 0, 0, 0}, -1, -1, { 874, 20838, 10021, 874, ',' }},
-       {0x001F, 0x007F, 0x041F, 18084, 18087, 18087, 18087, 18095, 18104, 18108, 18084, {0, 0, 0, 0, 0}, -1, -1, { 1254, 20905, 10081, 857, ';' }},
-       {0x0021, 0x007F, 0x0421, 18112, 18115, 18115, 18115, 18126, 18143, 18147, 18112, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
-       {0x0022, 0x007F, 0x0422, 18151, 18154, 18154, 18154, 18164, 18185, 18189, 18151, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10017, 866, ';' }},
-       {0x0023, 0x007F, 0x0423, 18193, 18196, 18196, 18196, 18207, 18226, 18230, 18193, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10007, 866, ';' }},
-       {0x0024, 0x007F, 0x0424, 18234, 18237, 18237, 18237, 18247, 18261, 18265, 18234, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
-       {0x0025, 0x007F, 0x0425, 18269, 18272, 18272, 18272, 18281, 18287, 18291, 18269, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
-       {0x0026, 0x007F, 0x0426, 18295, 18298, 18298, 18298, 18306, 18316, 18320, 18295, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
-       {0x0027, 0x007F, 0x0427, 18324, 18327, 18327, 18327, 18338, 18348, 18352, 18324, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
-       {0x0029, 0x007F, 0x0429, 18356, 18359, 18359, 18359, 18367, 18378, 18382, 18356, {0, 0, 0, 0, 0}, -1, -1, { 1256, 20420, 10004, 720, ';' }},
-       {0x002A, 0x007F, 0x042A, 18386, 18389, 18389, 18389, 18400, 18415, 16226, 18386, {0, 0, 0, 0, 0}, -1, -1, { 1258, 500, 10000, 1258, ',' }},
-       {0x002B, 0x007F, 0x042B, 18419, 18422, 18422, 18422, 18431, 18446, 18450, 18419, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x002D, 0x007F, 0x042D, 18454, 18457, 18457, 18457, 18464, 18472, 18476, 18454, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
-       {0x002F, 0x007F, 0x042F, 18480, 18483, 18483, 18483, 18494, 18515, 18519, 18480, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10007, 866, ';' }},
-       {0x0036, 0x007F, 0x0436, 18523, 18526, 18526, 18526, 18536, 18547, 18551, 18523, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ',' }},
-       {0x0038, 0x007F, 0x0438, 18555, 18558, 18558, 18558, 18566, 18576, 18580, 18555, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20277, 10079, 850, ';' }},
-       {0x0039, 0x007F, 0x0439, 18584, 18587, 18587, 18587, 18593, 18609, 18613, 18584, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x0041, 0x007F, 0x0441, 18617, 18620, 18620, 18620, 18628, 18638, 18642, 18617, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 437, ',' }},
-       {0x0047, 0x007F, 0x0447, 18646, 18649, 18649, 18649, 18658, 18680, 18684, 18646, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x0049, 0x007F, 0x0449, 18688, 18691, 18691, 18691, 18697, 18713, 18717, 18688, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x004A, 0x007F, 0x044A, 18721, 18724, 18724, 18724, 18731, 18750, 18754, 18721, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x004B, 0x007F, 0x044B, 18758, 18761, 18761, 18761, 18769, 18785, 18789, 18758, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x004E, 0x007F, 0x044E, 18793, 18796, 18796, 18796, 18804, 18820, 1886, 18793, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x0056, 0x007F, 0x0456, 18824, 18827, 18827, 18827, 18836, 18843, 18847, 18824, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ',' }},
-       {0x0057, 0x007F, 0x0457, 18851, 18855, 18855, 18855, 18863, 18882, 18851, 18584, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
-       {0x0401, 0x0001, 0x0401, 18886, 18892, 18892, 18892, 18914, 17307, 17311, 17282, {16777216, 0, 0, 0, 0}, 0, 0, { 1256, 20420, 10004, 720, ';' }},
-       {0x0402, 0x0002, 0x0402, 18963, 18969, 18969, 18969, 18990, 17347, 17351, 17315, {0, 0, 0, 0, 0}, 1, 1, { 1251, 20420, 10007, 866, ';' }},
-       {0x0403, 0x0003, 0x0403, 19028, 19034, 19034, 19034, 19050, 17374, 17378, 17355, {0, 0, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, ';' }},
-       {0x0404, 0x7C04, 0x0404, 19068, 19074, 19074, 19074, 19091, 19107, 17408, 17412, {0, 0, 0, 0, 0}, 3, 3, { 950, 500, 10002, 950, ',' }},
-       {0x0405, 0x0005, 0x0405, 19111, 19117, 19117, 19117, 19140, 17434, 17438, 17415, {0, 0, 0, 0, 0}, 4, 4, { 1250, 500, 10029, 852, ';' }},
-       {0x0406, 0x0006, 0x0406, 19170, 19176, 19176, 19176, 19193, 17458, 17462, 17442, {0, 0, 0, 0, 0}, 5, 5, { 1252, 20277, 10000, 850, ';' }},
-       {0x0407, 0x0007, 0x0407, 19209, 19215, 19215, 19215, 19232, 17484, 17488, 17466, {0, 0, 0, 0, 0}, 6, 6, { 1252, 20273, 10000, 850, ';' }},
-       {0x0408, 0x0008, 0x0408, 19254, 19260, 19260, 19260, 19275, 17518, 17522, 17492, {0, 0, 0, 0, 0}, 7, 7, { 1253, 20273, 10006, 737, ';' }},
-       {0x0409, 0x0009, 0x0409, 19307, 19313, 19313, 19313, 19313, 17537, 17541, 17526, {0, 0, 0, 0, 0}, 8, 8, { 1252, 37, 10000, 437, ',' }},
-       {0x040B, 0x000B, 0x040B, 19337, 19343, 19343, 19343, 19361, 17590, 17594, 17573, {0, 0, 0, 0, 0}, 9, 9, { 1252, 20278, 10000, 850, ';' }},
-       {0x040C, 0x000C, 0x040C, 19375, 19381, 19381, 19381, 19397, 17615, 17619, 7598, {0, 0, 0, 0, 0}, 10, 10, { 1252, 20297, 10000, 850, ';' }},
-       {0x040D, 0x000D, 0x040D, 19416, 19422, 19422, 19422, 19438, 17644, 17648, 17623, {0, 0, 0, 0, 0}, 11, 11, { 1255, 500, 10005, 862, ',' }},
-       {0x040E, 0x000E, 0x040E, 19462, 19468, 19468, 19468, 19488, 17672, 17676, 17652, {0, 0, 0, 0, 0}, 12, 12, { 1250, 500, 10029, 852, ';' }},
-       {0x040F, 0x000F, 0x040F, 19511, 19517, 19517, 19517, 19537, 17703, 17707, 17680, {0, 0, 0, 0, 0}, 13, 13, { 1252, 20871, 10079, 850, ';' }},
-       {0x0410, 0x0010, 0x0410, 19557, 19563, 19563, 19563, 19579, 17731, 17735, 17711, {0, 0, 0, 0, 0}, 14, 14, { 1252, 20280, 10000, 850, ';' }},
-       {0x0411, 0x0011, 0x0411, 19597, 19603, 19603, 19603, 19620, 17761, 17765, 17739, {0, 0, 0, 0, 0}, 15, 15, { 932, 20290, 10001, 932, ',' }},
-       {0x0412, 0x0012, 0x0412, 19639, 19645, 19645, 19645, 19666, 17789, 17793, 17769, {0, 0, 0, 0, 0}, 16, 16, { 949, 20833, 10003, 949, ',' }},
-       {0x0413, 0x0013, 0x0413, 19691, 19697, 19697, 19697, 19717, 17817, 17821, 17797, {0, 0, 0, 0, 0}, 17, 17, { 1252, 500, 10000, 850, ';' }},
-       {0x0415, 0x0015, 0x0415, 19740, 19746, 19746, 19746, 19762, 17842, 17846, 17825, {0, 0, 0, 0, 0}, 18, 18, { 1250, 20880, 10029, 852, ';' }},
-       {0x0416, 0x0016, 0x0416, 19778, 19784, 19784, 19784, 19804, 17875, 17879, 17850, {0, 0, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, ';' }},
-       {0x0418, 0x0018, 0x0418, 19824, 19830, 19830, 19830, 19849, 17904, 17908, 17883, {0, 0, 0, 0, 0}, 20, 20, { 1250, 20880, 10029, 852, ';' }},
-       {0x0419, 0x0019, 0x0419, 19869, 19875, 19875, 19875, 19892, 17938, 17942, 17912, {0, 0, 0, 0, 0}, 21, 21, { 1251, 20880, 10007, 866, ';' }},
-       {0x041A, 0x001A, 0x041A, 19922, 19928, 19928, 19928, 19947, 17967, 17971, 17946, {0, 0, 0, 0, 0}, 22, 22, { 1250, 500, 10082, 852, ';' }},
-       {0x041B, 0x001B, 0x041B, 19967, 19973, 19973, 19973, 19991, 17996, 18000, 17975, {0, 0, 0, 0, 0}, 23, 23, { 1250, 20880, 10029, 852, ';' }},
-       {0x041C, 0x001C, 0x041C, 20025, 20031, 20031, 20031, 20050, 18023, 18027, 18004, {0, 0, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, ';' }},
-       {0x041D, 0x001D, 0x041D, 20070, 20076, 20076, 20076, 20093, 18050, 18054, 18031, {0, 0, 0, 0, 0}, 25, 25, { 1252, 20278, 10000, 850, ';' }},
-       {0x041E, 0x001E, 0x041E, 20111, 20117, 20117, 20117, 20133, 18076, 18080, 18058, {0, 0, 0, 0, 0}, 26, 26, { 874, 20838, 10021, 874, ',' }},
-       {0x041F, 0x001F, 0x041F, 20173, 20179, 20179, 20179, 20196, 18104, 18108, 18084, {0, 0, 0, 0, 0}, 27, 27, { 1254, 20905, 10081, 857, ';' }},
-       {0x0421, 0x0021, 0x0421, 20216, 20222, 20222, 20222, 20245, 18143, 18147, 18112, {0, 0, 0, 0, 0}, 28, 28, { 1252, 500, 10000, 850, ';' }},
-       {0x0422, 0x0022, 0x0422, 20274, 20280, 20280, 20280, 20300, 18185, 18189, 18151, {0, 0, 0, 0, 0}, 29, 29, { 1251, 500, 10017, 866, ';' }},
-       {0x0423, 0x0023, 0x0423, 20338, 20344, 20344, 20344, 20365, 18226, 18230, 18193, {0, 0, 0, 0, 0}, 30, 30, { 1251, 500, 10007, 866, ';' }},
-       {0x0424, 0x0024, 0x0424, 20403, 20409, 20409, 20409, 20430, 18261, 18265, 18234, {0, 0, 0, 0, 0}, 31, 31, { 1250, 20880, 10029, 852, ';' }},
-       {0x0425, 0x0025, 0x0425, 20456, 20462, 20462, 20462, 20481, 18287, 18291, 18269, {0, 0, 0, 0, 0}, 32, 32, { 1257, 500, 10029, 775, ';' }},
-       {0x0426, 0x0026, 0x0426, 20495, 20501, 20501, 20501, 20518, 18316, 18320, 18295, {0, 0, 0, 0, 0}, 33, 33, { 1257, 500, 10029, 775, ';' }},
-       {0x0427, 0x0027, 0x0427, 20538, 20544, 20544, 20544, 20567, 18348, 18352, 18324, {0, 0, 0, 0, 0}, 34, 34, { 1257, 500, 10029, 775, ';' }},
-       {0x0429, 0x0029, 0x0429, 20587, 20593, 20593, 20593, 20608, 18378, 18382, 18356, {0, 0, 0, 0, 0}, 35, 35, { 1256, 20420, 10004, 720, ';' }},
-       {0x042A, 0x002A, 0x042A, 20632, 20638, 20638, 20638, 20659, 18415, 16226, 18386, {0, 0, 0, 0, 0}, 36, 36, { 1258, 500, 10000, 1258, ',' }},
-       {0x042B, 0x002B, 0x042B, 20687, 20693, 20693, 20693, 20712, 18446, 18450, 18419, {0, 0, 0, 0, 0}, 37, 37, { 0, 500, 2, 1, ',' }},
-       {0x042B, 0x002B, 0x042B, 20687, 20693, 20693, 20693, 20712, 18446, 18450, 18419, {0, 0, 0, 0, 0}, 38, 38, { 0, 500, 2, 1, ',' }},
-       {0x042D, 0x002D, 0x042D, 20777, 20783, 20783, 20783, 20798, 18472, 18476, 18454, {0, 0, 0, 0, 0}, 39, 39, { 1252, 500, 10000, 850, ';' }},
-       {0x042F, 0x002F, 0x042F, 20817, 20823, 20823, 20823, 20846, 18515, 18519, 18480, {0, 0, 0, 0, 0}, 40, 40, { 1251, 500, 10007, 866, ';' }},
-       {0x0436, 0x0036, 0x0436, 20890, 20896, 20896, 20896, 20921, 18547, 18551, 18523, {0, 0, 0, 0, 0}, 41, 41, { 1252, 500, 10000, 850, ',' }},
-       {0x0438, 0x0038, 0x0438, 20946, 20952, 20952, 20952, 20976, 18576, 18580, 18555, {0, 0, 0, 0, 0}, 42, 42, { 1252, 20277, 10079, 850, ';' }},
-       {0x0439, 0x0039, 0x0439, 20997, 21003, 21003, 21003, 21017, 18609, 18613, 18584, {0, 0, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, ',' }},
-       {0x0441, 0x0041, 0x0441, 21048, 21054, 21054, 21054, 21070, 18638, 18642, 18617, {0, 0, 0, 0, 0}, 44, 44, { 1252, 500, 10000, 437, ',' }},
-       {0x0447, 0x0047, 0x0447, 21088, 21094, 21094, 21094, 21111, 18680, 18684, 18646, {0, 0, 0, 0, 0}, 45, 45, { 0, 500, 2, 1, ',' }},
-       {0x0449, 0x0049, 0x0449, 21148, 21154, 21154, 21154, 21168, 18713, 18717, 18688, {0, 0, 0, 0, 0}, 46, 46, { 0, 500, 2, 1, ',' }},
-       {0x044A, 0x004A, 0x044A, 21208, 21214, 21214, 21214, 21229, 18750, 18754, 18721, {0, 0, 0, 0, 0}, 47, 47, { 0, 500, 2, 1, ',' }},
-       {0x044B, 0x004B, 0x044B, 21276, 21282, 21282, 21282, 21298, 18785, 18789, 18758, {0, 0, 0, 0, 0}, 48, 48, { 0, 500, 2, 1, ',' }},
-       {0x044E, 0x004E, 0x044E, 21329, 21335, 21335, 21335, 21351, 18820, 1886, 18793, {0, 0, 0, 0, 0}, 49, 49, { 0, 500, 2, 1, ',' }},
-       {0x0456, 0x0056, 0x0456, 21382, 21388, 21388, 21388, 21405, 18843, 18847, 18824, {0, 0, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, ',' }},
-       {0x0457, 0x0057, 0x0457, 21422, 21429, 21429, 21429, 21445, 18882, 18851, 18851, {0, 0, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, ',' }},
-       {0x0801, 0x0001, 0x0801, 21479, 21485, 21485, 21485, 21499, 21529, 17311, 17282, {2, 1, 0, 0, 0}, 52, 52, { 1256, 20420, 10004, 720, ';' }},
-       {0x0804, 0x0004, 0x0804, 21533, 21539, 21539, 21539, 21555, 17404, 17408, 17412, {0, 0, 0, 0, 0}, 53, 53, { 936, 500, 10008, 936, ',' }},
-       {0x0807, 0x0007, 0x0807, 21571, 21577, 21577, 21577, 21598, 21616, 17488, 17466, {0, 0, 0, 0, 0}, 54, 54, { 1252, 20273, 10000, 850, ';' }},
-       {0x0809, 0x0009, 0x0809, 21620, 21626, 21626, 21626, 21626, 21651, 17541, 17526, {0, 0, 0, 0, 0}, 55, 55, { 1252, 20285, 10000, 850, ',' }},
-       {0x080A, 0x000A, 0x080A, 21655, 21661, 21661, 21661, 21678, 21697, 17569, 17545, {0, 0, 0, 0, 0}, 56, 56, { 1252, 20284, 10000, 850, ',' }},
-       {0x080C, 0x000C, 0x080C, 21701, 21707, 21707, 21707, 21724, 21745, 17619, 7598, {0, 0, 0, 0, 0}, 57, 57, { 1252, 20297, 10000, 850, ';' }},
-       {0x0810, 0x0010, 0x0810, 21749, 21755, 21755, 21755, 21777, 21797, 17735, 17711, {0, 0, 0, 0, 0}, 58, 58, { 1252, 500, 10000, 850, ';' }},
-       {0x0813, 0x0013, 0x0813, 21801, 21807, 21807, 21807, 21823, 21844, 17821, 17797, {0, 0, 0, 0, 0}, 59, 59, { 1252, 500, 10000, 850, ';' }},
-       {0x0816, 0x0016, 0x0816, 21848, 21854, 21854, 21854, 21876, 21898, 17879, 17850, {0, 0, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 850, ';' }},
-       {0x081D, 0x001D, 0x081D, 21902, 21908, 21908, 21908, 21926, 21944, 18054, 18031, {0, 0, 0, 0, 0}, 61, 61, { 1252, 20278, 10000, 850, ';' }},
-       {0x0C01, 0x0001, 0x0C01, 21948, 21954, 21954, 21954, 21969, 21993, 17311, 17282, {16777216, 0, 0, 0, 0}, 62, 62, { 1256, 20420, 10004, 720, ';' }},
-       {0x0C04, 0x7C04, 0x0C04, 21997, 22003, 22003, 22003, 22037, 22074, 17408, 17412, {0, 0, 0, 0, 0}, 63, 63, { 950, 500, 10002, 950, ',' }},
-       {0x0C07, 0x0007, 0x0C07, 22078, 22084, 22084, 22084, 22101, 22123, 17488, 17466, {0, 0, 0, 0, 0}, 64, 64, { 1252, 20273, 10000, 850, ';' }},
-       {0x0C09, 0x0009, 0x0C09, 22127, 22133, 22133, 22133, 22133, 22153, 17541, 17526, {0, 0, 0, 0, 0}, 65, 65, { 1252, 500, 10000, 850, ',' }},
-       {0x0C0A, 0x000A, 0x0C0A, 22157, 22163, 22163, 22163, 22179, 22198, 17569, 17545, {0, 0, 0, 0, 0}, 66, 66, { 1252, 20284, 10000, 850, ';' }},
-       {0x0C0C, 0x000C, 0x0C0C, 22202, 22208, 22208, 22208, 22224, 22243, 17619, 7598, {0, 0, 0, 0, 0}, 67, 67, { 1252, 20297, 10000, 850, ';' }},
-       {0x1001, 0x0001, 0x1001, 22247, 22253, 22253, 22253, 22268, 22296, 17311, 17282, {16777216, 0, 0, 0, 0}, 68, 68, { 1256, 20420, 10004, 720, ';' }},
-       {0x1004, 0x0004, 0x1004, 22300, 22306, 22306, 22306, 22326, 22345, 17408, 17412, {0, 0, 0, 0, 0}, 69, 69, { 936, 500, 10008, 936, ',' }},
-       {0x1007, 0x0007, 0x1007, 22349, 22355, 22355, 22355, 22375, 22395, 17488, 17466, {0, 0, 0, 0, 0}, 70, 70, { 1252, 20273, 10000, 850, ';' }},
-       {0x1009, 0x0009, 0x1009, 22399, 22405, 22405, 22405, 22405, 22422, 17541, 17526, {0, 0, 0, 0, 0}, 71, 71, { 1252, 37, 10000, 850, ',' }},
-       {0x100A, 0x000A, 0x100A, 22426, 22432, 22432, 22432, 22452, 22473, 17569, 17545, {0, 0, 0, 0, 0}, 72, 72, { 1252, 20284, 10000, 850, ',' }},
-       {0x100C, 0x000C, 0x100C, 22477, 22483, 22483, 22483, 22504, 22523, 17619, 7598, {0, 0, 0, 0, 0}, 73, 73, { 1252, 20297, 10000, 850, ';' }},
-       {0x1401, 0x0001, 0x1401, 22527, 22533, 22533, 22533, 22550, 22582, 17311, 17282, {16777216, 0, 0, 0, 0}, 74, 74, { 1256, 20420, 10004, 720, ';' }},
-       {0x1404, 0x0004, 0x1404, 22586, 22592, 22592, 22592, 22621, 22658, 17408, 17412, {0, 0, 0, 0, 0}, 75, 75, { 950, 500, 10002, 950, ',' }},
-       {0x1409, 0x0009, 0x1409, 22662, 22668, 22668, 22668, 22668, 22690, 17541, 17526, {0, 0, 0, 0, 0}, 76, 76, { 1252, 500, 10000, 850, ',' }},
-       {0x140A, 0x000A, 0x140A, 22694, 22700, 22700, 22700, 22721, 22743, 17569, 17545, {0, 0, 0, 0, 0}, 77, 77, { 1252, 20284, 10000, 850, ',' }},
-       {0x140C, 0x000C, 0x140C, 22747, 22753, 22753, 22753, 22773, 22796, 17619, 7598, {0, 0, 0, 0, 0}, 78, 78, { 1252, 20297, 10000, 850, ';' }},
-       {0x1801, 0x0001, 0x1801, 22800, 22806, 22806, 22806, 22823, 22853, 17311, 17282, {16777216, 0, 0, 0, 0}, 79, 79, { 1256, 20420, 10004, 720, ';' }},
-       {0x1809, 0x0009, 0x1809, 22857, 22863, 22863, 22863, 22863, 22881, 17541, 17526, {0, 0, 0, 0, 0}, 80, 80, { 1252, 500, 10000, 850, ',' }},
-       {0x180A, 0x000A, 0x180A, 22885, 22891, 22891, 22891, 22908, 22927, 17569, 17545, {0, 0, 0, 0, 0}, 81, 81, { 1252, 20284, 10000, 850, ',' }},
-       {0x1C01, 0x0001, 0x1C01, 22931, 22937, 22937, 22937, 22954, 22980, 17311, 17282, {16777216, 0, 0, 0, 0}, 82, 82, { 1256, 20420, 10004, 720, ';' }},
-       {0x1C09, 0x0009, 0x1C09, 22984, 22990, 22990, 22990, 22990, 23013, 17541, 17526, {0, 0, 0, 0, 0}, 83, 83, { 1252, 500, 10000, 437, ',' }},
-       {0x1C0A, 0x000A, 0x1C0A, 23017, 23023, 23023, 23023, 23052, 23085, 17569, 17545, {0, 0, 0, 0, 0}, 84, 84, { 1252, 20284, 10000, 850, ',' }},
-       {0x2001, 0x0001, 0x2001, 23089, 23095, 23095, 23095, 23109, 23135, 17311, 17282, {16777216, 0, 0, 0, 0}, 85, 85, { 1256, 20420, 10004, 720, ';' }},
-       {0x200A, 0x000A, 0x200A, 23139, 23145, 23145, 23145, 23165, 23186, 17569, 17545, {0, 0, 0, 0, 0}, 86, 86, { 1252, 20284, 10000, 850, ',' }},
-       {0x2401, 0x0001, 0x2401, 23190, 23196, 23196, 23196, 23211, 23239, 17311, 17282, {16777216, 0, 0, 0, 0}, 87, 87, { 1256, 20420, 10004, 720, ';' }},
-       {0x240A, 0x000A, 0x240A, 23243, 23249, 23249, 23249, 23268, 23288, 17569, 17545, {0, 0, 0, 0, 0}, 88, 88, { 1252, 20284, 10000, 850, ',' }},
-       {0x2801, 0x0001, 0x2801, 23292, 23298, 23298, 23298, 23313, 23341, 17311, 17282, {16777216, 0, 0, 0, 0}, 89, 89, { 1256, 20420, 10004, 720, ';' }},
-       {0x280A, 0x000A, 0x280A, 23345, 23351, 23351, 23351, 23366, 23383, 17569, 17545, {0, 0, 0, 0, 0}, 90, 90, { 1252, 20284, 10000, 850, ',' }},
-       {0x2C01, 0x0001, 0x2C01, 23387, 23393, 23393, 23393, 23409, 23439, 17311, 17282, {16777216, 0, 0, 0, 0}, 91, 91, { 1256, 20420, 10004, 720, ';' }},
-       {0x2C0A, 0x000A, 0x2C0A, 23443, 23449, 23449, 23449, 23469, 23490, 17569, 17545, {0, 0, 0, 0, 0}, 92, 92, { 1252, 20284, 10000, 850, ',' }},
-       {0x3001, 0x0001, 0x3001, 23494, 23500, 23500, 23500, 23517, 23545, 17311, 17282, {16777216, 0, 0, 0, 0}, 93, 93, { 1256, 20420, 10004, 720, ';' }},
-       {0x3009, 0x0009, 0x3009, 23549, 23555, 23555, 23555, 23555, 23574, 17541, 17526, {0, 0, 0, 0, 0}, 94, 94, { 1252, 500, 10000, 437, ',' }},
-       {0x300A, 0x000A, 0x300A, 23578, 23584, 23584, 23584, 23602, 23621, 17569, 17545, {0, 0, 0, 0, 0}, 95, 95, { 1252, 20284, 10000, 850, ',' }},
-       {0x3401, 0x0001, 0x3401, 23625, 23631, 23631, 23631, 23647, 23677, 17311, 17282, {16777216, 0, 0, 0, 0}, 96, 96, { 1256, 20420, 10004, 720, ';' }},
-       {0x3409, 0x0009, 0x3409, 23681, 23687, 23687, 23687, 23687, 23709, 17541, 17526, {0, 0, 0, 0, 0}, 97, 97, { 1252, 500, 10000, 437, ',' }},
-       {0x340A, 0x000A, 0x340A, 23713, 23719, 23719, 23719, 23735, 23752, 17569, 17545, {0, 0, 0, 0, 0}, 98, 98, { 1252, 20284, 10000, 850, ',' }},
-       {0x3801, 0x0001, 0x3801, 23756, 23762, 23762, 23762, 23792, 23856, 17311, 17282, {16777216, 0, 0, 0, 0}, 99, 99, { 1256, 20420, 10004, 720, ';' }},
-       {0x380A, 0x000A, 0x380A, 23860, 23866, 23866, 23866, 23884, 23903, 17569, 17545, {0, 0, 0, 0, 0}, 100, 100, { 1252, 20284, 10000, 850, ',' }},
-       {0x3C01, 0x0001, 0x3C01, 23907, 23913, 23913, 23913, 23930, 23962, 17311, 17282, {16777216, 0, 0, 0, 0}, 101, 101, { 1256, 20420, 10004, 720, ';' }},
-       {0x3C0A, 0x000A, 0x3C0A, 23966, 23972, 23972, 23972, 23991, 24011, 17569, 17545, {0, 0, 0, 0, 0}, 102, 102, { 1252, 20284, 10000, 850, ',' }},
-       {0x4001, 0x0001, 0x4001, 24015, 24021, 24021, 24021, 24036, 24060, 17311, 17282, {16777216, 0, 0, 0, 0}, 103, 103, { 1256, 20420, 10004, 720, ';' }},
-       {0x400A, 0x000A, 0x400A, 24064, 24070, 24070, 24070, 24088, 24107, 17569, 17545, {0, 0, 0, 0, 0}, 104, 104, { 1252, 20284, 10000, 850, ',' }},
-       {0x440A, 0x000A, 0x440A, 24111, 24117, 24117, 24117, 24139, 24162, 17569, 17545, {0, 0, 0, 0, 0}, 105, 105, { 1252, 20284, 10000, 850, ',' }},
-       {0x480A, 0x000A, 0x480A, 24166, 24172, 24172, 24172, 24191, 24211, 17569, 17545, {0, 0, 0, 0, 0}, 106, 106, { 1252, 20284, 10000, 850, ',' }},
-       {0x4C0A, 0x000A, 0x4C0A, 24215, 24221, 24221, 24221, 24241, 24262, 17569, 17545, {0, 0, 0, 0, 0}, 107, 107, { 1252, 20284, 10000, 850, ',' }},
-       {0x500A, 0x000A, 0x500A, 24266, 24272, 24272, 24272, 24294, 24317, 17569, 17545, {0, 0, 0, 0, 0}, 108, 108, { 1252, 20284, 10000, 850, ',' }},
-       {0x7C04, 0x007F, 0x0000, 24321, 19074, 17389, 17389, 17397, 19107, 17408, 17412, {0, 0, 0, 0, 0}, -1, -1, { 950, 500, 10002, 950, ',' }}
+       {0x0001, 0x007F, 0x0401, 17290, 17293, 17293, 17293, 17300, 17315, 17319, 17290, {0, 0, 0, 0, 0}, -1, -1, { 1256, 20420, 10004, 720, ';' }},
+       {0x0002, 0x007F, 0x0402, 17323, 17326, 17326, 17326, 17336, 17355, 17359, 17323, {0, 0, 0, 0, 0}, -1, -1, { 1251, 20420, 10007, 866, ';' }},
+       {0x0003, 0x007F, 0x0403, 17363, 17366, 17366, 17366, 17374, 17382, 17386, 17363, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
+       {0x0004, 0x007F, 0x0000, 17390, 17397, 17397, 17397, 17405, 17412, 17416, 17420, {0, 0, 0, 0, 0}, -1, -1, { 936, 500, 10008, 936, ',' }},
+       {0x0005, 0x007F, 0x0405, 17423, 17426, 17426, 17426, 17432, 17442, 17446, 17423, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10029, 852, ';' }},
+       {0x0006, 0x007F, 0x0406, 17450, 17453, 17453, 17453, 17460, 17466, 17470, 17450, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20277, 10000, 850, ';' }},
+       {0x0007, 0x007F, 0x0407, 17474, 17477, 17477, 17477, 17484, 17492, 17496, 17474, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20273, 10000, 850, ';' }},
+       {0x0008, 0x007F, 0x0408, 17500, 17503, 17503, 17503, 17509, 17526, 17530, 17500, {0, 0, 0, 0, 0}, -1, -1, { 1253, 20273, 10006, 737, ';' }},
+       {0x0009, 0x007F, 0x0409, 17534, 17537, 17537, 17537, 17537, 17545, 17549, 17534, {0, 0, 0, 0, 0}, -1, -1, { 1252, 37, 10000, 437, ',' }},
+       {0x000A, 0x007F, 0x0C0A, 17553, 17556, 17556, 17556, 17564, 17573, 17577, 17553, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20284, 10000, 850, ';' }},
+       {0x000B, 0x007F, 0x040B, 17581, 17584, 17584, 17584, 17592, 17598, 17602, 17581, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20278, 10000, 850, ';' }},
+       {0x000C, 0x007F, 0x040C, 7616, 17606, 17606, 17606, 17613, 17623, 17627, 7616, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20297, 10000, 850, ';' }},
+       {0x000D, 0x007F, 0x040D, 17631, 17634, 17634, 17634, 17641, 17652, 17656, 17631, {0, 0, 0, 0, 0}, -1, -1, { 1255, 500, 10005, 862, ',' }},
+       {0x000E, 0x007F, 0x040E, 17660, 17663, 17663, 17663, 17673, 17680, 17684, 17660, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10029, 852, ';' }},
+       {0x000F, 0x007F, 0x040F, 17688, 17691, 17691, 17691, 17701, 17711, 17715, 17688, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20871, 10079, 850, ';' }},
+       {0x0010, 0x007F, 0x0410, 17719, 17722, 17722, 17722, 17730, 17739, 17743, 17719, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20280, 10000, 850, ';' }},
+       {0x0011, 0x007F, 0x0411, 17747, 17750, 17750, 17750, 17759, 17769, 17773, 17747, {0, 0, 0, 0, 0}, -1, -1, { 932, 20290, 10001, 932, ',' }},
+       {0x0012, 0x007F, 0x0412, 17777, 17780, 17780, 17780, 17787, 17797, 17801, 17777, {0, 0, 0, 0, 0}, -1, -1, { 949, 20833, 10003, 949, ',' }},
+       {0x0013, 0x007F, 0x0413, 17805, 17808, 17808, 17808, 17814, 17825, 17829, 17805, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
+       {0x0015, 0x007F, 0x0415, 17833, 17836, 17836, 17836, 17843, 17850, 17854, 17833, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
+       {0x0016, 0x007F, 0x0416, 17858, 17861, 17861, 17861, 17872, 17883, 17887, 17858, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
+       {0x0018, 0x007F, 0x0418, 17891, 17894, 17894, 17894, 17903, 17912, 17916, 17891, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
+       {0x0019, 0x007F, 0x0419, 17920, 17923, 17923, 17923, 17931, 17946, 17950, 17920, {0, 0, 0, 0, 0}, -1, -1, { 1251, 20880, 10007, 866, ';' }},
+       {0x001A, 0x007F, 0x041A, 17954, 17957, 17957, 17957, 17966, 17975, 17979, 17954, {0, 0, 0, 0, 0}, -1, -1, { 1250, 500, 10082, 852, ';' }},
+       {0x001B, 0x007F, 0x041B, 17983, 17986, 17986, 17986, 17993, 18004, 18008, 17983, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
+       {0x001C, 0x007F, 0x041C, 18012, 18015, 18015, 18015, 18024, 18031, 18035, 18012, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
+       {0x001D, 0x007F, 0x041D, 18039, 18042, 18042, 18042, 18050, 18058, 18062, 18039, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20278, 10000, 850, ';' }},
+       {0x001E, 0x007F, 0x041E, 18066, 18069, 18069, 18069, 18074, 18084, 18088, 18066, {0, 0, 0, 0, 0}, -1, -1, { 874, 20838, 10021, 874, ',' }},
+       {0x001F, 0x007F, 0x041F, 18092, 18095, 18095, 18095, 18103, 18112, 18116, 18092, {0, 0, 0, 0, 0}, -1, -1, { 1254, 20905, 10081, 857, ';' }},
+       {0x0021, 0x007F, 0x0421, 18120, 18123, 18123, 18123, 18134, 18151, 18155, 18120, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
+       {0x0022, 0x007F, 0x0422, 18159, 18162, 18162, 18162, 18172, 18193, 18197, 18159, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10017, 866, ';' }},
+       {0x0023, 0x007F, 0x0423, 18201, 18204, 18204, 18204, 18215, 18234, 18238, 18201, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10007, 866, ';' }},
+       {0x0024, 0x007F, 0x0424, 18242, 18245, 18245, 18245, 18255, 18269, 18273, 18242, {0, 0, 0, 0, 0}, -1, -1, { 1250, 20880, 10029, 852, ';' }},
+       {0x0025, 0x007F, 0x0425, 18277, 18280, 18280, 18280, 18289, 18295, 18299, 18277, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
+       {0x0026, 0x007F, 0x0426, 18303, 18306, 18306, 18306, 18314, 18324, 18328, 18303, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
+       {0x0027, 0x007F, 0x0427, 18332, 18335, 18335, 18335, 18346, 18356, 18360, 18332, {0, 0, 0, 0, 0}, -1, -1, { 1257, 500, 10029, 775, ';' }},
+       {0x0029, 0x007F, 0x0429, 18364, 18367, 18367, 18367, 18375, 18386, 18390, 18364, {0, 0, 0, 0, 0}, -1, -1, { 1256, 20420, 10004, 720, ';' }},
+       {0x002A, 0x007F, 0x042A, 18394, 18397, 18397, 18397, 18408, 18423, 16244, 18394, {0, 0, 0, 0, 0}, -1, -1, { 1258, 500, 10000, 1258, ',' }},
+       {0x002B, 0x007F, 0x042B, 18427, 18430, 18430, 18430, 18439, 18454, 18458, 18427, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x002D, 0x007F, 0x042D, 18462, 18465, 18465, 18465, 18472, 18480, 18484, 18462, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ';' }},
+       {0x002F, 0x007F, 0x042F, 18488, 18491, 18491, 18491, 18502, 18523, 18527, 18488, {0, 0, 0, 0, 0}, -1, -1, { 1251, 500, 10007, 866, ';' }},
+       {0x0036, 0x007F, 0x0436, 18531, 18534, 18534, 18534, 18544, 18555, 18559, 18531, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ',' }},
+       {0x0038, 0x007F, 0x0438, 18563, 18566, 18566, 18566, 18574, 18584, 18588, 18563, {0, 0, 0, 0, 0}, -1, -1, { 1252, 20277, 10079, 850, ';' }},
+       {0x0039, 0x007F, 0x0439, 18592, 18595, 18595, 18595, 18601, 18617, 18621, 18592, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x0041, 0x007F, 0x0441, 18625, 18628, 18628, 18628, 18636, 18646, 18650, 18625, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 437, ',' }},
+       {0x0047, 0x007F, 0x0447, 18654, 18657, 18657, 18657, 18666, 18688, 18692, 18654, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x0049, 0x007F, 0x0449, 18696, 18699, 18699, 18699, 18705, 18721, 18725, 18696, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x004A, 0x007F, 0x044A, 18729, 18732, 18732, 18732, 18739, 18758, 18762, 18729, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x004B, 0x007F, 0x044B, 18766, 18769, 18769, 18769, 18777, 18793, 18797, 18766, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x004E, 0x007F, 0x044E, 18801, 18804, 18804, 18804, 18812, 18828, 1886, 18801, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x0056, 0x007F, 0x0456, 18832, 18835, 18835, 18835, 18844, 18851, 18855, 18832, {0, 0, 0, 0, 0}, -1, -1, { 1252, 500, 10000, 850, ',' }},
+       {0x0057, 0x007F, 0x0457, 18859, 18863, 18863, 18863, 18871, 18890, 18859, 18592, {0, 0, 0, 0, 0}, -1, -1, { 0, 500, 2, 1, ',' }},
+       {0x0401, 0x0001, 0x0401, 18894, 18900, 18900, 18900, 18922, 17315, 17319, 17290, {16777216, 0, 0, 0, 0}, 0, 0, { 1256, 20420, 10004, 720, ';' }},
+       {0x0402, 0x0002, 0x0402, 18971, 18977, 18977, 18977, 18998, 17355, 17359, 17323, {0, 0, 0, 0, 0}, 1, 1, { 1251, 20420, 10007, 866, ';' }},
+       {0x0403, 0x0003, 0x0403, 19036, 19042, 19042, 19042, 19058, 17382, 17386, 17363, {0, 0, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, ';' }},
+       {0x0404, 0x7C04, 0x0404, 19076, 19082, 19082, 19082, 19099, 19115, 17416, 17420, {0, 0, 0, 0, 0}, 3, 3, { 950, 500, 10002, 950, ',' }},
+       {0x0405, 0x0005, 0x0405, 19119, 19125, 19125, 19125, 19148, 17442, 17446, 17423, {0, 0, 0, 0, 0}, 4, 4, { 1250, 500, 10029, 852, ';' }},
+       {0x0406, 0x0006, 0x0406, 19178, 19184, 19184, 19184, 19201, 17466, 17470, 17450, {0, 0, 0, 0, 0}, 5, 5, { 1252, 20277, 10000, 850, ';' }},
+       {0x0407, 0x0007, 0x0407, 19217, 19223, 19223, 19223, 19240, 17492, 17496, 17474, {0, 0, 0, 0, 0}, 6, 6, { 1252, 20273, 10000, 850, ';' }},
+       {0x0408, 0x0008, 0x0408, 19262, 19268, 19268, 19268, 19283, 17526, 17530, 17500, {0, 0, 0, 0, 0}, 7, 7, { 1253, 20273, 10006, 737, ';' }},
+       {0x0409, 0x0009, 0x0409, 19315, 19321, 19321, 19321, 19321, 17545, 17549, 17534, {0, 0, 0, 0, 0}, 8, 8, { 1252, 37, 10000, 437, ',' }},
+       {0x040B, 0x000B, 0x040B, 19345, 19351, 19351, 19351, 19369, 17598, 17602, 17581, {0, 0, 0, 0, 0}, 9, 9, { 1252, 20278, 10000, 850, ';' }},
+       {0x040C, 0x000C, 0x040C, 19383, 19389, 19389, 19389, 19405, 17623, 17627, 7616, {0, 0, 0, 0, 0}, 10, 10, { 1252, 20297, 10000, 850, ';' }},
+       {0x040D, 0x000D, 0x040D, 19424, 19430, 19430, 19430, 19446, 17652, 17656, 17631, {0, 0, 0, 0, 0}, 11, 11, { 1255, 500, 10005, 862, ',' }},
+       {0x040E, 0x000E, 0x040E, 19470, 19476, 19476, 19476, 19496, 17680, 17684, 17660, {0, 0, 0, 0, 0}, 12, 12, { 1250, 500, 10029, 852, ';' }},
+       {0x040F, 0x000F, 0x040F, 19519, 19525, 19525, 19525, 19545, 17711, 17715, 17688, {0, 0, 0, 0, 0}, 13, 13, { 1252, 20871, 10079, 850, ';' }},
+       {0x0410, 0x0010, 0x0410, 19565, 19571, 19571, 19571, 19587, 17739, 17743, 17719, {0, 0, 0, 0, 0}, 14, 14, { 1252, 20280, 10000, 850, ';' }},
+       {0x0411, 0x0011, 0x0411, 19605, 19611, 19611, 19611, 19628, 17769, 17773, 17747, {0, 0, 0, 0, 0}, 15, 15, { 932, 20290, 10001, 932, ',' }},
+       {0x0412, 0x0012, 0x0412, 19647, 19653, 19653, 19653, 19674, 17797, 17801, 17777, {0, 0, 0, 0, 0}, 16, 16, { 949, 20833, 10003, 949, ',' }},
+       {0x0413, 0x0013, 0x0413, 19699, 19705, 19705, 19705, 19725, 17825, 17829, 17805, {0, 0, 0, 0, 0}, 17, 17, { 1252, 500, 10000, 850, ';' }},
+       {0x0415, 0x0015, 0x0415, 19748, 19754, 19754, 19754, 19770, 17850, 17854, 17833, {0, 0, 0, 0, 0}, 18, 18, { 1250, 20880, 10029, 852, ';' }},
+       {0x0416, 0x0016, 0x0416, 19786, 19792, 19792, 19792, 19812, 17883, 17887, 17858, {0, 0, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, ';' }},
+       {0x0418, 0x0018, 0x0418, 19832, 19838, 19838, 19838, 19857, 17912, 17916, 17891, {0, 0, 0, 0, 0}, 20, 20, { 1250, 20880, 10029, 852, ';' }},
+       {0x0419, 0x0019, 0x0419, 19877, 19883, 19883, 19883, 19900, 17946, 17950, 17920, {0, 0, 0, 0, 0}, 21, 21, { 1251, 20880, 10007, 866, ';' }},
+       {0x041A, 0x001A, 0x041A, 19930, 19936, 19936, 19936, 19955, 17975, 17979, 17954, {0, 0, 0, 0, 0}, 22, 22, { 1250, 500, 10082, 852, ';' }},
+       {0x041B, 0x001B, 0x041B, 19975, 19981, 19981, 19981, 19999, 18004, 18008, 17983, {0, 0, 0, 0, 0}, 23, 23, { 1250, 20880, 10029, 852, ';' }},
+       {0x041C, 0x001C, 0x041C, 20033, 20039, 20039, 20039, 20058, 18031, 18035, 18012, {0, 0, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, ';' }},
+       {0x041D, 0x001D, 0x041D, 20078, 20084, 20084, 20084, 20101, 18058, 18062, 18039, {0, 0, 0, 0, 0}, 25, 25, { 1252, 20278, 10000, 850, ';' }},
+       {0x041E, 0x001E, 0x041E, 20119, 20125, 20125, 20125, 20141, 18084, 18088, 18066, {0, 0, 0, 0, 0}, 26, 26, { 874, 20838, 10021, 874, ',' }},
+       {0x041F, 0x001F, 0x041F, 20181, 20187, 20187, 20187, 20204, 18112, 18116, 18092, {0, 0, 0, 0, 0}, 27, 27, { 1254, 20905, 10081, 857, ';' }},
+       {0x0421, 0x0021, 0x0421, 20224, 20230, 20230, 20230, 20253, 18151, 18155, 18120, {0, 0, 0, 0, 0}, 28, 28, { 1252, 500, 10000, 850, ';' }},
+       {0x0422, 0x0022, 0x0422, 20282, 20288, 20288, 20288, 20308, 18193, 18197, 18159, {0, 0, 0, 0, 0}, 29, 29, { 1251, 500, 10017, 866, ';' }},
+       {0x0423, 0x0023, 0x0423, 20346, 20352, 20352, 20352, 20373, 18234, 18238, 18201, {0, 0, 0, 0, 0}, 30, 30, { 1251, 500, 10007, 866, ';' }},
+       {0x0424, 0x0024, 0x0424, 20411, 20417, 20417, 20417, 20438, 18269, 18273, 18242, {0, 0, 0, 0, 0}, 31, 31, { 1250, 20880, 10029, 852, ';' }},
+       {0x0425, 0x0025, 0x0425, 20464, 20470, 20470, 20470, 20489, 18295, 18299, 18277, {0, 0, 0, 0, 0}, 32, 32, { 1257, 500, 10029, 775, ';' }},
+       {0x0426, 0x0026, 0x0426, 20503, 20509, 20509, 20509, 20526, 18324, 18328, 18303, {0, 0, 0, 0, 0}, 33, 33, { 1257, 500, 10029, 775, ';' }},
+       {0x0427, 0x0027, 0x0427, 20546, 20552, 20552, 20552, 20575, 18356, 18360, 18332, {0, 0, 0, 0, 0}, 34, 34, { 1257, 500, 10029, 775, ';' }},
+       {0x0429, 0x0029, 0x0429, 20595, 20601, 20601, 20601, 20616, 18386, 18390, 18364, {0, 0, 0, 0, 0}, 35, 35, { 1256, 20420, 10004, 720, ';' }},
+       {0x042A, 0x002A, 0x042A, 20640, 20646, 20646, 20646, 20667, 18423, 16244, 18394, {0, 0, 0, 0, 0}, 36, 36, { 1258, 500, 10000, 1258, ',' }},
+       {0x042B, 0x002B, 0x042B, 20695, 20701, 20701, 20701, 20720, 18454, 18458, 18427, {0, 0, 0, 0, 0}, 37, 37, { 0, 500, 2, 1, ',' }},
+       {0x042B, 0x002B, 0x042B, 20695, 20701, 20701, 20701, 20720, 18454, 18458, 18427, {0, 0, 0, 0, 0}, 38, 38, { 0, 500, 2, 1, ',' }},
+       {0x042D, 0x002D, 0x042D, 20785, 20791, 20791, 20791, 20806, 18480, 18484, 18462, {0, 0, 0, 0, 0}, 39, 39, { 1252, 500, 10000, 850, ';' }},
+       {0x042F, 0x002F, 0x042F, 20825, 20831, 20831, 20831, 20854, 18523, 18527, 18488, {0, 0, 0, 0, 0}, 40, 40, { 1251, 500, 10007, 866, ';' }},
+       {0x0436, 0x0036, 0x0436, 20898, 20904, 20904, 20904, 20929, 18555, 18559, 18531, {0, 0, 0, 0, 0}, 41, 41, { 1252, 500, 10000, 850, ',' }},
+       {0x0438, 0x0038, 0x0438, 20954, 20960, 20960, 20960, 20984, 18584, 18588, 18563, {0, 0, 0, 0, 0}, 42, 42, { 1252, 20277, 10079, 850, ';' }},
+       {0x0439, 0x0039, 0x0439, 21005, 21011, 21011, 21011, 21025, 18617, 18621, 18592, {0, 0, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, ',' }},
+       {0x0441, 0x0041, 0x0441, 21056, 21062, 21062, 21062, 21078, 18646, 18650, 18625, {0, 0, 0, 0, 0}, 44, 44, { 1252, 500, 10000, 437, ',' }},
+       {0x0447, 0x0047, 0x0447, 21096, 21102, 21102, 21102, 21119, 18688, 18692, 18654, {0, 0, 0, 0, 0}, 45, 45, { 0, 500, 2, 1, ',' }},
+       {0x0449, 0x0049, 0x0449, 21156, 21162, 21162, 21162, 21176, 18721, 18725, 18696, {0, 0, 0, 0, 0}, 46, 46, { 0, 500, 2, 1, ',' }},
+       {0x044A, 0x004A, 0x044A, 21216, 21222, 21222, 21222, 21237, 18758, 18762, 18729, {0, 0, 0, 0, 0}, 47, 47, { 0, 500, 2, 1, ',' }},
+       {0x044B, 0x004B, 0x044B, 21284, 21290, 21290, 21290, 21306, 18793, 18797, 18766, {0, 0, 0, 0, 0}, 48, 48, { 0, 500, 2, 1, ',' }},
+       {0x044E, 0x004E, 0x044E, 21337, 21343, 21343, 21343, 21359, 18828, 1886, 18801, {0, 0, 0, 0, 0}, 49, 49, { 0, 500, 2, 1, ',' }},
+       {0x0456, 0x0056, 0x0456, 21390, 21396, 21396, 21396, 21413, 18851, 18855, 18832, {0, 0, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, ',' }},
+       {0x0457, 0x0057, 0x0457, 21430, 21437, 21437, 21437, 21453, 18890, 18859, 18859, {0, 0, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, ',' }},
+       {0x0801, 0x0001, 0x0801, 21487, 21493, 21493, 21493, 21507, 21537, 17319, 17290, {2, 1, 0, 0, 0}, 52, 52, { 1256, 20420, 10004, 720, ';' }},
+       {0x0804, 0x0004, 0x0804, 21541, 21547, 21547, 21547, 21563, 17412, 17416, 17420, {0, 0, 0, 0, 0}, 53, 53, { 936, 500, 10008, 936, ',' }},
+       {0x0807, 0x0007, 0x0807, 21579, 21585, 21585, 21585, 21606, 21624, 17496, 17474, {0, 0, 0, 0, 0}, 54, 54, { 1252, 20273, 10000, 850, ';' }},
+       {0x0809, 0x0009, 0x0809, 21628, 21634, 21634, 21634, 21634, 21659, 17549, 17534, {0, 0, 0, 0, 0}, 55, 55, { 1252, 20285, 10000, 850, ',' }},
+       {0x080A, 0x000A, 0x080A, 21663, 21669, 21669, 21669, 21686, 21705, 17577, 17553, {0, 0, 0, 0, 0}, 56, 56, { 1252, 20284, 10000, 850, ',' }},
+       {0x080C, 0x000C, 0x080C, 21709, 21715, 21715, 21715, 21732, 21753, 17627, 7616, {0, 0, 0, 0, 0}, 57, 57, { 1252, 20297, 10000, 850, ';' }},
+       {0x0810, 0x0010, 0x0810, 21757, 21763, 21763, 21763, 21785, 21805, 17743, 17719, {0, 0, 0, 0, 0}, 58, 58, { 1252, 500, 10000, 850, ';' }},
+       {0x0813, 0x0013, 0x0813, 21809, 21815, 21815, 21815, 21831, 21852, 17829, 17805, {0, 0, 0, 0, 0}, 59, 59, { 1252, 500, 10000, 850, ';' }},
+       {0x0816, 0x0016, 0x0816, 21856, 21862, 21862, 21862, 21884, 21906, 17887, 17858, {0, 0, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 850, ';' }},
+       {0x081D, 0x001D, 0x081D, 21910, 21916, 21916, 21916, 21934, 21952, 18062, 18039, {0, 0, 0, 0, 0}, 61, 61, { 1252, 20278, 10000, 850, ';' }},
+       {0x0C01, 0x0001, 0x0C01, 21956, 21962, 21962, 21962, 21977, 22001, 17319, 17290, {16777216, 0, 0, 0, 0}, 62, 62, { 1256, 20420, 10004, 720, ';' }},
+       {0x0C04, 0x7C04, 0x0C04, 22005, 22011, 22011, 22011, 22045, 22082, 17416, 17420, {0, 0, 0, 0, 0}, 63, 63, { 950, 500, 10002, 950, ',' }},
+       {0x0C07, 0x0007, 0x0C07, 22086, 22092, 22092, 22092, 22109, 22131, 17496, 17474, {0, 0, 0, 0, 0}, 64, 64, { 1252, 20273, 10000, 850, ';' }},
+       {0x0C09, 0x0009, 0x0C09, 22135, 22141, 22141, 22141, 22141, 22161, 17549, 17534, {0, 0, 0, 0, 0}, 65, 65, { 1252, 500, 10000, 850, ',' }},
+       {0x0C0A, 0x000A, 0x0C0A, 22165, 22171, 22171, 22171, 22187, 22206, 17577, 17553, {0, 0, 0, 0, 0}, 66, 66, { 1252, 20284, 10000, 850, ';' }},
+       {0x0C0C, 0x000C, 0x0C0C, 22210, 22216, 22216, 22216, 22232, 22251, 17627, 7616, {0, 0, 0, 0, 0}, 67, 67, { 1252, 20297, 10000, 850, ';' }},
+       {0x1001, 0x0001, 0x1001, 22255, 22261, 22261, 22261, 22276, 22304, 17319, 17290, {16777216, 0, 0, 0, 0}, 68, 68, { 1256, 20420, 10004, 720, ';' }},
+       {0x1004, 0x0004, 0x1004, 22308, 22314, 22314, 22314, 22334, 22353, 17416, 17420, {0, 0, 0, 0, 0}, 69, 69, { 936, 500, 10008, 936, ',' }},
+       {0x1007, 0x0007, 0x1007, 22357, 22363, 22363, 22363, 22383, 22403, 17496, 17474, {0, 0, 0, 0, 0}, 70, 70, { 1252, 20273, 10000, 850, ';' }},
+       {0x1009, 0x0009, 0x1009, 22407, 22413, 22413, 22413, 22413, 22430, 17549, 17534, {0, 0, 0, 0, 0}, 71, 71, { 1252, 37, 10000, 850, ',' }},
+       {0x100A, 0x000A, 0x100A, 22434, 22440, 22440, 22440, 22460, 22481, 17577, 17553, {0, 0, 0, 0, 0}, 72, 72, { 1252, 20284, 10000, 850, ',' }},
+       {0x100C, 0x000C, 0x100C, 22485, 22491, 22491, 22491, 22512, 22531, 17627, 7616, {0, 0, 0, 0, 0}, 73, 73, { 1252, 20297, 10000, 850, ';' }},
+       {0x1401, 0x0001, 0x1401, 22535, 22541, 22541, 22541, 22558, 22590, 17319, 17290, {16777216, 0, 0, 0, 0}, 74, 74, { 1256, 20420, 10004, 720, ';' }},
+       {0x1404, 0x0004, 0x1404, 22594, 22600, 22600, 22600, 22629, 22666, 17416, 17420, {0, 0, 0, 0, 0}, 75, 75, { 950, 500, 10002, 950, ',' }},
+       {0x1409, 0x0009, 0x1409, 22670, 22676, 22676, 22676, 22676, 22698, 17549, 17534, {0, 0, 0, 0, 0}, 76, 76, { 1252, 500, 10000, 850, ',' }},
+       {0x140A, 0x000A, 0x140A, 22702, 22708, 22708, 22708, 22729, 22751, 17577, 17553, {0, 0, 0, 0, 0}, 77, 77, { 1252, 20284, 10000, 850, ',' }},
+       {0x140C, 0x000C, 0x140C, 22755, 22761, 22761, 22761, 22781, 22804, 17627, 7616, {0, 0, 0, 0, 0}, 78, 78, { 1252, 20297, 10000, 850, ';' }},
+       {0x1801, 0x0001, 0x1801, 22808, 22814, 22814, 22814, 22831, 22861, 17319, 17290, {16777216, 0, 0, 0, 0}, 79, 79, { 1256, 20420, 10004, 720, ';' }},
+       {0x1809, 0x0009, 0x1809, 22865, 22871, 22871, 22871, 22871, 22889, 17549, 17534, {0, 0, 0, 0, 0}, 80, 80, { 1252, 500, 10000, 850, ',' }},
+       {0x180A, 0x000A, 0x180A, 22893, 22899, 22899, 22899, 22916, 22935, 17577, 17553, {0, 0, 0, 0, 0}, 81, 81, { 1252, 20284, 10000, 850, ',' }},
+       {0x1C01, 0x0001, 0x1C01, 22939, 22945, 22945, 22945, 22962, 22988, 17319, 17290, {16777216, 0, 0, 0, 0}, 82, 82, { 1256, 20420, 10004, 720, ';' }},
+       {0x1C09, 0x0009, 0x1C09, 22992, 22998, 22998, 22998, 22998, 23021, 17549, 17534, {0, 0, 0, 0, 0}, 83, 83, { 1252, 500, 10000, 437, ',' }},
+       {0x1C0A, 0x000A, 0x1C0A, 23025, 23031, 23031, 23031, 23060, 23093, 17577, 17553, {0, 0, 0, 0, 0}, 84, 84, { 1252, 20284, 10000, 850, ',' }},
+       {0x2001, 0x0001, 0x2001, 23097, 23103, 23103, 23103, 23117, 23143, 17319, 17290, {16777216, 0, 0, 0, 0}, 85, 85, { 1256, 20420, 10004, 720, ';' }},
+       {0x200A, 0x000A, 0x200A, 23147, 23153, 23153, 23153, 23173, 23194, 17577, 17553, {0, 0, 0, 0, 0}, 86, 86, { 1252, 20284, 10000, 850, ',' }},
+       {0x2401, 0x0001, 0x2401, 23198, 23204, 23204, 23204, 23219, 23247, 17319, 17290, {16777216, 0, 0, 0, 0}, 87, 87, { 1256, 20420, 10004, 720, ';' }},
+       {0x240A, 0x000A, 0x240A, 23251, 23257, 23257, 23257, 23276, 23296, 17577, 17553, {0, 0, 0, 0, 0}, 88, 88, { 1252, 20284, 10000, 850, ',' }},
+       {0x2801, 0x0001, 0x2801, 23300, 23306, 23306, 23306, 23321, 23349, 17319, 17290, {16777216, 0, 0, 0, 0}, 89, 89, { 1256, 20420, 10004, 720, ';' }},
+       {0x280A, 0x000A, 0x280A, 23353, 23359, 23359, 23359, 23374, 23391, 17577, 17553, {0, 0, 0, 0, 0}, 90, 90, { 1252, 20284, 10000, 850, ',' }},
+       {0x2C01, 0x0001, 0x2C01, 23395, 23401, 23401, 23401, 23417, 23447, 17319, 17290, {16777216, 0, 0, 0, 0}, 91, 91, { 1256, 20420, 10004, 720, ';' }},
+       {0x2C0A, 0x000A, 0x2C0A, 23451, 23457, 23457, 23457, 23477, 23498, 17577, 17553, {0, 0, 0, 0, 0}, 92, 92, { 1252, 20284, 10000, 850, ',' }},
+       {0x3001, 0x0001, 0x3001, 23502, 23508, 23508, 23508, 23525, 23553, 17319, 17290, {16777216, 0, 0, 0, 0}, 93, 93, { 1256, 20420, 10004, 720, ';' }},
+       {0x3009, 0x0009, 0x3009, 23557, 23563, 23563, 23563, 23563, 23582, 17549, 17534, {0, 0, 0, 0, 0}, 94, 94, { 1252, 500, 10000, 437, ',' }},
+       {0x300A, 0x000A, 0x300A, 23586, 23592, 23592, 23592, 23610, 23629, 17577, 17553, {0, 0, 0, 0, 0}, 95, 95, { 1252, 20284, 10000, 850, ',' }},
+       {0x3401, 0x0001, 0x3401, 23633, 23639, 23639, 23639, 23655, 23685, 17319, 17290, {16777216, 0, 0, 0, 0}, 96, 96, { 1256, 20420, 10004, 720, ';' }},
+       {0x3409, 0x0009, 0x3409, 23689, 23695, 23695, 23695, 23695, 23717, 17549, 17534, {0, 0, 0, 0, 0}, 97, 97, { 1252, 500, 10000, 437, ',' }},
+       {0x340A, 0x000A, 0x340A, 23721, 23727, 23727, 23727, 23743, 23760, 17577, 17553, {0, 0, 0, 0, 0}, 98, 98, { 1252, 20284, 10000, 850, ',' }},
+       {0x3801, 0x0001, 0x3801, 23764, 23770, 23770, 23770, 23800, 23864, 17319, 17290, {16777216, 0, 0, 0, 0}, 99, 99, { 1256, 20420, 10004, 720, ';' }},
+       {0x380A, 0x000A, 0x380A, 23868, 23874, 23874, 23874, 23892, 23911, 17577, 17553, {0, 0, 0, 0, 0}, 100, 100, { 1252, 20284, 10000, 850, ',' }},
+       {0x3C01, 0x0001, 0x3C01, 23915, 23921, 23921, 23921, 23938, 23970, 17319, 17290, {16777216, 0, 0, 0, 0}, 101, 101, { 1256, 20420, 10004, 720, ';' }},
+       {0x3C0A, 0x000A, 0x3C0A, 23974, 23980, 23980, 23980, 23999, 24019, 17577, 17553, {0, 0, 0, 0, 0}, 102, 102, { 1252, 20284, 10000, 850, ',' }},
+       {0x4001, 0x0001, 0x4001, 24023, 24029, 24029, 24029, 24044, 24068, 17319, 17290, {16777216, 0, 0, 0, 0}, 103, 103, { 1256, 20420, 10004, 720, ';' }},
+       {0x400A, 0x000A, 0x400A, 24072, 24078, 24078, 24078, 24096, 24115, 17577, 17553, {0, 0, 0, 0, 0}, 104, 104, { 1252, 20284, 10000, 850, ',' }},
+       {0x440A, 0x000A, 0x440A, 24119, 24125, 24125, 24125, 24147, 24170, 17577, 17553, {0, 0, 0, 0, 0}, 105, 105, { 1252, 20284, 10000, 850, ',' }},
+       {0x480A, 0x000A, 0x480A, 24174, 24180, 24180, 24180, 24199, 24219, 17577, 17553, {0, 0, 0, 0, 0}, 106, 106, { 1252, 20284, 10000, 850, ',' }},
+       {0x4C0A, 0x000A, 0x4C0A, 24223, 24229, 24229, 24229, 24249, 24270, 17577, 17553, {0, 0, 0, 0, 0}, 107, 107, { 1252, 20284, 10000, 850, ',' }},
+       {0x500A, 0x000A, 0x500A, 24274, 24280, 24280, 24280, 24302, 24325, 17577, 17553, {0, 0, 0, 0, 0}, 108, 108, { 1252, 20284, 10000, 850, ',' }},
+       {0x7C04, 0x007F, 0x0000, 24329, 19082, 17397, 17397, 17405, 19115, 17416, 17420, {0, 0, 0, 0, 0}, -1, -1, { 950, 500, 10002, 950, ',' }}
 };
 
 
 static const CultureInfoNameEntry culture_name_entries [] = {
-       {18523, 41},
-       {24328, 93},
-       {17282, 0},
-       {24334, 151},
-       {24340, 153},
-       {24346, 126},
-       {24352, 114},
-       {24358, 104},
-       {24364, 143},
-       {24370, 148},
-       {24376, 145},
-       {24382, 120},
-       {24388, 131},
-       {24394, 137},
-       {24400, 155},
-       {24406, 52},
-       {24412, 141},
-       {24418, 134},
-       {24424, 139},
-       {18193, 31},
-       {24430, 82},
-       {17315, 1},
-       {24436, 53},
-       {17355, 2},
-       {24442, 54},
-       {17415, 4},
-       {24448, 56},
-       {17442, 5},
-       {24454, 57},
-       {17466, 6},
-       {24460, 116},
-       {24466, 106},
-       {24472, 58},
-       {24478, 122},
-       {17492, 7},
-       {24484, 59},
-       {17526, 8},
-       {24490, 117},
-       {24496, 123},
-       {24502, 107},
-       {24508, 132},
-       {24514, 128},
-       {24520, 149},
-       {24526, 60},
-       {24532, 135},
-       {24538, 146},
-       {17545, 9},
-       {24544, 144},
-       {24550, 156},
-       {24556, 150},
-       {24562, 140},
-       {24568, 129},
-       {24574, 136},
-       {24580, 147},
-       {24586, 118},
-       {24592, 124},
-       {24598, 158},
-       {24604, 108},
-       {24610, 159},
-       {24616, 133},
-       {24622, 142},
-       {24628, 160},
-       {24634, 154},
-       {24640, 157},
-       {24646, 152},
-       {24652, 138},
-       {18269, 33},
-       {24658, 84},
-       {18454, 39},
-       {24664, 91},
-       {18356, 36},
-       {24670, 87},
-       {17573, 10},
-       {24676, 61},
-       {18555, 42},
-       {24682, 94},
-       {7598, 11},
-       {24688, 109},
-       {24694, 119},
-       {24700, 125},
-       {24706, 62},
-       {24712, 130},
-       {18824, 50},
-       {24718, 102},
-       {18646, 45},
-       {24724, 97},
-       {17623, 12},
-       {24730, 63},
-       {18584, 43},
-       {24736, 95},
-       {17946, 23},
-       {24742, 74},
-       {17652, 13},
-       {24748, 64},
-       {18419, 38},
-       {24754, 89},
-       {24754, 90},
-       {18112, 29},
-       {24760, 80},
-       {17680, 14},
-       {24766, 65},
-       {17711, 15},
-       {24772, 110},
-       {24778, 66},
-       {17739, 16},
-       {24784, 67},
-       {18758, 48},
-       {24790, 100},
-       {17769, 17},
-       {24796, 68},
-       {18851, 51},
-       {24802, 103},
-       {18324, 35},
-       {24809, 86},
-       {18295, 34},
-       {24815, 85},
-       {18480, 40},
-       {24821, 92},
-       {18793, 49},
-       {24827, 101},
-       {17797, 18},
-       {24833, 111},
-       {24839, 69},
-       {17825, 19},
-       {24845, 70},
-       {17850, 20},
-       {24851, 71},
-       {24857, 112},
-       {17883, 21},
-       {24863, 72},
-       {17912, 22},
-       {24869, 73},
-       {17975, 24},
-       {24875, 75},
-       {18234, 32},
-       {24881, 83},
-       {18004, 25},
-       {24887, 76},
-       {18031, 26},
-       {24893, 113},
-       {24899, 77},
-       {18617, 44},
-       {24905, 96},
-       {18688, 46},
-       {24911, 98},
-       {18721, 47},
-       {24917, 99},
-       {18058, 27},
-       {24923, 78},
-       {18084, 28},
-       {24929, 79},
-       {18151, 30},
-       {24935, 81},
-       {18386, 37},
-       {24941, 88},
-       {24947, 3},
-       {24954, 161},
-       {24961, 105},
-       {24967, 115},
-       {24973, 127},
-       {24979, 121},
-       {24985, 55}
+       {18531, 41},
+       {24336, 93},
+       {17290, 0},
+       {24342, 151},
+       {24348, 153},
+       {24354, 126},
+       {24360, 114},
+       {24366, 104},
+       {24372, 143},
+       {24378, 148},
+       {24384, 145},
+       {24390, 120},
+       {24396, 131},
+       {24402, 137},
+       {24408, 155},
+       {24414, 52},
+       {24420, 141},
+       {24426, 134},
+       {24432, 139},
+       {18201, 31},
+       {24438, 82},
+       {17323, 1},
+       {24444, 53},
+       {17363, 2},
+       {24450, 54},
+       {17423, 4},
+       {24456, 56},
+       {17450, 5},
+       {24462, 57},
+       {17474, 6},
+       {24468, 116},
+       {24474, 106},
+       {24480, 58},
+       {24486, 122},
+       {17500, 7},
+       {24492, 59},
+       {17534, 8},
+       {24498, 117},
+       {24504, 123},
+       {24510, 107},
+       {24516, 132},
+       {24522, 128},
+       {24528, 149},
+       {24534, 60},
+       {24540, 135},
+       {24546, 146},
+       {17553, 9},
+       {24552, 144},
+       {24558, 156},
+       {24564, 150},
+       {24570, 140},
+       {24576, 129},
+       {24582, 136},
+       {24588, 147},
+       {24594, 118},
+       {24600, 124},
+       {24606, 158},
+       {24612, 108},
+       {24618, 159},
+       {24624, 133},
+       {24630, 142},
+       {24636, 160},
+       {24642, 154},
+       {24648, 157},
+       {24654, 152},
+       {24660, 138},
+       {18277, 33},
+       {24666, 84},
+       {18462, 39},
+       {24672, 91},
+       {18364, 36},
+       {24678, 87},
+       {17581, 10},
+       {24684, 61},
+       {18563, 42},
+       {24690, 94},
+       {7616, 11},
+       {24696, 109},
+       {24702, 119},
+       {24708, 125},
+       {24714, 62},
+       {24720, 130},
+       {18832, 50},
+       {24726, 102},
+       {18654, 45},
+       {24732, 97},
+       {17631, 12},
+       {24738, 63},
+       {18592, 43},
+       {24744, 95},
+       {17954, 23},
+       {24750, 74},
+       {17660, 13},
+       {24756, 64},
+       {18427, 38},
+       {24762, 89},
+       {24762, 90},
+       {18120, 29},
+       {24768, 80},
+       {17688, 14},
+       {24774, 65},
+       {17719, 15},
+       {24780, 110},
+       {24786, 66},
+       {17747, 16},
+       {24792, 67},
+       {18766, 48},
+       {24798, 100},
+       {17777, 17},
+       {24804, 68},
+       {18859, 51},
+       {24810, 103},
+       {18332, 35},
+       {24817, 86},
+       {18303, 34},
+       {24823, 85},
+       {18488, 40},
+       {24829, 92},
+       {18801, 49},
+       {24835, 101},
+       {17805, 18},
+       {24841, 111},
+       {24847, 69},
+       {17833, 19},
+       {24853, 70},
+       {17858, 20},
+       {24859, 71},
+       {24865, 112},
+       {17891, 21},
+       {24871, 72},
+       {17920, 22},
+       {24877, 73},
+       {17983, 24},
+       {24883, 75},
+       {18242, 32},
+       {24889, 83},
+       {18012, 25},
+       {24895, 76},
+       {18039, 26},
+       {24901, 113},
+       {24907, 77},
+       {18625, 44},
+       {24913, 96},
+       {18696, 46},
+       {24919, 98},
+       {18729, 47},
+       {24925, 99},
+       {18066, 27},
+       {24931, 78},
+       {18092, 28},
+       {24937, 79},
+       {18159, 30},
+       {24943, 81},
+       {18394, 37},
+       {24949, 88},
+       {24955, 3},
+       {24962, 161},
+       {24969, 105},
+       {24975, 115},
+       {24981, 127},
+       {24987, 121},
+       {24993, 55}
 };
 
 
@@ -996,6 +996,8 @@ static const char locale_strings [] = {
        "juil.\0"
        "sept.\0"
        "d\xc3\xa9\x63.\0"
+       "d/MM/yyyy\0"
+       "d/MM/yy\0"
        "HH:mm:ss z d MMMM yyyy\0"
        "\xd7\x99\xd7\x95\xd7\x9d \xd7\xa8\xd7\x90\xd7\xa9\xd7\x95\xd7\x9f\0"
        "\xd7\x99\xd7\x95\xd7\x9d \xd7\xa9\xd7\xa0\xd7\x99\0"
@@ -2257,7 +2259,6 @@ static const char locale_strings [] = {
        "ene\0"
        "may\0"
        "oct\0"
-       "d/MM/yyyy\0"
        "d' de 'MMMM' de 'yyyy HH:mm:ss z\0"
        "yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5' thh'\xe6\x99\x82'mm'\xe5\x88\x86'ss'\xe7\xa7\x92'\0"
        "yy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
index c2e6174d211009c3aa413260a61a1db53ebf1dc0..219fafe07f605a572002648a94a09fbd0db4b750 100644 (file)
@@ -11,8 +11,8 @@
 
 #define NUM_SHORT_DATE_PATTERNS 14
 #define NUM_LONG_DATE_PATTERNS 8
-#define NUM_SHORT_TIME_PATTERNS 5
-#define NUM_LONG_TIME_PATTERNS 6
+#define NUM_SHORT_TIME_PATTERNS 10
+#define NUM_LONG_TIME_PATTERNS 10
 
 #define idx2string(idx) (locale_strings + (idx))
 
index 4bee4b445acedefe8d097ed2c9f12a81aa15136e..a8d66b7566a4ed8123a8d9521155c3a55aeb377d 100644 (file)
@@ -481,7 +481,8 @@ alloc_handle (HandleData *handles, MonoObject *obj)
        slot = slot * 32 + i;
        handles->entries [slot] = obj;
        if (handles->type <= HANDLE_WEAK_TRACK) {
-               mono_gc_weak_link_add (&(handles->entries [slot]), obj);
+               if (obj)
+                       mono_gc_weak_link_add (&(handles->entries [slot]), obj);
        }
 
        unlock_handles (handles);
@@ -538,7 +539,8 @@ mono_gchandle_set_target (guint32 gchandle, MonoObject *obj)
        if (slot < handles->size && (handles->bitmap [slot / 32] & (1 << (slot % 32)))) {
                if (handles->type <= HANDLE_WEAK_TRACK) {
                        mono_gc_weak_link_remove (&handles->entries [slot]);
-                       mono_gc_weak_link_add (&handles->entries [slot], obj);
+                       if (obj)
+                               mono_gc_weak_link_add (&handles->entries [slot], obj);
                } else {
                        handles->entries [slot] = obj;
                }
index f269f52932436b6228dbfa3d985877194ff5f355..ecddb57eb88f91a63eda16eb5253b6a255e558fc 100644 (file)
@@ -2345,15 +2345,17 @@ ves_icall_InternalInvoke (MonoReflectionMethod *method, MonoObject *this, MonoAr
 
        MONO_ARCH_SAVE_REGS;
 
-       if (this) {
-               if (!mono_object_isinst (this, m->klass))
+       if (!(m->flags & METHOD_ATTRIBUTE_STATIC)) {
+               if (this) {
+                       if (!mono_object_isinst (this, m->klass))
+                               mono_raise_exception (mono_exception_from_name (mono_defaults.corlib, "System.Reflection", "TargetException"));
+                       m = mono_object_get_virtual_method (this, m);
+                       /* must pass the pointer to the value for valuetype methods */
+                       if (m->klass->valuetype)
+                               obj = mono_object_unbox (this);
+               } else if (strcmp (m->name, ".ctor") && !m->wrapper_type)
                        mono_raise_exception (mono_exception_from_name (mono_defaults.corlib, "System.Reflection", "TargetException"));
-               m = mono_object_get_virtual_method (this, m);
-               /* must pass the pointer to the value for valuetype methods */
-               if (m->klass->valuetype)
-                       obj = mono_object_unbox (this);
-       } else if (!(m->flags & METHOD_ATTRIBUTE_STATIC) && strcmp (m->name, ".ctor") && !m->wrapper_type)
-               mono_raise_exception (mono_exception_from_name (mono_defaults.corlib, "System.Reflection", "TargetException"));
+       }
 
        pcount = params? mono_array_length (params): 0;
        if (pcount != mono_method_signature (m)->param_count)
index c9b8d616ef1c7a1761da73f59d9660f2190b18d0..e43769685b6fcb1593f16a18d76bb55770c529d6 100644 (file)
@@ -710,6 +710,7 @@ typedef struct {
        MonoString *dll;
        MonoString *dllentry;
        guint32 charset;
+       guint32 extra_flags;
        guint32 native_cc;
        guint32 call_conv;
        MonoBoolean init_locals;
index 6c7b67116804f01f14a240645c32bd3674282222..c4c4f305080e26df5d2cd2b6f490ff71d174462a 100644 (file)
@@ -63,7 +63,7 @@ typedef struct {
        guint32 nrefs;
        gpointer *refs;
        /* for PInvoke */
-       int charset, lasterr, native_cc;
+       int charset, extra_flags, native_cc;
        MonoString *dll, *dllentry;
 } ReflectionMethodBuilder;
 
@@ -1295,8 +1295,8 @@ reflection_methodbuilder_from_method_builder (ReflectionMethodBuilder *rmb, Mono
        rmb->refs = NULL;
 
        if (mb->dll) {
-               rmb->charset = mb->charset & 0xf;
-               rmb->lasterr = mb->charset & 0x40;
+               rmb->charset = mb->charset;
+               rmb->extra_flags = mb->extra_flags;
                rmb->native_cc = mb->native_cc;
                rmb->dllentry = mb->dllentry;
                rmb->dll = mb->dll;
@@ -1373,20 +1373,19 @@ mono_image_get_method_info (MonoReflectionMethodBuilder *mb, MonoDynamicImage *a
        reflection_methodbuilder_from_method_builder (&rmb, mb);
 
        mono_image_basic_method (&rmb, assembly);
+       mb->table_idx = *rmb.table_idx;
 
        if (mb->dll) { /* It's a P/Invoke method */
                guint32 moduleref;
-               int charset = mb->charset & 0xf;
-               int lasterr = mb->charset & 0x40;
-               int best_fit_mapping = mb->charset & 0x30;
-               int throw_on_unmappable = mb->charset & 0x3000;
+               /* map CharSet values to on-disk values */
+               int ncharset = (mb->charset ? (mb->charset - 1) * 2 : 1);
+               int extra_flags = mb->extra_flags;
                table = &assembly->tables [MONO_TABLE_IMPLMAP];
                table->rows ++;
                alloc_table (table, table->rows);
                values = table->values + table->rows * MONO_IMPLMAP_SIZE;
-               /* map CharSet values to on-disk values */
                
-               values [MONO_IMPLMAP_FLAGS] = (mb->native_cc << 8) | (charset ? (charset - 1) * 2: 1) | lasterr | best_fit_mapping | throw_on_unmappable;
+               values [MONO_IMPLMAP_FLAGS] = (mb->native_cc << 8) | ncharset | extra_flags;
                values [MONO_IMPLMAP_MEMBER] = (mb->table_idx << 1) | 1; /* memberforwarded: method */
                name = mono_string_to_utf8 (mb->dllentry);
                values [MONO_IMPLMAP_NAME] = string_heap_insert (&assembly->sheap, name);
@@ -1449,6 +1448,7 @@ mono_image_get_ctor_info (MonoDomain *domain, MonoReflectionCtorBuilder *mb, Mon
        reflection_methodbuilder_from_ctor_builder (&rmb, mb);
 
        mono_image_basic_method (&rmb, assembly);
+       mb->table_idx = *rmb.table_idx;
 }
 
 static char*
@@ -7768,7 +7768,7 @@ reflection_methodbuilder_to_mono_method (MonoClass *klass,
                method_aux->dllentry = g_strdup (mono_string_to_utf8 (rmb->dllentry));
                method_aux->dll = g_strdup (mono_string_to_utf8 (rmb->dll));
                
-               ((MonoMethodPInvoke*)m)->piflags = (rmb->native_cc << 8) | (rmb->charset ? (rmb->charset - 1) * 2 : 1) | rmb->lasterr;
+               ((MonoMethodPInvoke*)m)->piflags = (rmb->native_cc << 8) | (rmb->charset ? (rmb->charset - 1) * 2 : 1) | rmb->extra_flags;
 
                if (klass->image->dynamic)
                        g_hash_table_insert (((MonoDynamicImage*)klass->image)->method_aux_hash, m, method_aux);
index c60d39e5310eb5b660541438f419dd99046d4db5..dd963c0c0a9d5c115b99e206012c456376999d7f 100644 (file)
@@ -2225,7 +2225,8 @@ methodbuilder_fields[] = {
        {"pinfo", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, pinfo)},
        {"pi_dll", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, dll)},
        {"pi_entry", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, dllentry)},
-       {"ncharset", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, charset)},
+       {"charset", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, charset)},
+       {"extra_flags", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, extra_flags)},
        {"native_cc", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, native_cc)},
        {"call_conv", G_STRUCT_OFFSET (MonoReflectionMethodBuilder, call_conv)},
        {NULL, 0}
index 1a319b442e9bf5e4cc9fbf7ca037e83828dfca84..3ac892037f861c65ea079abba33c3e423ee3b39b 100644 (file)
@@ -1,3 +1,28 @@
+2005-05-28  Zoltan Varga  <vargaz@freemail.hu>
+
+       * *-ia64.*: Ongoing IA64 work.
+
+       * *-ia64.*: Ongoing IA64 work.
+       
+       * mini-ia64.c: Ongoing IA64 work.
+
+       * *-ia64.* jit-icalls.c mini-codegen.c: Ongoing IA64 work.
+
+2005-05-28  Zoltan Varga  <vargaz@freemail.hu>
+
+       * objects.cs basic-calls.cs: Move some tests to objects.cs.
+       
+       * objects.cs basic-long.cs: Move some tests to objects.cs.
+
+2005-05-26  Zoltan Varga  <vargaz@freemail.hu>
+
+       * *-ia64.*: Ongoing IA64 work.
+
+       * iltests.il: Add a new test.
+
+       * mini.c (mono_method_to_ir): Initialize valuetypes when created using
+       newobj. Fixes #75042.
+
 2005-05-22  Zoltan Varga  <vargaz@freemail.hu>
 
        * *-ia64.*: Ongoing IA64 work.
index c5c7d97ca25ba3a5a4a965f03db252a2be94f18c..7de5086077e972911b842c6813fadc57324fd497 100644 (file)
@@ -247,59 +247,6 @@ class Tests {
                }
                return 0;
        }
-       
-       static uint dum_de_dum = 1;
-       static int test_0_long_arg_opt ()
-       {
-               return Foo (0x1234567887654321, dum_de_dum);
-       }
-       
-       static int Foo (ulong x, ulong y)
-       {
-               if (x != 0x1234567887654321)
-                       return 1;
-               
-               if (y != 1)
-                       return 2;
-               
-               return 0;
-       }
-       
-       static int test_0_long_ret_opt ()
-       {
-               ulong x = X ();
-               if (x != 0x1234567887654321)
-                       return 1;
-               ulong y = Y ();
-               if (y != 1)
-                       return 2;
-               
-               return 0;
-       }
-       
-       static ulong X ()
-       {
-               return 0x1234567887654321;
-       }
-       
-       static ulong Y ()
-       {
-               return dum_de_dum;
-       }
-
-       /* from bug# 71515 */
-       static int counter = 0;
-       static bool WriteStuff () {
-               counter = 10;
-               return true;
-       }
-       static int test_0_cond_branch_side_effects () {
-               counter = 5;
-               if (WriteStuff());
-               if (counter == 10)
-                       return 0;
-               return 1;
-       }
 
        static int first_is_zero (int v1, int v2) {
                if (v1 != 0)
index 1e879fa01346b07b3465970565daaeb8b79d5108..2bd866ed1669c533d1691f9db6c0cddf0c13643f 100644 (file)
@@ -780,61 +780,12 @@ class Tests {
                return 0;
        }
 
-       public static int test_71_long_shift_right () {
-               ulong value = 38654838087;
-               int x = 0;
-               byte [] buffer = new byte [1];
-               buffer [x] = ((byte)(value >> x));
-               return buffer [x];
-       }
-
        public static int test_0_ulong_regress () {
                ulong u = 4257145737;
                u --;
                return (u == 4257145736) ? 0 : 1;
        }
        
-       static long x;
-       public static int test_0_addsub_mem ()
-       {
-               x = 0;
-               x += 5;
-               
-               if (x != 5)
-                       return 1;
-               
-               x -= 10;
-               
-               if (x != -5)
-                       return 2;
-               
-               return 0;
-       }
-       
-       static ulong y;
-       public static int test_0_sh32_mem ()
-       {
-               y = 0x0102130405060708;
-               y >>= 32;
-               
-               if (y != 0x01021304)
-                       return 1;
-               
-               y = 0x0102130405060708;
-               y <<= 32;
-               
-               if (y != 0x0506070800000000)
-                       return 2;
-               
-               x = 0x0102130405060708;
-               x <<= 32;
-               
-               if (x != 0x0506070800000000)
-                       return 2;
-               
-               return 0;
-       }
-       
        public static int test_0_assemble_long ()
        {
                uint a = 5;
index b1249a1edd8bc9bd8ae4a2fd43b00527953e1ee1..157f405263c2dd58d7fd1bbf7211eef5bd5388e9 100644 (file)
@@ -1,48 +1,9 @@
 # ia64 cpu description file
-# this file is read by genmdesc to pruduce a table with all the relevant information
-# about the cpu instructions that may be used by the register allocator, the scheduler
-# and other parts of the arch-dependent part of mini.
-#
-# An opcode name is followed by a colon and optional specifiers.
-# A specifier has a name, a colon and a value. Specifiers are separated by white space.
-# Here is a description of the specifiers valid for this file and their possible values.
-#
-# dest:register       describes the destination register of an instruction
-# src1:register       describes the first source register of an instruction
-# src2:register       describes the second source register of an instruction
-#
-# register may have the following values:
-#      i  integer register
-#      b  base register (used in address references)
-#      f  floating point register
-#
-# len:number         describe the maximun length in bytes of the instruction
-# number is a positive integer
-#
-# cost:number        describe how many cycles are needed to complete the instruction (unused)
-#
-# clob:spec          describe if the instruction clobbers registers or has special needs
-#
-# spec can be one of the following characters:
-#      c  clobbers caller-save registers
-#      r  'reserves' the destination register until a later instruction unreserves it
-#          used mostly to set output registers in function calls
-#
-# flags:spec        describe if the instruction uses or sets the flags (unused)
-#
-# spec can be one of the following chars:
-#      s  sets the flags
-#       u  uses the flags
-#       m  uses and modifies the flags
-#
-# res:spec          describe what units are used in the processor (unused)
-#
-# delay:            describe delay slots (unused)
-#
-# the required specifiers are: len, clob (if registers are clobbered), the registers
-# specifiers if the registers are actually used, flags (when scheduling is implemented).
 #
+# The instruction lengths are very conservative, it doesn't matter on ia64
+# since there are no short branches.
 #
+
 nop:
 break: len:48
 jmp: len:48
@@ -81,29 +42,29 @@ stind.i4: src1:b src2:i
 stind.i8:
 stind.r4: dest:f src1:b
 stind.r8: dest:f src1:b
-add: dest:i src1:i src2:i len:48 clob:1
-sub: dest:i src1:i src2:i len:48 clob:1
-mul: dest:i src1:i src2:i len:48 clob:1
+add: dest:i src1:i src2:i len:48
+sub: dest:i src1:i src2:i len:48
+mul: dest:i src1:i src2:i len:48
 div: dest:a src1:a src2:i len:48 clob:d
 div.un: dest:a src1:a src2:i len:48 clob:d
 rem: dest:d src1:a src2:i len:48 clob:a
 rem.un: dest:d src1:a src2:i len:48 clob:a
-and: dest:i src1:i src2:i len:48 clob:1
-or: dest:i src1:i src2:i len:48 clob:1
-xor: dest:i src1:i src2:i len:48 clob:1
-shl: dest:i src1:i src2:s clob:1 len:48
-shr: dest:i src1:i src2:s clob:1 len:48
-shr.un: dest:i src1:i src2:s clob:1 len:48
-neg: dest:i src1:i len:48 clob:1
-not: dest:i src1:i len:48 clob:1
+and: dest:i src1:i src2:i len:48
+or: dest:i src1:i src2:i len:48
+xor: dest:i src1:i src2:i len:48
+shl: dest:i src1:i src2:s len:48
+shr: dest:i src1:i src2:s len:48
+shr.un: dest:i src1:i src2:s len:48
+neg: dest:i src1:i len:48
+not: dest:i src1:i len:48
 conv.i1: dest:i src1:i len:48
 conv.i2: dest:i src1:i len:48
 conv.i4: dest:i src1:i len:48
 conv.i8: dest:i src1:i len:48
-conv.r4: dest:f src1:i len:48
-conv.r8: dest:f src1:i len:48
-conv.u4: dest:i src1:i len:48
-conv.u8: dest:i src1:i len:48
+conv.r4: dest:f src1:i len:112
+conv.r8: dest:f src1:i len:112
+conv.u4: dest:i src1:i len:112
+conv.u8: dest:i src1:i len:112
 callvirt:
 cpobj:
 ldobj:
@@ -173,7 +134,7 @@ conv.ovf.i:
 conv.ovf.u:
 add.ovf:
 add.ovf.un:
-mul.ovf: dest:i src1:i src2:i clob:1 len:48
+mul.ovf: dest:i src1:i src2:i len:48
 # this opcode is handled specially in the code generator
 mul.ovf.un: dest:i src1:i src2:i len:48
 sub.ovf:
@@ -239,33 +200,28 @@ oparglist: src1:b len:48
 outarg: src1:i len:48
 outarg_imm: len:48
 retarg:
-setret: dest:a src1:i len:48
-setlret: dest:i src1:i src2:i len:48
+setret: dest:r src1:i len:48
+setlret: dest:r src1:i src2:i len:48
 checkthis: src1:b len:48
-call: dest:a clob:c len:48
-ret: len:48
-voidcall: clob:c len:48
-voidcall_reg: src1:i clob:c len:48
-voidcall_membase: src1:b clob:c len:48
-fcall: dest:f len:48 clob:c
-fcall_reg: dest:f src1:i len:48 clob:c
-fcall_membase: dest:f src1:b len:48 clob:c
-lcall: dest:a len:48 clob:c
-lcall_reg: dest:a src1:i len:48 clob:c
-lcall_membase: dest:a src1:b len:48 clob:c
-vcall: len:48 clob:c
-vcall_reg: src1:i len:48 clob:c
-vcall_membase: src1:b len:48 clob:c
-call_reg: dest:a src1:i len:48 clob:c
-call_membase: dest:a src1:b len:48 clob:c
-trap:
+call: dest:r clob:c len:80
+voidcall: clob:c len:80
+voidcall_reg: src1:i clob:c len:80
+voidcall_membase: src1:b clob:c len:80
+fcall: dest:g len:80 clob:c
+fcall_reg: dest:g src1:i len:80 clob:c
+fcall_membase: dest:g src1:b len:80 clob:c
+lcall: dest:r len:80 clob:c
+lcall_reg: dest:r src1:i len:80 clob:c
+lcall_membase: dest:r src1:b len:80 clob:c
+vcall: len:80 clob:c
+vcall_reg: src1:i len:80 clob:c
+vcall_membase: src1:b len:80 clob:c
+call_reg: dest:r src1:i len:80 clob:c
+call_membase: dest:r src1:b len:80 clob:c
 iconst: dest:i len:48
 i8const: dest:i len:48
 r4const: dest:f len:48
 r8const: dest:f len:48
-regvar:
-reg:
-regoffset:
 label:
 store_membase_imm: dest:b len:48
 store_membase_reg: dest:b src1:i len:48
@@ -293,8 +249,8 @@ loadr8_spill_membase: src1:b len:48
 loadu4_mem: dest:i len:48
 move: dest:i src1:i len:48
 setreg: dest:i src1:i len:48
-add_imm: dest:i src1:i len:48 clob:1
-sub_imm: dest:i src1:i len:48 clob:1
+add_imm: dest:i src1:i len:48
+sub_imm: dest:i src1:i len:48
 mul_imm: dest:i src1:i len:48
 # there is no actual support for division or reminder by immediate
 # we simulate them, though (but we need to change the burg rules 
@@ -303,12 +259,12 @@ div_imm: dest:a src1:i src2:i len:48 clob:d
 div_un_imm: dest:a src1:i src2:i len:48 clob:d
 rem_imm: dest:d src1:i src2:i len:48 clob:a
 rem_un_imm: dest:d src1:i src2:i len:48 clob:a
-and_imm: dest:i src1:i len:48 clob:1
-or_imm: dest:i src1:i len:48 clob:1
-xor_imm: dest:i src1:i len:48 clob:1
-shl_imm: dest:i src1:i len:48 clob:1
-shr_imm: dest:i src1:i len:48 clob:1
-shr_un_imm: dest:i src1:i len:48 clob:1
+and_imm: dest:i src1:i len:48
+or_imm: dest:i src1:i len:48
+xor_imm: dest:i src1:i len:48
+shl_imm: dest:i src1:i len:48
+shr_imm: dest:i src1:i len:48
+shr_un_imm: dest:i src1:i len:48
 cond_exc_eq: len:48
 cond_exc_ne_un: len:48
 cond_exc_lt: len:48
@@ -325,59 +281,20 @@ cond_exc_c: len:48
 cond_exc_nc: len:48
 cond_exc_iov: len:48
 cond_exc_ic: len:48
-long_add:
-long_sub:
-long_mul: dest:i src1:i src2:i clob:1 len:48
-long_mul_imm: dest:i src1:i src2:i clob:1 len:48
+long_mul: dest:i src1:i src2:i len:48
+long_mul_imm: dest:i src1:i src2:i len:48
 long_div: dest:a src1:a src2:i len:48 clob:d
 long_div_un: dest:a src1:a src2:i len:48 clob:d
 long_rem: dest:d src1:a src2:i len:48 clob:a
 long_rem_un: dest:d src1:a src2:i len:48 clob:a
-long_and:
-long_or:
-long_xor:
-long_shl: dest:i src1:i src2:s clob:1 len:48
-long_shr: dest:i src1:i src2:s clob:1 len:48
-long_shr_un: dest:i src1:i src2:s clob:1 len:48
-long_neg:
-long_not:
-long_conv_to_i1:
-long_conv_to_i2:
-long_conv_to_i4:
-long_conv_to_i8:
+long_shl: dest:i src1:i src2:s len:48
+long_shr: dest:i src1:i src2:s len:48
+long_shr_un: dest:i src1:i src2:s len:48
 long_conv_to_r4: dest:f src1:i len:48
 long_conv_to_r8: dest:f src1:i len:48
-long_conv_to_u4:
-long_conv_to_u8:
-long_conv_to_u2:
-long_conv_to_u1:
-long_conv_to_i:
 long_conv_to_ovf_i: dest:i src1:i src2:i len:48
-long_conv_to_ovf_u:
-long_add_ovf:
-long_add_ovf_un:
-long_mul_ovf: dest:i src1:i src2:i clob:1 len:48
+long_mul_ovf: dest:i src1:i src2:i len:48
 long_mul_ovf_un: dest:i src1:i src2:i len:48
-long_sub_ovf:
-long_sub_ovf_un:
-long_conv_to_ovf_i1_un:
-long_conv_to_ovf_i2_un:
-long_conv_to_ovf_i4_un:
-long_conv_to_ovf_i8_un:
-long_conv_to_ovf_u1_un:
-long_conv_to_ovf_u2_un:
-long_conv_to_ovf_u4_un:
-long_conv_to_ovf_u8_un:
-long_conv_to_ovf_i_un:
-long_conv_to_ovf_u_un:
-long_conv_to_ovf_i1:
-long_conv_to_ovf_u1:
-long_conv_to_ovf_i2:
-long_conv_to_ovf_u2:
-long_conv_to_ovf_i4:
-long_conv_to_ovf_u4:
-long_conv_to_ovf_i8:
-long_conv_to_ovf_u8:
 long_ceq:
 long_cgt:
 long_cgt_un:
@@ -385,11 +302,9 @@ long_clt:
 long_clt_un:
 long_conv_to_r_un: dest:f src1:i src2:i len:48 
 long_conv_to_u:
-long_shr_imm: dest:i src1:i clob:1 len:48
-long_shr_un_imm: dest:i src1:i clob:1 len:48
-long_shl_imm: dest:i src1:i clob:1 len:48
-long_add_imm:
-long_sub_imm:
+long_shr_imm: dest:i src1:i len:48
+long_shr_un_imm: dest:i src1:i len:48
+long_shl_imm: dest:i src1:i len:48
 long_beq:
 long_bne_un:
 long_blt:
@@ -419,19 +334,19 @@ float_rem: dest:f src1:f src2:f len:48
 float_rem_un: dest:f src1:f src2:f len:48
 float_neg: dest:f src1:f len:48
 float_not: dest:f src1:f len:48
-float_conv_to_i1: dest:i src1:f len:48
-float_conv_to_i2: dest:i src1:f len:48
-float_conv_to_i4: dest:i src1:f len:48
-float_conv_to_i8: dest:i src1:f len:48
-float_conv_to_r4:
-float_conv_to_r8:
-float_conv_to_u4: dest:i src1:f len:48
-float_conv_to_u8: dest:i src1:f len:48
-float_conv_to_u2: dest:i src1:f len:48
-float_conv_to_u1: dest:i src1:f len:48
-float_conv_to_i: dest:i src1:f len:48
-float_conv_to_ovf_i: dest:a src1:f len:48
-float_conv_to_ovd_u: dest:a src1:f len:48
+float_conv_to_i1: dest:i src1:f len:112
+float_conv_to_i2: dest:i src1:f len:112
+float_conv_to_i4: dest:i src1:f len:112
+float_conv_to_i8: dest:i src1:f len:112
+float_conv_to_r4: dest:f src1:f len:112
+float_conv_to_r8: dest:f src1:f len:112
+float_conv_to_u4: dest:i src1:f len:112
+float_conv_to_u8: dest:i src1:f len:112
+float_conv_to_u2: dest:i src1:f len:112
+float_conv_to_u1: dest:i src1:f len:112
+float_conv_to_i: dest:i src1:f len:112
+float_conv_to_ovf_i: dest:a src1:f len:112
+float_conv_to_ovd_u: dest:a src1:f len:112
 float_add_ovf:
 float_add_ovf_un:
 float_mul_ovf: 
@@ -477,12 +392,12 @@ atomic_exchange_i4: src1:b src2:i dest:i len:48
 atomic_add_i8: src1:b src2:i dest:i len:48
 atomic_add_new_i8: src1:b src2:i dest:i len:48
 atomic_exchange_i8: src1:b src2:i dest:i len:48
-adc: dest:i src1:i src2:i len:48 clob:1
-addcc: dest:i src1:i src2:i len:48 clob:1
-subcc: dest:i src1:i src2:i len:48 clob:1
-adc_imm: dest:i src1:i len:48 clob:1
-sbb: dest:i src1:i src2:i len:48 clob:1
-sbb_imm: dest:i src1:i len:48 clob:1
+adc: dest:i src1:i src2:i len:48
+addcc: dest:i src1:i src2:i len:48
+subcc: dest:i src1:i src2:i len:48
+adc_imm: dest:i src1:i len:48
+sbb: dest:i src1:i src2:i len:48
+sbb_imm: dest:i src1:i len:48
 br_reg: src1:i len:48
 sin: dest:f src1:f len:48
 cos: dest:f src1:f len:48
@@ -497,42 +412,42 @@ sext_i2: dest:i src1:i len:48
 
 # 32 bit opcodes
 # FIXME: fix sizes
-int_add: dest:i src1:i src2:i clob:1 len:48
-int_sub: dest:i src1:i src2:i clob:1 len:48
-int_mul: dest:i src1:i src2:i clob:1 len:48
-int_mul_ovf: dest:i src1:i src2:i clob:1 len:48
-int_mul_ovf_un: dest:i src1:i src2:i clob:1 len:48
+int_add: dest:i src1:i src2:i len:48
+int_sub: dest:i src1:i src2:i len:48
+int_mul: dest:i src1:i src2:i len:48
+int_mul_ovf: dest:i src1:i src2:i len:48
+int_mul_ovf_un: dest:i src1:i src2:i len:48
 int_div: dest:a src1:a src2:i clob:d len:48
 int_div_un: dest:a src1:a src2:i clob:d len:48
 int_rem: dest:d src1:a src2:i clob:a len:48
 int_rem_un: dest:d src1:a src2:i clob:a len:48
-int_and: dest:i src1:i src2:i clob:1 len:48
-int_or: dest:i src1:i src2:i clob:1 len:48
-int_xor: dest:i src1:i src2:i clob:1 len:48
-int_shl: dest:i src1:i src2:s clob:1 len:48
-int_shr: dest:i src1:i src2:s clob:1 len:48
-int_shr_un: dest:i src1:i src2:s clob:1 len:48
-int_adc: dest:i src1:i src2:i clob:1 len:48
-int_adc_imm: dest:i src1:i clob:1 len:48
-int_sbb: dest:i src1:i src2:i clob:1 len:48
-int_sbb_imm: dest:i src1:i clob:1 len:48
-int_addcc: dest:i src1:i src2:i clob:1 len:96
-int_subcc: dest:i src1:i src2:i clob:1 len:48
-int_add_imm: dest:i src1:i clob:1 len:48
-int_sub_imm: dest:i src1:i clob:1 len:48
-int_mul_imm: dest:i src1:i clob:1 len:48
+int_and: dest:i src1:i src2:i len:48
+int_or: dest:i src1:i src2:i len:48
+int_xor: dest:i src1:i src2:i len:48
+int_shl: dest:i src1:i src2:s len:48
+int_shr: dest:i src1:i src2:s len:48
+int_shr_un: dest:i src1:i src2:s len:48
+int_adc: dest:i src1:i src2:i len:48
+int_adc_imm: dest:i src1:i len:48
+int_sbb: dest:i src1:i src2:i len:48
+int_sbb_imm: dest:i src1:i len:48
+int_addcc: dest:i src1:i src2:i len:96
+int_subcc: dest:i src1:i src2:i len:48
+int_add_imm: dest:i src1:i len:48
+int_sub_imm: dest:i src1:i len:48
+int_mul_imm: dest:i src1:i len:48
 int_div_imm: dest:a src1:i clob:d len:48
 int_div_un_imm: dest:a src1:i clob:d len:48
 int_rem_imm: dest:d src1:i clob:a len:48
 int_rem_un_imm: dest:d src1:i clob:a len:48
-int_and_imm: dest:i src1:i clob:1 len:48
-int_or_imm: dest:i src1:i clob:1 len:48
-int_xor_imm: dest:i src1:i clob:1 len:48
-int_shl_imm: dest:i src1:i clob:1 len:48
-int_shr_imm: dest:i src1:i clob:1 len:48
-int_shr_un_imm: dest:i src1:i clob:1 len:48
-int_neg: dest:i src1:i clob:1 len:48
-int_not: dest:i src1:i clob:1 len:48
+int_and_imm: dest:i src1:i len:48
+int_or_imm: dest:i src1:i len:48
+int_xor_imm: dest:i src1:i len:48
+int_shl_imm: dest:i src1:i len:48
+int_shr_imm: dest:i src1:i len:48
+int_shr_un_imm: dest:i src1:i len:48
+int_neg: dest:i src1:i len:48
+int_not: dest:i src1:i len:48
 int_ceq: dest:c len:48
 int_cgt: dest:c len:48
 int_cgt_un: dest:c len:48
@@ -591,6 +506,17 @@ ia64_cmp_gt_un_imm: src2:i len:48
 ia64_cmp_le_un_imm: src2:i len:48
 ia64_cmp_ge_un_imm: src2:i len:48
 
+ia64_fcmp_eq: src1:f src2:f len:48
+ia64_fcmp_ne: src1:f src2:f len:48
+ia64_fcmp_le: src1:f src2:f len:48
+ia64_fcmp_lt: src1:f src2:f len:48
+ia64_fcmp_ge: src1:f src2:f len:48
+ia64_fcmp_gt: src1:f src2:f len:48
+ia64_fcmp_lt_un: src1:f src2:f len:96
+ia64_fcmp_gt_un: src1:f src2:f len:96
+ia64_fcmp_le_un: src1:f src2:f len:96
+ia64_fcmp_ge_un: src1:f src2:f len:96
+
 ia64_br_cond: len:48
 ia64_cond_exc: len:48
 ia64_cset: dest:i len:48
index 6049db71ad4f0769470c4f6fb8d83b4bbd436725..d591a31d51be0a8d926ce3671d482cd6b839b82e 100644 (file)
@@ -680,24 +680,6 @@ COND:   ldloc.0
                        ret
        }
 
-       .class nested private auto ansi sealed beforefieldinit FooStruct 
-               extends [mscorlib]System.ValueType {
-
-               .method public hidebysig specialname rtspecialname instance void .ctor () cil managed {
-                       .maxstack 8
-                       ret
-               }
-       }
-
-       .method public static int32 test_0_newobj_vtype () {
-               .maxstack 8
-
-               newobj instance void Tests/FooStruct::.ctor()
-               pop
-               ldc.i4.0
-               ret
-       }
-
        .method public static int32 test_7_conv_ovf_u8_un () {
        .maxstack  2
         .locals    init (unsigned int64)
@@ -758,4 +740,35 @@ COND:   ldloc.0
                ceq
                ret
        }
+
+       .class nested private auto ansi sealed xxx
+       extends [mscorlib]System.ValueType
+   {
+     .field  public   object a
+
+     .method public hidebysig  specialname  rtspecialname 
+            instance default void .ctor ()  cil managed 
+     {
+                .maxstack 8
+                ret 
+     }
+   } // end of class xxx
+
+       .method public static int32 test_0_newobj_vtype () {
+               .maxstack 6
+               .locals init (
+                       valuetype Tests/xxx V_0
+               )
+
+               newobj instance void valuetype Tests/xxx::.ctor ()
+               stloc.0
+               ldloca.s 0
+               ldfld object Tests/xxx::a
+               brfalse OK
+               ldc.i4.s 1
+               ret
+       OK:
+               ldc.i4.s 0
+               ret
+       }
 }
index 41146400550f33df6fa82f7605996e8d830964ff..60c6001288fa50dbd2d97062d9dfefe3a37dd107 100644 (file)
 # (C) 2002 Ximian, Inc.
 #
 
-stmt: OP_SETRET (reg) {
-       tree->opcode = OP_MOVE;
-       tree->sreg1 = state->left->reg1;
-       tree->dreg = MONO_ARCH_RETREG1;
-       mono_bblock_add_inst (s->cbb, tree);
+reg: CEE_LDIND_I8 (OP_REGVAR) {
+       state->reg1 = state->left->tree->dreg;
+}
+
+stmt: CEE_STIND_I8 (OP_REGVAR, reg) {
+       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->left->tree->dreg, state->right->reg1);
 }
 
 reg: CEE_LDIND_I1 (OP_REGVAR) {
@@ -23,13 +24,13 @@ reg: CEE_LDIND_I1 (OP_REGVAR) {
 reg: CEE_LDIND_I2 (OP_REGVAR) {
        MONO_EMIT_UNALU (s, tree, OP_SEXT_I2, state->reg1, state->left->tree->dreg);}
 
-stmt: CEE_BNE_UN (fpcflags) {
-       tree->opcode = OP_FBNE_UN;
+stmt: CEE_BEQ (fpcflags) {
+       tree->opcode = OP_FBEQ;
        mono_bblock_add_inst (s->cbb, tree);
 }
 
-stmt: CEE_BEQ (fpcflags) {
-       tree->opcode = OP_FBEQ;
+stmt: CEE_BNE_UN (fpcflags) {
+       tree->opcode = OP_FBNE_UN;
        mono_bblock_add_inst (s->cbb, tree);
 }
 
@@ -73,4 +74,201 @@ stmt: CEE_BLE_UN (fpcflags) {
        mono_bblock_add_inst (s->cbb, tree);
 }
 
+fpcflags: OP_COMPARE (freg, freg) {
+       tree->opcode = OP_FCOMPARE;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_CEQ (fpcflags) {       
+       tree->dreg = state->reg1;
+       tree->opcode = OP_FCEQ;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_CLT (fpcflags) {       
+       tree->dreg = state->reg1;
+       tree->opcode = OP_FCLT;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_CLT_UN (fpcflags) {    
+       tree->dreg = state->reg1;
+       tree->opcode = OP_FCLT_UN;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_CGT (fpcflags) {       
+       tree->dreg = state->reg1;
+       tree->opcode = OP_FCGT;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_CGT_UN (fpcflags) {    
+       tree->dreg = state->reg1;
+       tree->opcode = OP_FCGT_UN;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+freg: OP_LCONV_TO_R8 (reg) {
+       /* FIXME: Move this inssel-long.brg */
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = state->reg1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+freg: OP_LCONV_TO_R4 (reg) {
+       /* FIXME: Move this inssel-long.brg */
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = state->reg1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+stmt: OP_OUTARG_REG (reg) {    
+       /* FIXME: Move this to inssel.brg */
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+
+       tree->opcode = OP_MOVE;
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = mono_regstate_next_int (s->rs);
+       mono_bblock_add_inst (s->cbb, tree);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+}
+
+stmt: OP_OUTARG_REG (CEE_LDIND_I (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_REF (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I1 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_U1 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I2 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_U2 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I4 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_U4 (base)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I8 (base)) {
+       /* FIXME: Move this to inssel.brg or inssel-long.brg */
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+       guint32 dreg;
+       MonoInst *base = state->left->left->tree;
+
+       dreg = mono_regstate_next_int (s->rs);
+       MONO_EMIT_LOAD_MEMBASE_OP (s, tree, ldind_to_load_membase (state->left->tree->opcode),
+                                       dreg, base->inst_basereg, base->inst_offset);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+}
+
+stmt: OP_OUTARG_REG (OP_I8CONST),
+stmt: OP_OUTARG_REG (OP_ICONST) {
+       /* FIXME: Move this to inssel.brg or inssel-long.brg */
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+
+       tree->opcode = OP_ICONST;
+       tree->inst_c0 = state->left->tree->inst_c0;
+       tree->dreg = mono_regstate_next_int (s->rs);
+       mono_bblock_add_inst (s->cbb, tree);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+}
+
+stmt: OP_OUTARG_REG (CEE_LDIND_I (OP_REGVAR)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I8 (OP_REGVAR)),
+stmt: OP_OUTARG_REG (CEE_LDIND_I4 (OP_REGVAR)),
+stmt: OP_OUTARG_REG (CEE_LDIND_U4 (OP_REGVAR)),
+stmt: OP_OUTARG_REG (CEE_LDIND_REF (OP_REGVAR)) {      
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+
+       tree->opcode = OP_MOVE;
+       tree->sreg1 = state->left->left->tree->dreg;
+       tree->dreg = mono_regstate_next_int (s->rs);
+       mono_bblock_add_inst (s->cbb, tree);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+}
+
+stmt: OP_OUTARG_FREG (freg) {
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+
+       tree->opcode = OP_FMOVE;
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = mono_regstate_next_float (s->rs);
+       mono_bblock_add_inst (s->cbb, tree);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+}
+
+stmt: OP_OUTARG (reg) {
+       MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI8_MEMBASE_REG, IA64_SP, tree->inst_imm, state->left->reg1);
+}
+
+stmt: OP_OUTARG (freg) {
+       MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER8_MEMBASE_REG, IA64_SP, tree->inst_imm, state->left->reg1);
+}
+
+stmt: OP_OUTARG_R4 (freg) {
+       MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER4_MEMBASE_REG, IA64_SP, tree->inst_imm, state->left->reg1);
+}
+
+stmt: OP_OUTARG_REG (OP_LDADDR (OP_REGOFFSET)),
+stmt: OP_OUTARG_REG (CEE_LDOBJ (OP_REGOFFSET)) {
+       /* FIXME: Move this to inssel.brg */
+       MonoCallInst *call = (MonoCallInst*)tree->inst_right;
+
+       tree->opcode = OP_ADD_IMM;
+       tree->sreg1 = state->left->left->tree->inst_basereg;
+       tree->inst_imm = state->left->left->tree->inst_offset;
+       tree->dreg = mono_regstate_next_int (s->rs);
+       mono_bblock_add_inst (s->cbb, tree);
+
+       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+}
+
+stmt: OP_SETRET (reg) {
+       tree->opcode = OP_MOVE;
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = MONO_ARCH_RETREG1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+stmt: OP_SETRET (freg) {
+       tree->opcode = OP_FMOVE;
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = MONO_ARCH_FRETREG1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+# Optimized call instructions
+reg: OP_LCALL_REG (OP_ICONST),
+reg: OP_LCALL_REG (OP_I8CONST) {
+       /* FIXME: Move this to inssel-long.brg */
+       tree->opcode = OP_LCALL;
+       ((MonoCallInst*)tree)->fptr = state->left->tree->inst_p0;
+       tree->dreg = state->reg1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+stmt: OP_OUTARG_VT (CEE_LDOBJ (base), base) {
+       MonoInst *vt = state->left->left->tree;
+       MonoInst *stack_addr = state->right->tree;
+       int sz = stack_addr->inst_imm;
+
+       if (!sz)
+               return;
+
+       sz += 7;
+       sz &= ~7;
+       mini_emit_memcpy (s, stack_addr->inst_basereg, stack_addr->inst_offset, vt->inst_basereg, vt->inst_offset, sz, 0);
+}
+
+
+stmt: OP_START_HANDLER {
+       /* FIXME: */
+}
+
+stmt: CEE_ENDFINALLY {
+       /* FIXME: */
+}
+
+stmt: OP_ENDFILTER (reg) {
+       /* FIXME: */
+}
+
 %%
index d1bb391250e2d5c21d81af283d126b55bd8e0ab3..1771f5350542f96411314e54e51f540b3dffe6d3 100644 (file)
@@ -226,6 +226,85 @@ mono_llmult_ovf (gint64 a, gint64 b)
        return 0;
 }
 
+#ifdef MONO_ARCH_EMULATE_MUL_DIV
+
+static gint32
+mono_imul (gint32 a, gint32 b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a * b;
+}
+
+static gint32
+mono_idiv (gint32 a, gint32 b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a / b;
+}
+
+static guint32
+mono_idiv_un (guint32 a, guint32 b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a / b;
+}
+
+static gint32
+mono_irem (gint32 a, gint32 b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a % b;
+}
+
+static guint32
+mono_irem_un (guint32 a, guint32 b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a % b;
+}
+
+static gint32
+mono_imul_ovf (gint32 a, gint32 b)
+{
+       gint64 res;
+
+       MONO_ARCH_SAVE_REGS;
+
+       res = (gint64)a * (gint64)b;
+
+       /* FIXME: */
+       return res;
+}
+
+static gint32
+mono_imul_ovf_un (guint32 a, guint32 b)
+{
+       guint64 res;
+
+       MONO_ARCH_SAVE_REGS;
+
+       res = (guint64)a * (guint64)b;
+
+       if ((res >> 32))
+               mono_raise_exception (mono_get_exception_overflow ());
+
+       return res;
+}
+
+static double
+mono_fdiv (double a, double b)
+{
+       MONO_ARCH_SAVE_REGS;
+
+       return a / b;
+}
+#endif
+
 static gint64 
 mono_lldiv (gint64 a, gint64 b)
 {
index 20d6aca27d5a8078ead4f8b7522ef2a0b0f67f6f..de67a7d3489c46463e1fcf1e4c9e6c438f6f4f02 100644 (file)
@@ -173,7 +173,12 @@ create_spilled_load_float (MonoCompile *cfg, int spill, int reg, MonoInst *ins)
 #define rassign(cfg,reg,fp) ((fp) ? (cfg)->rs->fassign [(reg)] : (cfg)->rs->iassign [(reg)])
 #define sreg1_is_fp(ins) (ins_spec [(ins)->opcode] [MONO_INST_SRC1] == 'f')
 #define sreg2_is_fp(ins) (ins_spec [(ins)->opcode] [MONO_INST_SRC2] == 'f')
+
+#ifdef MONO_ARCH_INST_IS_FLOAT
+#define dreg_is_fp(ins)  (MONO_ARCH_INST_IS_FLOAT (ins_spec [(ins)->opcode] [MONO_INST_DEST]))
+#else
 #define dreg_is_fp(ins)  (ins_spec [(ins)->opcode] [MONO_INST_DEST] == 'f')
+#endif
 
 #define regpair_reg2_mask(desc,hreg1) ((MONO_ARCH_INST_REGPAIR_REG2 (desc,hreg1) != -1) ? (1 << MONO_ARCH_INST_REGPAIR_REG2 (desc,hreg1)) : MONO_ARCH_CALLEE_REGS)
 
@@ -1070,7 +1075,7 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
 
                if (spec [MONO_INST_CLOB] == 'c') {
                        int j, s, dreg, dreg2;
-                       guint32 clob_mask;
+                       guint64 clob_mask;
 
                        clob_mask = MONO_ARCH_CALLEE_REGS;
 
@@ -1105,7 +1110,7 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
 
                                for (j = 0; j < MONO_MAX_FREGS; ++j) {
                                        s = 1 << j;
-                                       if ((clob_mask & s) && !(rs->ffree_mask & s) && (j != ins->sreg1)) {
+                                       if ((clob_mask & s) && !(rs->ffree_mask & s) && (j != ins->sreg1) && (j != dreg)) {
                                                get_register_force_spilling (cfg, tmp, ins, rs->fsymbolic [j], TRUE);
                                                mono_regstate_free_float (rs, j);
                                        }
index bc362613c26503106e5119c4cfe94bb683030957..f955e787ac3786a224c8576d7b8558291db47a81 100644 (file)
@@ -46,9 +46,11 @@ static const char*const * ins_spec = ia64_desc;
 
 #define SIGNAL_STACK_SIZE (64 * 1024)
 
-#define ARGS_OFFSET 0
+#define ARGS_OFFSET 16
 
-#define GP_SCRATCH_REG 30
+#define GP_SCRATCH_REG 31
+#define GP_SCRATCH_REG2 30
+#define FP_SCRATCH_REG 32
 
 #define LOOP_ALIGNMENT 8
 #define bb_is_loop_start(bb) ((bb)->loop_body_start && (bb)->nesting)
@@ -107,9 +109,9 @@ mono_arch_fregname (int reg)
 
 typedef enum {
        ArgInIReg,
-       ArgInFloatSSEReg,
-       ArgInDoubleSSEReg,
+       ArgInFloatReg,
        ArgOnStack,
+       ArgValuetypeAddrInIReg,
        ArgValuetypeInReg,
        ArgNone /* only in pair_storage */
 } ArgStorage;
@@ -144,6 +146,69 @@ typedef struct {
                (dest)->type = STACK_I4;        \
        } while (0)
 
+#define PARAM_REGS 8
+
+static void inline
+add_general (guint32 *gr, guint32 *stack_size, ArgInfo *ainfo)
+{
+    ainfo->offset = *stack_size;
+
+    if (*gr >= PARAM_REGS) {
+               ainfo->storage = ArgOnStack;
+               (*stack_size) += sizeof (gpointer);
+    }
+    else {
+               ainfo->storage = ArgInIReg;
+               ainfo->reg = *gr;
+               *(gr) += 1;
+    }
+}
+
+#define FLOAT_PARAM_REGS 8
+
+static void inline
+add_float (guint32 *gr, guint32 *fr, guint32 *stack_size, ArgInfo *ainfo, gboolean is_double)
+{
+    ainfo->offset = *stack_size;
+
+    if (*gr >= PARAM_REGS) {
+               ainfo->storage = ArgOnStack;
+               (*stack_size) += sizeof (gpointer);
+    }
+    else {
+               ainfo->storage = ArgInFloatReg;
+               ainfo->reg = 8 + *fr;
+               (*fr) += 1;
+               (*gr) += 1;
+    }
+}
+
+static void
+add_valuetype (MonoMethodSignature *sig, ArgInfo *ainfo, MonoType *type,
+              gboolean is_return,
+              guint32 *gr, guint32 *fr, guint32 *stack_size)
+{
+       guint32 size;
+       MonoClass *klass;
+
+       klass = mono_class_from_mono_type (type);
+       if (sig->pinvoke) 
+               size = mono_type_native_stack_size (&klass->byval_arg, NULL);
+       else 
+               size = mono_type_stack_size (&klass->byval_arg, NULL);
+
+       if (!sig->pinvoke || (size == 0)) {
+               /* Allways pass in memory */
+               ainfo->offset = *stack_size;
+               *stack_size += ALIGN_TO (size, 8);
+               ainfo->storage = ArgOnStack;
+
+               return;
+       }
+       else
+               NOT_IMPLEMENTED;
+}
+
 /*
  * get_call_info:
  *
@@ -194,6 +259,28 @@ get_call_info (MonoMethodSignature *sig, gboolean is_pinvoke)
                        cinfo->ret.storage = ArgInIReg;
                        cinfo->ret.reg = IA64_R8;
                        break;
+               case MONO_TYPE_R4:
+               case MONO_TYPE_R8:
+                       cinfo->ret.storage = ArgInFloatReg;
+                       cinfo->ret.reg = 8;
+                       break;
+               case MONO_TYPE_VALUETYPE: {
+                       guint32 tmp_gr = 0, tmp_fr = 0, tmp_stacksize = 0;
+
+                       add_valuetype (sig, &cinfo->ret, sig->ret, TRUE, &tmp_gr, &tmp_fr, &tmp_stacksize);
+                       if (cinfo->ret.storage == ArgOnStack)
+                               /* The caller passes the address where the value is stored */
+                               add_general (&gr, &stack_size, &cinfo->ret);
+                       if (cinfo->ret.storage == ArgInIReg)
+                               cinfo->ret.storage = ArgValuetypeAddrInIReg;
+                       break;
+               }
+               case MONO_TYPE_TYPEDBYREF:
+                       /* Same as a valuetype with size 24 */
+                       add_general (&gr, &stack_size, &cinfo->ret);
+                       if (cinfo->ret.storage == ArgInIReg)
+                               cinfo->ret.storage = ArgValuetypeAddrInIReg;
+                       break;
                case MONO_TYPE_VOID:
                        break;
                default:
@@ -201,8 +288,97 @@ get_call_info (MonoMethodSignature *sig, gboolean is_pinvoke)
                }
        }
 
-       if (sig->param_count != 0)
-               NOT_IMPLEMENTED;
+       /* this */
+       if (sig->hasthis)
+               add_general (&gr, &stack_size, cinfo->args + 0);
+
+       if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (n == 0)) {
+               gr = PARAM_REGS;
+               fr = FLOAT_PARAM_REGS;
+               
+               /* Emit the signature cookie just before the implicit arguments */
+               add_general (&gr, &stack_size, &cinfo->sig_cookie);
+       }
+
+       for (i = 0; i < sig->param_count; ++i) {
+               ArgInfo *ainfo = &cinfo->args [sig->hasthis + i];
+               MonoType *ptype;
+
+               if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (i == sig->sentinelpos)) {
+                       /* We allways pass the sig cookie on the stack for simplicity */
+                       /* 
+                        * Prevent implicit arguments + the sig cookie from being passed 
+                        * in registers.
+                        */
+                       gr = PARAM_REGS;
+                       fr = FLOAT_PARAM_REGS;
+
+                       /* Emit the signature cookie just before the implicit arguments */
+                       add_general (&gr, &stack_size, &cinfo->sig_cookie);
+               }
+
+               if (sig->params [i]->byref) {
+                       add_general (&gr, &stack_size, ainfo);
+                       continue;
+               }
+               ptype = mono_type_get_underlying_type (sig->params [i]);
+               switch (ptype->type) {
+               case MONO_TYPE_BOOLEAN:
+               case MONO_TYPE_I1:
+               case MONO_TYPE_U1:
+                       add_general (&gr, &stack_size, ainfo);
+                       break;
+               case MONO_TYPE_I2:
+               case MONO_TYPE_U2:
+               case MONO_TYPE_CHAR:
+                       add_general (&gr, &stack_size, ainfo);
+                       break;
+               case MONO_TYPE_I4:
+               case MONO_TYPE_U4:
+                       add_general (&gr, &stack_size, ainfo);
+                       break;
+               case MONO_TYPE_I:
+               case MONO_TYPE_U:
+               case MONO_TYPE_PTR:
+               case MONO_TYPE_FNPTR:
+               case MONO_TYPE_CLASS:
+               case MONO_TYPE_OBJECT:
+               case MONO_TYPE_STRING:
+               case MONO_TYPE_SZARRAY:
+               case MONO_TYPE_ARRAY:
+                       add_general (&gr, &stack_size, ainfo);
+                       break;
+               case MONO_TYPE_VALUETYPE:
+                       /* FIXME: */
+                       /* We allways pass valuetypes on the stack */
+                       add_valuetype (sig, ainfo, sig->params [i], FALSE, &gr, &fr, &stack_size);
+                       break;
+               case MONO_TYPE_TYPEDBYREF:
+                       stack_size += sizeof (MonoTypedRef);
+                       ainfo->storage = ArgOnStack;
+                       break;
+               case MONO_TYPE_U8:
+               case MONO_TYPE_I8:
+                       add_general (&gr, &stack_size, ainfo);
+                       break;
+               case MONO_TYPE_R4:
+                       add_float (&gr, &fr, &stack_size, ainfo, FALSE);
+                       break;
+               case MONO_TYPE_R8:
+                       add_float (&gr, &fr, &stack_size, ainfo, TRUE);
+                       break;
+               default:
+                       g_assert_not_reached ();
+               }
+       }
+
+       if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (n > 0) && (sig->sentinelpos == sig->param_count)) {
+               gr = PARAM_REGS;
+               fr = FLOAT_PARAM_REGS;
+               
+               /* Emit the signature cookie just before the implicit arguments */
+               add_general (&gr, &stack_size, &cinfo->sig_cookie);
+       }
 
        cinfo->stack_usage = stack_size;
        cinfo->reg_usage = gr;
@@ -307,16 +483,36 @@ mono_arch_get_allocatable_int_vars (MonoCompile *cfg)
        return vars;
 }
 
+static void
+mono_ia64_alloc_stacked_registers (MonoCompile *cfg)
+{
+       CallInfo *cinfo;
+
+       if (cfg->arch.reg_local0 > 0)
+               /* Already done */
+               return;
+
+       cinfo = get_call_info (mono_method_signature (cfg->method), FALSE);
+
+       /* Three registers are reserved for use by the prolog/epilog */
+       cfg->arch.reg_in0 = 32;
+       cfg->arch.reg_local0 = cfg->arch.reg_in0 + cinfo->reg_usage + 3;
+       cfg->arch.reg_out0 = cfg->arch.reg_local0 + 8;
+
+       cfg->arch.reg_saved_ar_pfs = cfg->arch.reg_local0 - 1;
+       cfg->arch.reg_saved_b0 = cfg->arch.reg_local0 - 2;
+       cfg->arch.reg_saved_sp = cfg->arch.reg_local0 - 3;
+
+       g_free (cinfo);
+}
+
 GList *
 mono_arch_get_global_int_regs (MonoCompile *cfg)
 {
        GList *regs = NULL;
        int i;
 
-       /* FIXME: */
-       /* Three registers are reserved for use by the prolog/epilog */
-       cfg->arch.reg_local0 = 32 + 3;
-       cfg->arch.reg_out0 = cfg->arch.reg_local0 + 8;
+       mono_ia64_alloc_stacked_registers (cfg);
 
        for (i = cfg->arch.reg_local0; i < cfg->arch.reg_out0; ++i) {
                /* FIXME: regmask */
@@ -353,6 +549,8 @@ mono_arch_allocate_vars (MonoCompile *m)
        gint32 *offsets;
        CallInfo *cinfo;
 
+       mono_ia64_alloc_stacked_registers (m);
+
        header = mono_method_get_header (m->method);
 
        sig = mono_method_signature (m->method);
@@ -365,31 +563,31 @@ mono_arch_allocate_vars (MonoCompile *m)
         */
 
        /* Locals are allocated backwards from %fp */
-       /* FIXME: */
-       m->frame_reg = IA64_GP;
+       m->frame_reg = m->arch.reg_saved_sp;
        offset = 0;
 
        if (m->method->save_lmf) {
-               NOT_IMPLEMENTED;
+               /* FIXME: */
+#if 0
                /* Reserve stack space for saving LMF + argument regs */
                offset += sizeof (MonoLMF);
                m->arch.lmf_offset = offset;
+#endif
        }
 
        if (sig->ret->type != MONO_TYPE_VOID) {
                switch (cinfo->ret.storage) {
                case ArgInIReg:
-                       if ((MONO_TYPE_ISSTRUCT (sig->ret) && !mono_class_from_mono_type (sig->ret)->enumtype) || (sig->ret->type == MONO_TYPE_TYPEDBYREF)) {
-                               /* The register is volatile */
-                               m->ret->opcode = OP_REGOFFSET;
-                               m->ret->inst_basereg = m->frame_reg;
-                               offset += 8;
-                               m->ret->inst_offset = - offset;
-                       }
-                       else {
-                               m->ret->opcode = OP_REGVAR;
-                               m->ret->inst_c0 = cinfo->ret.reg;
-                       }
+                       m->ret->opcode = OP_REGVAR;
+                       m->ret->inst_c0 = cinfo->ret.reg;
+                       break;
+               case ArgInFloatReg:
+                       m->ret->opcode = OP_REGVAR;
+                       m->ret->inst_c0 = cinfo->ret.reg;
+                       break;
+               case ArgValuetypeAddrInIReg:
+                       m->ret->opcode = OP_REGVAR;
+                       m->ret->inst_c0 = m->arch.reg_in0 + cinfo->ret.reg;
                        break;
                default:
                        g_assert_not_reached ();
@@ -427,8 +625,6 @@ mono_arch_allocate_vars (MonoCompile *m)
                        gboolean inreg = TRUE;
                        MonoType *arg_type;
 
-                       NOT_IMPLEMENTED;
-
                        if (sig->hasthis && (i == 0))
                                arg_type = &mono_defaults.object_class->byval_arg;
                        else
@@ -443,12 +639,20 @@ mono_arch_allocate_vars (MonoCompile *m)
                        switch (ainfo->storage) {
                        case ArgInIReg:
                                inst->opcode = OP_REGVAR;
-                               inst->dreg = ainfo->reg;
+                               inst->dreg = m->arch.reg_in0 + ainfo->reg;
+                               break;
+                       case ArgInFloatReg:
+                               /* 
+                                * Since float regs are volatile, we save the arguments to
+                                * the stack in the prolog.
+                                * FIXME: Avoid this if the method contains no calls.
+                                */
+                               inreg = FALSE;
                                break;
                        case ArgOnStack:
                                inst->opcode = OP_REGOFFSET;
                                inst->inst_basereg = m->frame_reg;
-                               inst->inst_offset = ainfo->offset + ARGS_OFFSET;
+                               inst->inst_offset = ARGS_OFFSET + ainfo->offset;
                                break;
                        case ArgValuetypeInReg:
                                break;
@@ -457,12 +661,13 @@ mono_arch_allocate_vars (MonoCompile *m)
                        }
 
                        if (!inreg && (ainfo->storage != ArgOnStack)) {
-                               NOT_IMPLEMENTED;
                                inst->opcode = OP_REGOFFSET;
                                inst->inst_basereg = m->frame_reg;
                                /* These arguments are saved to the stack in the prolog */
-                               if (ainfo->storage == ArgValuetypeInReg)
+                               if (ainfo->storage == ArgValuetypeInReg) {
+                                       NOT_IMPLEMENTED;
                                        offset += 2 * sizeof (gpointer);
+                               }
                                else
                                        offset += sizeof (gpointer);
                                inst->inst_offset = - offset;
@@ -481,6 +686,29 @@ mono_arch_create_vars (MonoCompile *cfg)
        g_assert_not_reached ();
 }
 
+static void
+add_outarg_reg (MonoCompile *cfg, MonoCallInst *call, MonoInst *arg, ArgStorage storage, int reg, MonoInst *tree)
+{
+       switch (storage) {
+       case ArgInIReg:
+               arg->opcode = OP_OUTARG_REG;
+               arg->inst_left = tree;
+               arg->inst_right = (MonoInst*)call;
+               arg->unused = reg;
+               call->used_iregs |= 1 << reg;
+               break;
+       case ArgInFloatReg:
+               arg->opcode = OP_OUTARG_FREG;
+               arg->inst_left = tree;
+               arg->inst_right = (MonoInst*)call;
+               arg->unused = reg;
+               call->used_fregs |= 1 << reg;
+               break;
+       default:
+               g_assert_not_reached ();
+       }
+}
+
 /* 
  * take the arguments and generate the arch-specific
  * instructions to properly call the function in call.
@@ -491,9 +719,136 @@ mono_arch_create_vars (MonoCompile *cfg)
 MonoCallInst*
 mono_arch_call_opcode (MonoCompile *cfg, MonoBasicBlock* bb, MonoCallInst *call, int is_virtual)
 {
-       g_assert_not_reached ();
+       MonoInst *arg, *in;
+       MonoMethodSignature *sig;
+       int i, n, stack_size;
+       CallInfo *cinfo;
+       ArgInfo *ainfo;
 
-       return NULL;
+       stack_size = 0;
+
+       mono_ia64_alloc_stacked_registers (cfg);
+
+       sig = call->signature;
+       n = sig->param_count + sig->hasthis;
+
+       cinfo = get_call_info (sig, sig->pinvoke);
+
+       for (i = 0; i < n; ++i) {
+               ainfo = cinfo->args + i;
+
+               if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (i == sig->sentinelpos)) {
+                       MonoMethodSignature *tmp_sig;
+
+                       NOT_IMPLEMENTED;
+
+                       /* Emit the signature cookie just before the implicit arguments */
+                       MonoInst *sig_arg;
+                       /* FIXME: Add support for signature tokens to AOT */
+                       cfg->disable_aot = TRUE;
+
+                       g_assert (cinfo->sig_cookie.storage == ArgOnStack);
+
+                       /*
+                        * mono_ArgIterator_Setup assumes the signature cookie is 
+                        * passed first and all the arguments which were before it are
+                        * passed on the stack after the signature. So compensate by 
+                        * passing a different signature.
+                        */
+                       tmp_sig = mono_metadata_signature_dup (call->signature);
+                       tmp_sig->param_count -= call->signature->sentinelpos;
+                       tmp_sig->sentinelpos = 0;
+                       memcpy (tmp_sig->params, call->signature->params + call->signature->sentinelpos, tmp_sig->param_count * sizeof (MonoType*));
+
+                       MONO_INST_NEW (cfg, sig_arg, OP_ICONST);
+                       sig_arg->inst_p0 = tmp_sig;
+
+                       MONO_INST_NEW (cfg, arg, OP_OUTARG);
+                       arg->inst_left = sig_arg;
+                       arg->type = STACK_PTR;
+
+                       /* prepend, so they get reversed */
+                       arg->next = call->out_args;
+                       call->out_args = arg;
+               }
+
+               if (is_virtual && i == 0) {
+                       /* the argument will be attached to the call instruction */
+                       in = call->args [i];
+               } else {
+                       MonoType *arg_type;
+
+                       MONO_INST_NEW (cfg, arg, OP_OUTARG);
+                       in = call->args [i];
+                       arg->cil_code = in->cil_code;
+                       arg->inst_left = in;
+                       arg->type = in->type;
+                       /* prepend, so they get reversed */
+                       arg->next = call->out_args;
+                       call->out_args = arg;
+
+                       if (sig->hasthis && (i == 0))
+                               arg_type = &mono_defaults.object_class->byval_arg;
+                       else
+                               arg_type = sig->params [i - sig->hasthis];
+
+                       if ((i >= sig->hasthis) && (MONO_TYPE_ISSTRUCT(arg_type))) {
+                               MonoInst *stack_addr;
+                               gint align;
+                               guint32 size;
+
+                               if (arg_type->type == MONO_TYPE_TYPEDBYREF) {
+                                       size = sizeof (MonoTypedRef);
+                                       align = sizeof (gpointer);
+                               }
+                               else
+                               if (sig->pinvoke)
+                                       size = mono_type_native_stack_size (&in->klass->byval_arg, &align);
+                               else
+                                       size = mono_type_stack_size (&in->klass->byval_arg, &align);
+                               if (ainfo->storage == ArgValuetypeInReg) {
+                                       NOT_IMPLEMENTED;
+                               }
+
+                               MONO_INST_NEW (cfg, stack_addr, OP_REGOFFSET);
+                               stack_addr->inst_basereg = IA64_SP;
+                               stack_addr->inst_offset = 16 + ainfo->offset;
+                               stack_addr->inst_imm = size;
+
+                               arg->opcode = OP_OUTARG_VT;
+                               arg->inst_right = stack_addr;
+                       }
+                       else {
+                               switch (ainfo->storage) {
+                               case ArgInIReg:
+                                       add_outarg_reg (cfg, call, arg, ainfo->storage, cfg->arch.reg_out0 + ainfo->reg, in);
+                                       break;
+                               case ArgInFloatReg:
+                                       add_outarg_reg (cfg, call, arg, ainfo->storage, ainfo->reg, in);
+                                       break;
+                               case ArgOnStack:
+                                       if (arg_type->type == MONO_TYPE_R4 && !arg_type->byref) {
+                                               arg->opcode = OP_OUTARG_R4;
+                                       }
+                                       else
+                                               arg->opcode = OP_OUTARG;
+                                       arg->inst_imm = 16 + ainfo->offset;
+                                       break;
+                               default:
+                                       g_assert_not_reached ();
+                               }
+                       }
+               }
+       }
+
+       call->stack_usage = cinfo->stack_usage;
+       cfg->param_area = MAX (cfg->param_area, call->stack_usage);
+       cfg->arch.n_out_regs = MAX (cfg->arch.n_out_regs, cinfo->reg_usage);
+       cfg->flags |= MONO_CFG_HAS_CALLS;
+
+       g_free (cinfo);
+
+       return call;
 }
 
 static void
@@ -504,9 +859,10 @@ peephole_pass (MonoCompile *cfg, MonoBasicBlock *bb)
 
        while (ins) {
                switch (ins->opcode) {
-               case CEE_CONV_I4:
-               case CEE_CONV_U4:
+               case CEE_CONV_I8:
+               case CEE_CONV_I:
                case OP_MOVE:
+               case OP_FMOVE:
                case OP_SETREG:
                        /*
                         * Removes:
@@ -567,6 +923,10 @@ opcode_to_ia64_cmp (int opcode)
                return OP_IA64_CMP_GT_UN;
        case OP_COND_EXC_GT_UN:
                return OP_IA64_CMP_GT_UN;
+       case OP_COND_EXC_LE_UN:
+               return OP_IA64_CMP_LE_UN;
+       case OP_COND_EXC_NE_UN:
+               return OP_IA64_CMP_NE;
        case OP_COND_EXC_LT:
                return OP_IA64_CMP_LT;
        case OP_COND_EXC_GT:
@@ -611,6 +971,31 @@ opcode_to_ia64_cmp (int opcode)
                return OP_IA64_CMP4_LT_UN;
        case OP_ICGT_UN:
                return OP_IA64_CMP4_GT_UN;
+       case OP_FBEQ:
+       case OP_FCEQ:
+               return OP_IA64_FCMP_EQ;
+       case OP_FBNE_UN:
+               return OP_IA64_FCMP_NE;
+       case OP_FBLT:
+       case OP_FCLT:
+               return OP_IA64_FCMP_LT;
+       case OP_FBLE:
+               return OP_IA64_FCMP_LE;
+       case OP_FBGT:
+       case OP_FCGT:
+               return OP_IA64_FCMP_GT;
+       case OP_FBGE:
+               return OP_IA64_FCMP_GE;
+       case OP_FBLT_UN:
+       case OP_FCLT_UN:
+               return OP_IA64_FCMP_LT_UN;
+       case OP_FCGT_UN:
+       case OP_FBGT_UN:
+               return OP_IA64_FCMP_GT_UN;
+       case OP_FBGE_UN:
+               return OP_IA64_FCMP_GE_UN;
+       case OP_FBLE_UN:
+               return OP_IA64_FCMP_LE_UN;
        default:
                printf ("%s\n", mono_inst_name (opcode));
                NOT_IMPLEMENTED;
@@ -624,103 +1009,78 @@ opcode_to_ia64_cmp_imm (int opcode)
        switch (opcode) {
        case CEE_BEQ:
                return OP_IA64_CMP_EQ_IMM;
-               break;
        case CEE_BNE_UN:
                return OP_IA64_CMP_NE_IMM;
-               break;
        case CEE_BLE:
                return OP_IA64_CMP_GE_IMM;
-               break;
        case CEE_BGE:
                return OP_IA64_CMP_LE_IMM;
-               break;
        case CEE_BLT:
                return OP_IA64_CMP_GT_IMM;
-               break;
        case CEE_BGT:
                return OP_IA64_CMP_LT_IMM;
-               break;
        case CEE_BLE_UN:
                return OP_IA64_CMP_GE_UN_IMM;
-               break;
        case CEE_BGE_UN:
                return OP_IA64_CMP_LE_UN_IMM;
-               break;
        case CEE_BLT_UN:
                return OP_IA64_CMP_GT_UN_IMM;
-               break;
        case CEE_BGT_UN:
                return OP_IA64_CMP_LT_UN_IMM;
-               break;
        case OP_CEQ:
                return OP_IA64_CMP_EQ_IMM;
-               break;
        case OP_CLT:
                return OP_IA64_CMP_GT_IMM;
-               break;
        case OP_CGT:
                return OP_IA64_CMP_LT_IMM;
-               break;
        case OP_CLT_UN:
                return OP_IA64_CMP_GT_UN_IMM;
-               break;
        case OP_CGT_UN:
                return OP_IA64_CMP_LT_UN_IMM;
-               break;
+       case OP_COND_EXC_EQ:
+               return OP_IA64_CMP_EQ_IMM;
        case OP_COND_EXC_GT_UN:
                return OP_IA64_CMP_LT_UN_IMM;
-               break;
        case OP_COND_EXC_LT:
                return OP_IA64_CMP_GT_IMM;
-               break;
        case OP_COND_EXC_GT:
                return OP_IA64_CMP_LT_IMM;
-               break;
+       case OP_COND_EXC_LE_UN:
+               return OP_IA64_CMP_GE_UN_IMM;
+       case OP_COND_EXC_NE_UN:
+               return OP_IA64_CMP_NE_IMM;
+       case OP_COND_EXC_LT_UN:
+               return OP_IA64_CMP_GT_UN_IMM;
        case OP_IBEQ:
                return OP_IA64_CMP4_EQ_IMM;
-               break;
        case OP_IBNE_UN:
                return OP_IA64_CMP4_NE_IMM;
-               break;
        case OP_IBLE:
                return OP_IA64_CMP4_GE_IMM;
-               break;
        case OP_IBGE:
                return OP_IA64_CMP4_LE_IMM;
-               break;
        case OP_IBLT:
                return OP_IA64_CMP4_GT_IMM;
-               break;
        case OP_IBGT:
                return OP_IA64_CMP4_LT_IMM;
-               break;
        case OP_IBLE_UN:
                return OP_IA64_CMP4_GE_UN_IMM;
-               break;
        case OP_IBGE_UN:
                return OP_IA64_CMP4_LE_UN_IMM;
-               break;
        case OP_IBLT_UN:
                return OP_IA64_CMP4_GT_UN_IMM;
-               break;
        case OP_IBGT_UN:
                return OP_IA64_CMP4_LT_UN_IMM;
-               break;
        case OP_ICEQ:
                return OP_IA64_CMP4_EQ_IMM;
-               break;
        case OP_ICLT:
                return OP_IA64_CMP4_GT_IMM;
-               break;
        case OP_ICGT:
                return OP_IA64_CMP4_LT_IMM;
-               break;
        case OP_ICLT_UN:
                return OP_IA64_CMP4_GT_UN_IMM;
-               break;
        case OP_ICGT_UN:
                return OP_IA64_CMP4_LT_UN_IMM;
-               break;
        default:
                printf ("%s\n", mono_inst_name (opcode));
                NOT_IMPLEMENTED;
@@ -772,6 +1132,7 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_STOREI2_MEMBASE_IMM:
                case OP_STOREI4_MEMBASE_IMM:
                case OP_STOREI8_MEMBASE_IMM:
+               case OP_STORE_MEMBASE_IMM:
                        /* There are no store_membase instructions on ia64 */
                        NEW_INS (cfg, temp, OP_I8CONST);
                        temp->inst_c0 = ins->inst_offset;
@@ -792,6 +1153,7 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                                ins->opcode = OP_STOREI4_MEMBASE_REG;
                                break;
                        case OP_STOREI8_MEMBASE_IMM:
+                       case OP_STORE_MEMBASE_IMM:
                                ins->opcode = OP_STOREI8_MEMBASE_REG;
                                break;
                        default:
@@ -816,14 +1178,23 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_STOREI8_MEMBASE_REG:
                case OP_STORER4_MEMBASE_REG:
                case OP_STORER8_MEMBASE_REG:
+               case OP_STORE_MEMBASE_REG:
                        /* There are no store_membase instructions on ia64 */
-                       NEW_INS (cfg, temp, OP_I8CONST);
-                       temp->inst_c0 = ins->inst_offset;
-                       temp->dreg = mono_regstate_next_int (cfg->rs);
-                       NEW_INS (cfg, temp2, CEE_ADD);
-                       temp2->sreg1 = ins->inst_destbasereg;
-                       temp2->sreg2 = temp->dreg;
-                       temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       if (ia64_is_imm14 (ins->inst_offset)) {
+                               NEW_INS (cfg, temp2, OP_ADD_IMM);
+                               temp2->sreg1 = ins->inst_destbasereg;
+                               temp2->inst_imm = ins->inst_offset;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
+                       else {
+                               NEW_INS (cfg, temp, OP_I8CONST);
+                               temp->inst_c0 = ins->inst_offset;
+                               temp->dreg = mono_regstate_next_int (cfg->rs);
+                               NEW_INS (cfg, temp2, CEE_ADD);
+                               temp2->sreg1 = ins->inst_destbasereg;
+                               temp2->sreg2 = temp->dreg;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
 
                        ins->inst_offset = 0;
                        ins->inst_destbasereg = temp2->dreg;
@@ -836,21 +1207,77 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_LOADU4_MEMBASE:
                case OP_LOADI8_MEMBASE:
                case OP_LOAD_MEMBASE:
+               case OP_LOADR4_MEMBASE:
                case OP_LOADR8_MEMBASE:
                        /* There are no load_membase instructions on ia64 */
-                       NEW_INS (cfg, temp, OP_I8CONST);
-                       temp->inst_c0 = ins->inst_offset;
-                       temp->dreg = mono_regstate_next_int (cfg->rs);
-                       last_ins = temp;
-                       NEW_INS (cfg, temp2, CEE_ADD);
-                       temp2->sreg1 = ins->inst_basereg;
-                       temp2->sreg2 = temp->dreg;
-                       temp2->dreg = mono_regstate_next_int (cfg->rs);
-                       last_ins = temp2;
+                       if (ia64_is_imm14 (ins->inst_offset)) {
+                               NEW_INS (cfg, temp2, OP_ADD_IMM);
+                               temp2->sreg1 = ins->inst_basereg;
+                               temp2->inst_imm = ins->inst_offset;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
+                       else {
+                               NEW_INS (cfg, temp, OP_I8CONST);
+                               temp->inst_c0 = ins->inst_offset;
+                               temp->dreg = mono_regstate_next_int (cfg->rs);
+                               NEW_INS (cfg, temp2, CEE_ADD);
+                               temp2->sreg1 = ins->inst_basereg;
+                               temp2->sreg2 = temp->dreg;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
 
                        ins->inst_offset = 0;
                        ins->inst_basereg = temp2->dreg;
                        break;
+               case OP_FCALL_MEMBASE:
+               case OP_LCALL_MEMBASE:
+               case OP_VCALL_MEMBASE:
+               case OP_VOIDCALL_MEMBASE:
+               case OP_CALL_MEMBASE:
+                       /* There are no membase instructions on ia64 */
+                       if (ia64_is_imm14 (ins->inst_offset)) {
+                               NEW_INS (cfg, temp2, OP_ADD_IMM);
+                               temp2->sreg1 = ins->sreg1;
+                               temp2->inst_imm = ins->inst_offset;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
+                       else {
+                               NEW_INS (cfg, temp, OP_I8CONST);
+                               temp->inst_c0 = ins->inst_offset;
+                               temp->dreg = mono_regstate_next_int (cfg->rs);
+                               NEW_INS (cfg, temp2, CEE_ADD);
+                               temp2->sreg1 = ins->sreg1;
+                               temp2->sreg2 = temp->dreg;
+                               temp2->dreg = mono_regstate_next_int (cfg->rs);
+                       }
+
+                       NEW_INS (cfg, temp, OP_LOADI8_MEMBASE);
+                       temp->sreg1 = temp2->dreg;
+                       temp->dreg = mono_regstate_next_int (cfg->rs);
+
+                       ins->sreg1 = temp->dreg;
+
+                       switch (ins->opcode) {
+                       case OP_FCALL_MEMBASE:
+                               ins->opcode = OP_FCALL_REG;
+                               break;
+                       case OP_LCALL_MEMBASE:
+                               ins->opcode = OP_LCALL_REG;
+                               break;
+                       case OP_VCALL_MEMBASE:
+                               ins->opcode = OP_VCALL_REG;
+                               break;
+                       case OP_VOIDCALL_MEMBASE:
+                               ins->opcode = OP_VOIDCALL_REG;
+                               break;
+                       case OP_CALL_MEMBASE:
+                               ins->opcode = OP_CALL_REG;
+                               break;
+                       default:
+                               g_assert_not_reached ();
+                       }
+                       break;
+               case OP_ADD_IMM:
                case OP_IADD_IMM:
                case OP_ISUB_IMM:
                case OP_IAND_IMM:
@@ -863,8 +1290,15 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_SHL_IMM:
                case OP_LSHL_IMM:
                case OP_LSHR_UN_IMM:
+                       if ((ins->opcode == OP_ADD_IMM) && (ia64_is_imm14 (ins->inst_imm))) {
+                               break;
+                       }
+
                        /* FIXME: There is an alu imm instruction */
                        switch (ins->opcode) {
+                       case OP_ADD_IMM:                                        
+                               ins->opcode = CEE_ADD;
+                               break;
                        case OP_IADD_IMM:
                                ins->opcode = OP_IADD;
                                break;
@@ -983,9 +1417,13 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                                if (! (next->flags & MONO_INST_BRLABEL))
                                        next->inst_target_bb = next->inst_true_bb;
                                break;
-                       case OP_COND_EXC_GT_UN:
+                       case OP_COND_EXC_EQ:
                        case OP_COND_EXC_GT:
                        case OP_COND_EXC_LT:
+                       case OP_COND_EXC_GT_UN:
+                       case OP_COND_EXC_LE_UN:
+                       case OP_COND_EXC_NE_UN:
+                       case OP_COND_EXC_LT_UN:
                                next->opcode = OP_IA64_COND_EXC;
                                break;
                        case OP_CEQ:
@@ -1036,6 +1474,16 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                        case OP_IBLT_UN:
                        case OP_IBGE_UN:
                        case OP_IBGT_UN:
+                       case OP_FBEQ:
+                       case OP_FBNE_UN:
+                       case OP_FBLT:
+                       case OP_FBLT_UN:
+                       case OP_FBGT:
+                       case OP_FBGT_UN:
+                       case OP_FBGE:
+                       case OP_FBGE_UN:
+                       case OP_FBLE:
+                       case OP_FBLE_UN:
                                next->opcode = OP_IA64_BR_COND;
                                if (! (next->flags & MONO_INST_BRLABEL))
                                        next->inst_target_bb = next->inst_true_bb;
@@ -1043,6 +1491,7 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                        case OP_COND_EXC_LT:
                        case OP_COND_EXC_GT:
                        case OP_COND_EXC_GT_UN:
+                       case OP_COND_EXC_LE_UN:
                                next->opcode = OP_IA64_COND_EXC;
                                break;
                        case OP_CEQ:
@@ -1055,6 +1504,11 @@ mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
                        case OP_ICGT:
                        case OP_ICLT_UN:
                        case OP_ICGT_UN:
+                       case OP_FCEQ:
+                       case OP_FCLT:
+                       case OP_FCGT:
+                       case OP_FCLT_UN:
+                       case OP_FCGT_UN:
                                next->opcode = OP_IA64_CSET;
                                break;
                        default:
@@ -1086,13 +1540,62 @@ mono_arch_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
        mono_local_regalloc (cfg, bb);
 }
 
-static guint8*
-emit_move_return_value (MonoCompile *cfg, MonoInst *ins, guint8 *code)
+static Ia64CodegenState
+emit_move_return_value (MonoCompile *cfg, MonoInst *ins, Ia64CodegenState code)
 {
        CallInfo *cinfo;
-       guint32 quad;
 
-       g_assert_not_reached ();
+       /* Move return value to the target register */
+       /* FIXME: do this in the local reg allocator */
+       switch (ins->opcode) {
+       case OP_VOIDCALL:
+       case OP_VOIDCALL_REG:
+       case OP_VOIDCALL_MEMBASE:
+               break;
+       case CEE_CALL:
+       case OP_CALL_REG:
+       case OP_CALL_MEMBASE:
+       case OP_LCALL:
+       case OP_LCALL_REG:
+       case OP_LCALL_MEMBASE:
+               g_assert (ins->dreg == IA64_R8);
+               break;
+       case OP_FCALL:
+       case OP_FCALL_REG:
+       case OP_FCALL_MEMBASE:
+               g_assert (ins->dreg == 8);
+               break;
+       case OP_VCALL:
+       case OP_VCALL_REG:
+       case OP_VCALL_MEMBASE:
+               cinfo = get_call_info (((MonoCallInst*)ins)->signature, FALSE);
+               if (cinfo->ret.storage == ArgValuetypeInReg) {
+                       NOT_IMPLEMENTED;
+               }
+               g_free (cinfo);
+               break;
+       default:
+               g_assert_not_reached ();
+       }
+
+       return code;
+}
+
+static Ia64CodegenState
+emit_call (MonoCompile *cfg, Ia64CodegenState code, guint32 patch_type, gconstpointer data)
+{
+       mono_add_patch_info (cfg, code.buf - cfg->native_code, patch_type, data);
+
+       if (patch_type == MONO_PATCH_INFO_ABS) {
+               /* Indirect call */
+               ia64_movl (code, GP_SCRATCH_REG, 0);
+               ia64_ld8_inc_imm_hint (code, GP_SCRATCH_REG2, GP_SCRATCH_REG, 8, 0);
+               ia64_mov_to_br (code, IA64_B6, GP_SCRATCH_REG2, 0, 0, 0);
+               ia64_ld8 (code, IA64_GP, GP_SCRATCH_REG);
+               ia64_br_call_reg (code, IA64_B0, IA64_B6);
+       }
+       else
+               ia64_br_call_hint (code, IA64_B0, 0, 0, 0, 0);
 
        return code;
 }
@@ -1259,6 +1762,9 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
 
                        /* FIXME: Set p7 as well */
                        break;
+               case OP_ADD_IMM:
+                       ia64_adds_imm (code, ins->dreg, ins->inst_imm, ins->sreg1);
+                       break;
                case OP_STOREI1_MEMBASE_REG:
                        ia64_st1_hint (code, ins->inst_destbasereg, ins->sreg1, 0);
                        break;
@@ -1269,6 +1775,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ia64_st4_hint (code, ins->inst_destbasereg, ins->sreg1, 0);
                        break;
                case OP_STOREI8_MEMBASE_REG:
+               case OP_STORE_MEMBASE_REG:
                        ia64_st8_hint (code, ins->inst_destbasereg, ins->sreg1, 0);
                        break;
                case OP_LOADU1_MEMBASE:
@@ -1302,6 +1809,30 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_SEXT_I2:
                        ia64_sxt2 (code, ins->dreg, ins->sreg1);
                        break;
+
+               case OP_MUL_IMM:
+                       /* This should be emulated, but rules in inssel.brg generate it */
+                       switch (ins->inst_imm) {
+                       case 1:
+                               ia64_mov (code, ins->dreg, ins->sreg1);
+                               break;
+                       case 2:
+                               ia64_shl_imm (code, ins->dreg, ins->sreg1, 1);
+                               break;
+                       case 4:
+                               ia64_shl_imm (code, ins->dreg, ins->sreg1, 2);
+                               break;
+                       case 8:
+                               ia64_shl_imm (code, ins->dreg, ins->sreg1, 3);
+                               break;
+                       default:
+                               /* FIXME: */
+                               printf ("A: %d\n", ins->inst_imm);
+                               NOT_IMPLEMENTED;
+                       }
+                       break;
+
+                       /* Compare opcodes */
                case OP_IA64_CMP4_EQ:
                        ia64_cmp4_eq (code, 6, 7, ins->sreg1, ins->sreg2);
                        break;
@@ -1362,8 +1893,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_IA64_CMP_LE_UN:
                        ia64_cmp_leu (code, 6, 7, ins->sreg1, ins->sreg2);
                        break;
-
-               /* Compare_imm opcodes */
                case OP_IA64_CMP4_EQ_IMM:
                        ia64_cmp4_eq_imm (code, 6, 7, ins->inst_imm, ins->sreg2);
                        break;
@@ -1424,6 +1953,40 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_IA64_CMP_LE_UN_IMM:
                        ia64_cmp_leu_imm (code, 6, 7, ins->inst_imm, ins->sreg2);
                        break;
+               case OP_IA64_FCMP_EQ:
+                       ia64_fcmp_eq_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_NE:
+                       ia64_fcmp_ne_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_LT:
+                       ia64_fcmp_lt_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_GT:
+                       ia64_fcmp_gt_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_LE:
+                       ia64_fcmp_le_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_GE:
+                       ia64_fcmp_ge_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_GT_UN:
+                       ia64_fcmp_gt_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       ia64_fcmp_unord_sf_pred (code, 7, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_LT_UN:
+                       ia64_fcmp_lt_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       ia64_fcmp_unord_sf_pred (code, 7, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_GE_UN:
+                       ia64_fcmp_ge_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       ia64_fcmp_unord_sf_pred (code, 7, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
+               case OP_IA64_FCMP_LE_UN:
+                       ia64_fcmp_le_sf (code, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       ia64_fcmp_unord_sf_pred (code, 7, 6, 7, ins->sreg1, ins->sreg2, 0);
+                       break;
 
                case OP_COND_EXC_IOV:
                        /* FIXME: */
@@ -1463,9 +2026,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ia64_zxt2 (code, ins->dreg, ins->sreg1);
                        break;
                case CEE_CONV_I8:
-               case CEE_CONV_U8:
+               case CEE_CONV_I:
                        ia64_mov (code, ins->dreg, ins->sreg1);
                        break;
+               case CEE_CONV_U8:
+               case CEE_CONV_U:
+                       ia64_zxt4 (code, ins->dreg, ins->sreg1);
+                       break;
                case CEE_CONV_OVF_U4:
                        /* FIXME: */
                        ia64_mov (code, ins->dreg, ins->sreg1);
@@ -1474,18 +2041,148 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        /*
                         * FLOAT OPCODES
                         */
-               case OP_R8CONST:
-                       /* FIXME: Optimize 0.0 and 1.0 */
-                       mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R8, ins->inst_p0);
-                       ia64_movl (code, GP_SCRATCH_REG, 0);
-                       ia64_ldfd_hint (code, ins->dreg, GP_SCRATCH_REG, 0);
+               case OP_R8CONST: {
+                       double d = *(double *)ins->inst_p0;
+
+                       if ((d == 0.0) && (mono_signbit (d) == 0))
+                               ia64_fmov (code, ins->dreg, 0);
+                       else if (d == 1.0)
+                               ia64_fmov (code, ins->dreg, 1);
+                       else {
+                               mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R8, ins->inst_p0);
+                               ia64_movl (code, GP_SCRATCH_REG, 0);
+                               ia64_ldfd_hint (code, ins->dreg, GP_SCRATCH_REG, 0);
+                       }
+                       break;
+               }
+               case OP_R4CONST: {
+                       float f = *(float *)ins->inst_p0;
+
+                       if ((f == 0.0) && (mono_signbit (f) == 0))
+                               ia64_fmov (code, ins->dreg, 0);
+                       else if (f == 1.0)
+                               ia64_fmov (code, ins->dreg, 1);
+                       else {
+                               mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R4, ins->inst_p0);
+                               ia64_movl (code, GP_SCRATCH_REG, 0);
+                               ia64_ldfs_hint (code, ins->dreg, GP_SCRATCH_REG, 0);
+                       }
+                       break;
+               }
+               case OP_FMOVE:
+                       ia64_fmov (code, ins->dreg, ins->sreg1);
                        break;
                case OP_STORER8_MEMBASE_REG:
                        ia64_stfd_hint (code, ins->inst_destbasereg, ins->sreg1, 0);
                        break;
+               case OP_STORER4_MEMBASE_REG:
+                       ia64_stfs_hint (code, ins->inst_destbasereg, ins->sreg1, 0);
+                       break;
                case OP_LOADR8_MEMBASE:
                        ia64_ldfd_hint (code, ins->dreg, ins->inst_basereg, 0);
                        break;
+               case OP_LOADR4_MEMBASE:
+                       ia64_ldfs_hint (code, ins->dreg, ins->inst_basereg, 0);
+                       break;
+               case CEE_CONV_R4:
+                       ia64_setf_sig (code, ins->dreg, ins->sreg1);
+                       ia64_fcvt_xf (code, ins->dreg, ins->dreg);
+                       ia64_fnorm_s_sf (code, ins->dreg, ins->dreg, 0);
+                       break;
+               case CEE_CONV_R8:
+                       ia64_setf_sig (code, ins->dreg, ins->sreg1);
+                       ia64_fcvt_xf (code, ins->dreg, ins->dreg);
+                       ia64_fnorm_d_sf (code, ins->dreg, ins->dreg, 0);
+                       break;
+               case OP_LCONV_TO_R8:
+                       /* FIXME: Difference with CEE_CONV_R8 ? */
+                       ia64_setf_sig (code, ins->dreg, ins->sreg1);
+                       ia64_fcvt_xf (code, ins->dreg, ins->dreg);
+                       ia64_fnorm_d_sf (code, ins->dreg, ins->dreg, 0);
+                       break;
+               case OP_FCONV_TO_R4:
+                       ia64_fnorm_s_sf (code, ins->dreg, ins->sreg1, 0);
+                       break;
+               case OP_FCONV_TO_I4:
+               case OP_FCONV_TO_I2:
+               case OP_FCONV_TO_U2:
+               case OP_FCONV_TO_U1:
+                       /* FIXME: sign/zero extend ? */
+                       ia64_fcvt_fx_trunc_sf (code, FP_SCRATCH_REG, ins->sreg1, 0);
+                       ia64_getf_sig (code, ins->dreg, FP_SCRATCH_REG);
+                       break;
+               case OP_FCONV_TO_I8:
+                       /* FIXME: Difference with OP_FCONV_TO_I4 ? */
+                       ia64_fcvt_fx_trunc_sf (code, FP_SCRATCH_REG, ins->sreg1, 0);
+                       ia64_getf_sig (code, ins->dreg, FP_SCRATCH_REG);
+                       break;
+               case OP_FADD:
+                       ia64_fma_d_sf (code, ins->dreg, ins->sreg1, 1, ins->sreg2, 0);
+                       break;
+               case OP_FSUB:
+                       ia64_fms_d_sf (code, ins->dreg, ins->sreg1, 1, ins->sreg2, 0);
+                       break;
+               case OP_FMUL:
+                       ia64_fma_d_sf (code, ins->dreg, ins->sreg1, ins->sreg2, 0, 0);
+                       break;
+               case OP_FNEG:
+                       ia64_fmerge_ns (code, ins->dreg, ins->sreg1, ins->sreg1);
+                       break;
+
+               /* Calls */
+               case OP_CHECK_THIS:
+                       /* ensure ins->sreg1 is not NULL */
+                       ia64_ld8_hint (code, GP_SCRATCH_REG, ins->sreg1, 0);
+                       break;
+
+               case OP_FCALL:
+               case OP_LCALL:
+               case OP_VCALL:
+               case OP_VOIDCALL:
+               case CEE_CALL:
+                       call = (MonoCallInst*)ins;
+
+                       if (ins->flags & MONO_INST_HAS_METHOD)
+                               code = emit_call (cfg, code, MONO_PATCH_INFO_METHOD, call->method);
+                       else
+                               code = emit_call (cfg, code, MONO_PATCH_INFO_ABS, call->fptr);
+
+                       code = emit_move_return_value (cfg, ins, code);
+                       break;
+
+               case OP_CALL_REG:
+               case OP_FCALL_REG:
+               case OP_LCALL_REG:
+               case OP_VCALL_REG:
+               case OP_VOIDCALL_REG:
+                       call = (MonoCallInst*)ins;
+
+                       if (ins->flags & MONO_INST_HAS_METHOD) {
+                               /* This is a virtual call */
+                               ia64_mov_to_br (code, IA64_B6, ins->sreg1, 0, 0, 0);
+                       }
+                       else {
+                               /* Indirect call */
+                               ia64_mov (code, GP_SCRATCH_REG, ins->sreg1);
+                               ia64_ld8_inc_imm_hint (code, GP_SCRATCH_REG2, GP_SCRATCH_REG, 8, 0);
+                               ia64_mov_to_br (code, IA64_B6, GP_SCRATCH_REG2, 0, 0, 0);
+                               ia64_ld8 (code, IA64_GP, GP_SCRATCH_REG);
+                       }
+                       ia64_br_call_reg (code, IA64_B0, IA64_B6);
+
+                       code = emit_move_return_value (cfg, ins, code);
+                       break;
+
+                       /* Exception handling */
+               case OP_CALL_HANDLER:
+                       /* FIXME: */
+                       break;
+
+               case CEE_THROW:
+                       /* FIXME: */
+                       ia64_break_i (code, 0x1234);
+                       break;
+
                default:
                        g_warning ("unknown opcode %s in %s()\n", mono_inst_name (ins->opcode), __FUNCTION__);
                        g_assert_not_reached ();
@@ -1597,7 +2294,14 @@ ia64_patch (unsigned char* code, gpointer target)
                                ia64_br_cond_hint_pred (gen, ia64_ins_qp (ins), disp, 0, 0, 0);
                                
                                instructions [i] = gen.instructions [0];
-                               break;
+                       }
+                       else if (opcode == 5) {
+                               /* br.call */
+                               gint64 disp = ((guint8*)target - code) >> 4;
+
+                               /* FIXME: hints */
+                               ia64_br_call_hint_pred (gen, ia64_ins_qp (ins), ia64_ins_b1 (ins), disp, 0, 0, 0);
+                               instructions [i] = gen.instructions [0];
                        }
                        else
                                NOT_IMPLEMENTED;
@@ -1656,29 +2360,44 @@ mono_arch_emit_prolog (MonoCompile *cfg)
        Ia64CodegenState code;
        CallInfo *cinfo;
 
+       sig = mono_method_signature (method);
+       pos = 0;
+
+       cinfo = get_call_info (sig, FALSE);
+
        cfg->code_size =  MAX (((MonoMethodNormal *)method)->header->code_size * 4, 512);
        cfg->native_code = g_malloc (cfg->code_size);
 
        ia64_codegen_init (code, cfg->native_code);
 
-       ia64_alloc (code, 32, 0, 3 + 8, 0, 0);
-       ia64_mov_from_br (code, 33, IA64_B0);
+       ia64_alloc (code, cfg->arch.reg_saved_ar_pfs, cfg->arch.reg_local0 - cfg->arch.reg_in0, cfg->arch.reg_out0 - cfg->arch.reg_local0, cfg->arch.n_out_regs, 0);
+       ia64_mov_from_br (code, cfg->arch.reg_saved_b0, IA64_B0);
 
        alloc_size = ALIGN_TO (cfg->stack_offset, MONO_ARCH_FRAME_ALIGNMENT);
+       if (cfg->param_area)
+               alloc_size += cfg->param_area;
+       if (alloc_size)
+               /* scratch area */
+               alloc_size += 16;
+       alloc_size = ALIGN_TO (alloc_size, MONO_ARCH_FRAME_ALIGNMENT);
+
        pos = 0;
 
        if (method->save_lmf) {
-               NOT_IMPLEMENTED;
+               /* FIXME: */
        }
 
        alloc_size -= pos;
 
+       if (alloc_size || cinfo->stack_usage)
+               ia64_mov (code, cfg->frame_reg, IA64_SP);
+
        if (alloc_size) {
                /* See mono_emit_stack_alloc */
 #if defined(MONO_ARCH_SIGSEGV_ON_ALTSTACK)
                NOT_IMPLEMENTED;
 #else
-               ia64_mov (code, cfg->frame_reg, IA64_SP);
+               ia64_mov (code, cfg->arch.reg_saved_sp, IA64_SP);
                ia64_adds_imm (code, IA64_SP, (-alloc_size), IA64_SP);
 #endif
        }
@@ -1706,11 +2425,6 @@ mono_arch_emit_prolog (MonoCompile *cfg)
                }
        }
 
-       sig = mono_method_signature (method);
-       pos = 0;
-
-       cinfo = get_call_info (sig, FALSE);
-
        if (sig->ret->type != MONO_TYPE_VOID) {
                if ((cinfo->ret.storage == ArgInIReg) && (cfg->ret->opcode != OP_REGVAR)) {
                        /* Save volatile arguments to the stack */
@@ -1730,19 +2444,47 @@ mono_arch_emit_prolog (MonoCompile *cfg)
                else
                        arg_type = sig->params [i - sig->hasthis];
 
+               arg_type = mono_type_get_underlying_type (arg_type);
+
                stack_offset = ainfo->offset + ARGS_OFFSET;
 
                /* Save volatile arguments to the stack */
                if (inst->opcode != OP_REGVAR) {
-                       NOT_IMPLEMENTED;
+                       switch (ainfo->storage) {
+                       case ArgInIReg:
+                       case ArgInFloatReg:
+                               /* FIXME: big offsets */
+                               g_assert (inst->opcode = OP_REGOFFSET);
+                               ia64_adds_imm (code, GP_SCRATCH_REG, inst->inst_offset, inst->inst_basereg);
+                               if (arg_type->byref)
+                                       ia64_st8_hint (code, GP_SCRATCH_REG, cfg->arch.reg_in0 + ainfo->reg, 0);
+                               else {
+                                       switch (arg_type->type) {
+                                       case MONO_TYPE_R4:
+                                               ia64_stfs_hint (code, GP_SCRATCH_REG, ainfo->reg, 0);
+                                               break;
+                                       case MONO_TYPE_R8:
+                                               ia64_stfd_hint (code, GP_SCRATCH_REG, ainfo->reg, 0);
+                                               break;
+                                       default:
+                                               ia64_st8_hint (code, GP_SCRATCH_REG, cfg->arch.reg_in0 + ainfo->reg, 0);
+                                               break;
+                                       }
+                               }
+                               break;
+                       case ArgOnStack:
+                               break;
+                       default:
+                               NOT_IMPLEMENTED;
+                       }
                }
 
                if (inst->opcode == OP_REGVAR) {
                        /* Argument allocated to (non-volatile) register */
                        switch (ainfo->storage) {
                        case ArgInIReg:
-                               if (inst->dreg != ainfo->reg)
-                                       NOT_IMPLEMENTED;
+                               if (inst->dreg != cfg->arch.reg_in0 + ainfo->reg)
+                                       ia64_mov (code, inst->dreg, cfg->arch.reg_in0 + ainfo->reg);
                                break;
                        default:
                                NOT_IMPLEMENTED;
@@ -1751,7 +2493,7 @@ mono_arch_emit_prolog (MonoCompile *cfg)
        }
 
        if (method->save_lmf) {
-               NOT_IMPLEMENTED;
+               /* FIXME: */
        }
 
        ia64_codegen_close (code);
@@ -1795,7 +2537,7 @@ mono_arch_emit_epilog (MonoCompile *cfg)
        pos = 0;
        
        if (method->save_lmf) {
-               NOT_IMPLEMENTED;
+               /* FIXME: */
        }
 
        /* Load returned vtypes into registers if needed */
@@ -1806,10 +2548,10 @@ mono_arch_emit_epilog (MonoCompile *cfg)
        g_free (cinfo);
 
        if (cfg->stack_offset)
-               ia64_mov (code, IA64_SP, cfg->frame_reg);
+               ia64_mov (code, IA64_SP, cfg->arch.reg_saved_sp);
 
-       ia64_mov_to_ar_i (code, IA64_PFS, 32);
-       ia64_mov_ret_to_br (code, IA64_B0, 33, 0, 0, 0);
+       ia64_mov_to_ar_i (code, IA64_PFS, cfg->arch.reg_saved_ar_pfs);
+       ia64_mov_ret_to_br (code, IA64_B0, cfg->arch.reg_saved_b0, 0, 0, 0);
        ia64_br_ret_reg_hint (code, IA64_B0, 0, 0, 0);
 
        ia64_codegen_close (code);
@@ -1925,7 +2667,7 @@ mono_arch_get_patch_offset (guint8 *code)
 gpointer*
 mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs)
 {
-       NOT_IMPLEMENTED;
+       /* FIXME: */
 
        return NULL;
 }
@@ -1997,7 +2739,41 @@ mono_arch_free_jit_tls_data (MonoJitTlsData *tls)
 void
 mono_arch_emit_this_vret_args (MonoCompile *cfg, MonoCallInst *inst, int this_reg, int this_type, int vt_reg)
 {
-       NOT_IMPLEMENTED;
+       MonoCallInst *call = (MonoCallInst*)inst;
+       int out_reg = cfg->arch.reg_out0;
+
+       if (vt_reg != -1) {
+               CallInfo * cinfo = get_call_info (inst->signature, FALSE);
+               MonoInst *vtarg;
+
+               if (cinfo->ret.storage == ArgValuetypeInReg) {
+                       NOT_IMPLEMENTED;
+               }
+               else {
+                       MONO_INST_NEW (cfg, vtarg, OP_MOVE);
+                       vtarg->sreg1 = vt_reg;
+                       vtarg->dreg = mono_regstate_next_int (cfg->rs);
+                       mono_bblock_add_inst (cfg->cbb, vtarg);
+
+                       mono_call_inst_add_outarg_reg (call, vtarg->dreg, out_reg, FALSE);
+
+                       out_reg ++;
+               }
+
+               g_free (cinfo);
+       }
+
+       /* add the this argument */
+       if (this_reg != -1) {
+               MonoInst *this;
+               MONO_INST_NEW (cfg, this, OP_MOVE);
+               this->type = this_type;
+               this->sreg1 = this_reg;
+               this->dreg = mono_regstate_next_int (cfg->rs);
+               mono_bblock_add_inst (cfg->cbb, this);
+
+               mono_call_inst_add_outarg_reg (call, this->dreg, out_reg, FALSE);
+       }
 }
 
 MonoInst*
@@ -2005,6 +2781,9 @@ mono_arch_get_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethod
 {
        MonoInst *ins = NULL;
 
+       /* FIXME: */
+       return NULL;
+
        if (cmethod->klass == mono_defaults.math_class) {
                if (strcmp (cmethod->name, "Sin") == 0) {
                        MONO_INST_NEW (cfg, ins, OP_SIN);
index 69693f1bd767057c5d10741c1c549362f8264f4c..8dc9e7a0037996faa70fa7277635d4c95d06c8e2 100644 (file)
 
 #define MONO_ARCH_HAS_XP_LOCAL_REGALLOC
 
-/* r8..r11, r14..r30 */
-#define MONO_ARCH_CALLEE_REGS (0x700UL | 0xefffc000UL)
+/* r8..r11, r14..r29 */
+#define MONO_ARCH_CALLEE_REGS (0x700UL | 0x3fffc000UL)
 
-/* f6..f15, f32..f127 */
+/* f6..f15, f33..f127 */
 /* FIXME: Use the upper 64 bits as well */
-#define MONO_ARCH_CALLEE_FREGS (0xffffffffffffffff0000UL | (0x3ffUL << 6))
+#define MONO_ARCH_CALLEE_FREGS (0xfffffffe00000000UL | (0x3ffUL << 6))
 
 #define MONO_ARCH_CALLEE_SAVED_REGS ~(MONO_ARCH_CALLEE_REGS)
 
@@ -28,7 +28,8 @@
 #define MONO_ARCH_USE_FPSTACK FALSE
 #define MONO_ARCH_FPSTACK_SIZE 0
 
-#define MONO_ARCH_INST_FIXED_REG(desc) -1
+#define MONO_ARCH_INST_FIXED_REG(desc) ((desc == 'r') ? IA64_R8 : ((desc == 'g') ? 8 : -1))
+#define MONO_ARCH_INST_IS_FLOAT(desc) ((desc == 'f') || (desc == 'g'))
 #define MONO_ARCH_INST_SREG2_MASK(ins) (0)
 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
@@ -37,9 +38,8 @@
 
 #define MONO_ARCH_CODE_ALIGNMENT 16
 
-/* FIXME: */
-#define MONO_ARCH_BASEREG IA64_GP
 #define MONO_ARCH_RETREG1 IA64_R8
+#define MONO_ARCH_FRETREG1 8
 
 struct MonoLMF {
        gpointer    previous_lmf;
@@ -59,9 +59,13 @@ typedef struct MonoContext {
 typedef struct MonoCompileArch {
        gint32 lmf_offset;
        gint32 localloc_offset;
+       gint32 n_out_regs;
        gint32 reg_in0;
        gint32 reg_local0;
        gint32 reg_out0;
+       gint32 reg_saved_ar_pfs;
+       gint32 reg_saved_b0;
+       gint32 reg_saved_sp;
 } MonoCompileArch;
 
 #define MONO_CONTEXT_SET_IP(ctx,eip) do { (ctx)->ip = (gpointer)(eip); } while (0); 
@@ -88,9 +92,12 @@ typedef struct MonoCompileArch {
 
 #define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
 
-#define MONO_ARCH_EMULATE_CONV_R8_UN    1
+#define MONO_ARCH_EMULATE_CONV_R8_UN     1
 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
-#define MONO_ARCH_EMULATE_FREM 1
+#define MONO_ARCH_EMULATE_FREM           1
+#define MONO_ARCH_EMULATE_MUL_DIV        1
+#define MONO_ARCH_EMULATE_LONG_MUL_OPTS  1
+
 #define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
 
 #define MONO_ARCH_ENABLE_EMIT_STATE_OPT 1
@@ -99,7 +106,5 @@ typedef struct MonoCompileArch {
 #define MONO_ARCH_HAVE_PIC_AOT 1
 #define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
 
-/* FIXME: */
-#define MONO_ARCH_EMULATE_DIV           1
 
 #endif /* __MONO_MINI_IA64_H__ */  
index 67b890e89b0e6308f600cd12ef0ccd1525d264e7..841205a03709a78b9733325f765ee50fbb705044 100644 (file)
@@ -17,6 +17,7 @@ MINI_OP(OP_ARG,               "arg")
 MINI_OP(OP_ARGLIST,    "oparglist")
 MINI_OP(OP_OUTARG,     "outarg")
 MINI_OP(OP_OUTARG_REG, "outarg_reg")
+MINI_OP(OP_OUTARG_FREG,        "outarg_freg")
 MINI_OP(OP_OUTARG_IMM, "outarg_imm")
 MINI_OP(OP_OUTARG_R4,  "outarg_r4")
 MINI_OP(OP_OUTARG_R8,  "outarg_r8")
@@ -578,6 +579,19 @@ MINI_OP(OP_IA64_CMP_GT_UN_IMM,      "ia64_cmp_gt_un_imm")
 MINI_OP(OP_IA64_CMP_GE_UN_IMM,      "ia64_cmp_ge_un_imm")
 MINI_OP(OP_IA64_CMP_LE_UN_IMM,      "ia64_cmp_le_un_imm")
 
+MINI_OP(OP_IA64_FCMP_EQ,         "ia64_fcmp_eq")
+MINI_OP(OP_IA64_FCMP_NE,         "ia64_fcmp_ne")
+MINI_OP(OP_IA64_FCMP_LE,         "ia64_fcmp_le")
+MINI_OP(OP_IA64_FCMP_LT,         "ia64_fcmp_lt")
+MINI_OP(OP_IA64_FCMP_GE,         "ia64_fcmp_ge")
+MINI_OP(OP_IA64_FCMP_GT,         "ia64_fcmp_gt")
+MINI_OP(OP_IA64_FCMP_LT_UN,      "ia64_fcmp_lt_un")
+MINI_OP(OP_IA64_FCMP_GT_UN,      "ia64_fcmp_gt_un")
+MINI_OP(OP_IA64_FCMP_GE_UN,      "ia64_fcmp_ge_un")
+MINI_OP(OP_IA64_FCMP_LE_UN,      "ia64_fcmp_le_un")
+
 MINI_OP(OP_IA64_BR_COND,        "ia64_br_cond")
 MINI_OP(OP_IA64_COND_EXC,       "ia64_cond_exc")
 MINI_OP(OP_IA64_CSET,           "ia64_cset")
+
+MINI_OP(OP_IA64_OUTARG_R4,      "ia64_outarg_r4")
index 1a4cce2e10f318b9bea5098259f505540050f203..bcff5833dce0d3d941555b83d0beb0d3cdad5af1 100644 (file)
@@ -4691,6 +4691,11 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                if (cmethod->klass->valuetype) {
                                        iargs [0] = mono_compile_create_var (cfg, &cmethod->klass->byval_arg, OP_LOCAL);
                                        temp = iargs [0]->inst_c0;
+
+                                       NEW_TEMPLOADA (cfg, *sp, temp);
+
+                                       handle_initobj (cfg, bblock, *sp, NULL, cmethod->klass, stack_start, sp);
+
                                        NEW_TEMPLOADA (cfg, *sp, temp);
 
                                        /* 
index df2b022f042dad9f2161f1854ccb914f1c240615..4a94f91987a0f66b328ac02aee7f4fd94cb48106 100644 (file)
@@ -769,5 +769,109 @@ class Tests {
                
                return 0;
        }
+
+       public static int test_71_long_shift_right () {
+               ulong value = 38654838087;
+               int x = 0;
+               byte [] buffer = new byte [1];
+               buffer [x] = ((byte)(value >> x));
+               return buffer [x];
+       }
+       
+       static long x;
+       public static int test_0_addsub_mem ()
+       {
+               x = 0;
+               x += 5;
+               
+               if (x != 5)
+                       return 1;
+               
+               x -= 10;
+               
+               if (x != -5)
+                       return 2;
+               
+               return 0;
+       }
+       
+       static ulong y;
+       public static int test_0_sh32_mem ()
+       {
+               y = 0x0102130405060708;
+               y >>= 32;
+               
+               if (y != 0x01021304)
+                       return 1;
+               
+               y = 0x0102130405060708;
+               y <<= 32;
+               
+               if (y != 0x0506070800000000)
+                       return 2;
+               
+               x = 0x0102130405060708;
+               x <<= 32;
+               
+               if (x != 0x0506070800000000)
+                       return 2;
+               
+               return 0;
+       }
+
+
+       static uint dum_de_dum = 1;
+       static int test_0_long_arg_opt ()
+       {
+               return Foo (0x1234567887654321, dum_de_dum);
+       }
+       
+       static int Foo (ulong x, ulong y)
+       {
+               if (x != 0x1234567887654321)
+                       return 1;
+               
+               if (y != 1)
+                       return 2;
+               
+               return 0;
+       }
+       
+       static int test_0_long_ret_opt ()
+       {
+               ulong x = X ();
+               if (x != 0x1234567887654321)
+                       return 1;
+               ulong y = Y ();
+               if (y != 1)
+                       return 2;
+               
+               return 0;
+       }
+       
+       static ulong X ()
+       {
+               return 0x1234567887654321;
+       }
+       
+       static ulong Y ()
+       {
+               return dum_de_dum;
+       }
+
+       /* from bug# 71515 */
+       static int counter = 0;
+       static bool WriteStuff () {
+               counter = 10;
+               return true;
+       }
+       static int test_0_cond_branch_side_effects () {
+               counter = 5;
+               if (WriteStuff());
+               if (counter == 10)
+                       return 0;
+               return 1;
+       }
+
 }
 
index 05e25b785a7ed7fa84a17edfdae86d2d6d4e023a..7fd8b47a0c0c7a29aee66df7cfaa02cf8c0e4205 100644 (file)
@@ -21,6 +21,8 @@
 
 #define NOT_IMPLEMENTED g_assert_not_reached ()
 
+#define GP_SCRATCH_REG 31
+
 /*
  * get_unbox_trampoline:
  * @m: method pointer
@@ -46,9 +48,32 @@ ia64_magic_trampoline (long *regs, guint8 *code, MonoMethod *m, guint8* tramp)
        gpointer addr;
        gpointer *vtable_slot;
 
-       NOT_IMPLEMENTED;
+       addr = mono_compile_method (m);
+       g_assert (addr);
 
-       return NULL;
+       //printf ("ENTER: %s\n", mono_method_full_name (m, TRUE));
+
+       /* the method was jumped to */
+       if (!code)
+               /* FIXME: Optimize the case when the call is from a delegate wrapper */
+               return addr;
+
+       vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+
+       if (vtable_slot) {
+               if (m->klass->valuetype)
+                       addr = get_unbox_trampoline (m, addr);
+
+               g_assert (*vtable_slot);
+
+               if (mono_aot_is_got_entry (code, (guint8*)vtable_slot) || mono_domain_owns_vtable_slot (mono_domain_get (), vtable_slot))
+                       *vtable_slot = addr;
+       }
+       else {
+               /* FIXME: Patch calling code */
+       }
+
+       return addr;
 }
 
 /*
@@ -83,8 +108,10 @@ ia64_class_init_trampoline (long *regs, guint8 *code, MonoVTable *vtable, guint8
 guchar*
 mono_arch_create_trampoline_code (MonoTrampolineType tramp_type)
 {
-       guint8 *buf;
-       int i, lmf_offset, offset, method_offset, tramp_offset, saved_regs_offset, saved_fpregs_offset, framesize;
+       guint8 *buf, *tramp;
+       int i, lmf_offset, offset, tramp_offset, saved_regs_offset, saved_fpregs_offset, framesize;
+       int l0, l1, l2, l3, l4, l5, l6, l7, o0, o1, o2, o3;
+       gint64 disp;
        gboolean has_caller;
        Ia64CodegenState code;
 
@@ -93,29 +120,167 @@ mono_arch_create_trampoline_code (MonoTrampolineType tramp_type)
        else
                has_caller = TRUE;
 
-       buf = mono_global_codeman_reserve (512);
+       buf = mono_global_codeman_reserve (2048);
 
        ia64_codegen_init (code, buf);
 
+       /* FIXME: Save/restore lmf */
+
+       /* Stacked Registers */
+       l0 = 40;
+       l1 = 41;
+       l2 = 42;
+       l3 = 43;
+       l4 = 44;
+       l5 = 45; /* saved ar.pfs */
+       l6 = 46; /* arg */
+       l7 = 47; /* code */
+       o0 = 48; /* regs */
+       o1 = 49; /* code */
+       o2 = 50; /* arg */
+       o3 = 51; /* tramp */
+
+       framesize = (128 * 8) + 1024;
+       framesize = (framesize + (MONO_ARCH_FRAME_ALIGNMENT - 1)) & ~ (MONO_ARCH_FRAME_ALIGNMENT - 1);
+
+       /*
+        * Allocate a new register+memory stack frame.
+        * 8 input registers (the max used by the ABI)
+        * 8 locals
+        * 4 output (number of parameters passed to trampoline)
+        */
+       ia64_alloc (code, l5, 8, 8, 4, 0);
+       ia64_adds_imm (code, IA64_SP, (-framesize), IA64_SP);
+
+       offset = 16; /* scratch area */
+
+       /* Save the argument received from the specific trampoline */
+       ia64_mov (code, l6, GP_SCRATCH_REG);
+
+       /* Save the calling address */
+       ia64_mov_from_br (code, l7, IA64_B0);
+
+       /* Save registers */
+       saved_regs_offset = offset;
+       offset += 128 * 8;
+       /* 
+        * Only the registers which are needed for computing vtable slots need
+        * to be saved.
+        */
+       for (i = 0; i < 64; ++i)
+               if ((1 << i) & MONO_ARCH_CALLEE_REGS) {
+                       ia64_adds_imm (code, l1, saved_regs_offset + (i * 8), IA64_SP);
+                       ia64_st8_hint (code, l1, i, 0);
+               }
+       saved_fpregs_offset = offset;
+       offset += 8 * 8;
+       for (i = 0; i < 8; ++i) {
+               ia64_adds_imm (code, l1, saved_fpregs_offset + (i * 8), IA64_SP);
+               ia64_stfd_hint (code, l1, i + 8, 0);
+       }
+
+       g_assert (offset < framesize);
+
+       /* Arg1 is the pointer to the saved registers */
+       ia64_adds_imm (code, o0, saved_regs_offset, IA64_SP);
+
+       /* Arg2 is the address of the calling code */
+       if (has_caller)
+               ia64_mov (code, o1, l7);
+       else
+               ia64_mov (code, o1, 0);
+
+       /* Arg3 is the method/vtable ptr */
+       ia64_mov (code, o2, l6);
+
+       /* Arg4 is the trampoline address */
        /* FIXME: */
-       ia64_break_i (code, 0);
+       ia64_mov (code, o3, 0);
+
+       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
+               tramp = (guint8*)ia64_class_init_trampoline;
+       else if (tramp_type == MONO_TRAMPOLINE_AOT)
+               tramp = (guint8*)ia64_aot_trampoline;
+       else
+               tramp = (guint8*)ia64_magic_trampoline;
+
+       /* Call the trampoline using an indirect call */
+       ia64_movl (code, l0, tramp);
+       ia64_ld8_inc_imm_hint (code, l1, l0, 8, 0);
+       ia64_mov_to_br (code, IA64_B6, l1, 0, 0, 0);
+       ia64_ld8 (code, IA64_GP, l0);
+       ia64_br_call_reg (code, 0, IA64_B6);
+
+       /* Restore fp regs */
+       for (i = 0; i < 8; ++i) {
+               ia64_adds_imm (code, l1, saved_fpregs_offset + (i * 8), IA64_SP);
+               ia64_ldfd_hint (code, i + 8, l1, 0);
+       }
+
+       /* FIXME: Handle NATs in fp regs / scratch regs */
+
+       /* Load method address from function descriptor */
+       ia64_ld8 (code, l0, IA64_R8);
+       ia64_mov_to_br (code, IA64_B6, l0, 0, 0, 0);
+
+       /* Clean up register/memory stack frame */
+       ia64_adds_imm (code, IA64_SP, framesize, IA64_SP);
+       ia64_mov_to_ar_i (code, IA64_PFS, l5);
+
+       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT) {
+               ia64_mov_ret_to_br (code, IA64_B0, l7, 0, 0, 0);
+               ia64_br_ret_reg_hint (code, IA64_B0, 0, 0, 0);
+       }
+       else {
+               /* Call the compiled method */
+               ia64_mov_to_br (code, IA64_B0, l7, 0, 0, 0);
+               ia64_br_cond_reg_hint (code, IA64_B6, 0, 0, 0);
+       }
+
        ia64_codegen_close (code);
 
-       g_assert ((code.buf - buf) <= 512);
+       g_assert ((code.buf - buf) <= 2048);
 
        mono_arch_flush_icache (buf, code.buf - buf);
 
        return buf;
 }
 
-#define TRAMPOLINE_SIZE 34
+#define TRAMPOLINE_SIZE 128
 
 static MonoJitInfo*
 create_specific_trampoline (gpointer arg1, MonoTrampolineType tramp_type, MonoDomain *domain)
 {
-       NOT_IMPLEMENTED;
+       MonoJitInfo *ji;
+       guint8 *buf, *tramp;
+       gint64 disp;
+       Ia64CodegenState code;
 
-       return NULL;
+       tramp = mono_get_trampoline_code (tramp_type);
+
+       mono_domain_lock (domain);
+       buf = mono_code_manager_reserve (domain->code_mp, TRAMPOLINE_SIZE);
+       mono_domain_unlock (domain);
+
+       /* FIXME: Optimize this */
+
+       ia64_codegen_init (code, buf);
+
+       ia64_movl (code, GP_SCRATCH_REG, arg1);
+
+       ia64_begin_bundle (code);
+       disp = (tramp - code.buf) >> 4;
+       ia64_br_cond_hint (code, disp, 0, 0, 0);
+
+       ia64_codegen_close (code);
+
+       mono_arch_flush_icache (buf, code.buf - buf);
+
+       ji = g_new0 (MonoJitInfo, 1);
+       ji->code_start = buf;
+       ji->code_size = code.buf - buf;
+
+       return ji;
 }
 
 MonoJitInfo*
index 765b5a8698c513b86c420d72188f4320134d2e45..ad31daf79ef1c6aa675a00e00f46cb07947d092a 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * monoburg.vcproj: Project file for monobug.
+
 2005-01-18  Zoltan Varga  <vargaz@freemail.hu>
 
        * monoburg.y (yyparsetail): Handle the case when the burg file does
diff --git a/mono/monoburg/monoburg.vcproj b/mono/monoburg/monoburg.vcproj
new file mode 100644 (file)
index 0000000..78c1339
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="monoburg"\r
+       ProjectGUID="{5DCFA645-3358-4A20-9630-AEAAC5EED2D5}"\r
+       RootNamespace="monoburg"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../../VSDependancies/temp/monoburg/Debug"\r
+                       IntermediateDirectory="../../VSDependancies/temp/monoburg/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="3"\r
+                               BufferSecurityCheck="FALSE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               DisableSpecificWarnings="4996"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib ws2_32.lib gthread-2.0.lib gobject-2.0.lib "\r
+                               LinkIncremental="2"\r
+                               AdditionalLibraryDirectories="..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\monoburg.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\parser.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\monoburg.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/mono/monodiet.vcproj b/mono/monodiet.vcproj
new file mode 100644 (file)
index 0000000..dd97cfb
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="monodiet"\r
+       ProjectGUID="{8F90007F-8019-4191-8808-891E4762D958}"\r
+       RootNamespace="monodiet"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../VSDependancies/temp/monodiet/Debug"\r
+                       IntermediateDirectory="../VSDependancies/temp/monodiet/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\;..\libgc\include;&quot;..\VSDependancies\include\glib-2.0\glib&quot;;..\VSDependancies\include;..\mono\"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;PLATFORM_WIN32;__i386__"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               ObjectFile="$(IntDir)/monodiet/"\r
+                               ProgramDataBaseFileName="$(IntDir)/monodiet/vc80.pdb"\r
+                               XMLDocumentationFileName="$(IntDir)/monodiet/"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4996"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\;..\VSDependancies\lib"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\metadata\monodiet.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index 9e78f13fae262469384fecc1c0d01545d6463a76..a03dd31de798f9b71975f64ac068a595bd55d673 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * monograph.vcproj: Project file for monograph.
+
 2005-03-29  Sebastien Pouliot  <sebastien@ximian.com>
 
        * monograph.c: Add mono-compiler.h header to allow/ease compilation
diff --git a/mono/monograph/monograph.vcproj b/mono/monograph/monograph.vcproj
new file mode 100644 (file)
index 0000000..649ebc5
--- /dev/null
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="monograph"\r
+       ProjectGUID="{CA2A69D6-3B9D-45A5-8BF7-4E242E683122}"\r
+       RootNamespace="monograph"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../../VSDependancies/temp/monograph/Debug"\r
+                       IntermediateDirectory="../../VSDependancies/temp/monograph/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\..\;..\..\libgc\include;&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include;..\..\mono\"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;PLATFORM_WIN32;__i386__"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4996"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\..\;..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\monograph.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/mono/pedump.vcproj b/mono/pedump.vcproj
new file mode 100644 (file)
index 0000000..bb9110d
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="pedump"\r
+       ProjectGUID="{84C7DB50-D6F8-4C47-B22C-6BB203AEB4D3}"\r
+       RootNamespace="pedump"\r
+       Keyword="Win32Proj"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="../VSDependancies/temp/pedump/Debug"\r
+                       IntermediateDirectory="../VSDependancies/temp/pedump/Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\;..\libgc\include;&quot;..\VSDependancies\include\glib-2.0\glib&quot;;..\VSDependancies\include;..\mono\"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;__WIN32__;PLATFORM_WIN32;__i386__"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               ObjectFile="$(IntDir)/pedump/"\r
+                               ProgramDataBaseFileName="$(IntDir)/pedump/vc80.pdb"\r
+                               XMLDocumentationFileName="$(IntDir)/pedump/"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                               DisableSpecificWarnings="4018;4996"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\;..\VSDependancies\lib"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="TRUE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\metadata\pedump.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index b3589057ec7f4990eae89127147e8266f9d44f70..f2d41a3737159a895faa75725e3a2a5f19b0f6a1 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-26  Zoltan Varga  <vargaz@freemail.hu>
+
+       * Makefile.am (TestDriver.dll): Fix a warning.
+
 2005-05-14  Zoltan Varga  <vargaz@freemail.hu>
 
        * libtest.c (mono_test_marshal_out_string_array_delegate): Fix 64
index 274948da611aea0d6951e1afda47b367396b3279..7b3f5b4e54c009d3b5c4a405f3ab20ce46d13999 100644 (file)
@@ -254,7 +254,7 @@ EXTRA_DIST=test-driver $(TEST_CS_SRC) $(TEST_IL_SRC) $(BENCHSRC) $(STRESS_TESTS_
 test:  testjit
 
 TestDriver.dll:
-       $(CSC) -target:library -o $@ $(srcdir)/../mini/TestDriver.cs
+       $(CSC) -target:library -out:$@ $(srcdir)/../mini/TestDriver.cs
 
 test_cs: $(TEST_PROG) $(TESTSI_CS) libtest.la
        @failed=0; \
diff --git a/samples/embed/test-invoke.vcproj b/samples/embed/test-invoke.vcproj
new file mode 100644 (file)
index 0000000..4cb290c
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="test-invoke"\r
+       ProjectGUID="{C5639B3F-288A-4A4B-A4A5-C0D85834221D}"\r
+       RootNamespace="testinvoke"\r
+       Keyword="Win32Proj"\r
+       SignManifests="true"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="Debug"\r
+                       IntermediateDirectory="Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\..\..\libgc\include;&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include;..\..\;C:\cygwin\opt\mono\include"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               ObjectFile="$(IntDir)/invoke/"\r
+                               ProgramDataBaseFileName="$(IntDir)/invoke/vc80.pdb"\r
+                               XMLDocumentationFileName="$(IntDir)/invoke/"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\..\;..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\test-invoke.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/samples/embed/test-metadata.vcproj b/samples/embed/test-metadata.vcproj
new file mode 100644 (file)
index 0000000..3821a3f
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="test-metadata"\r
+       ProjectGUID="{C2EB666E-9146-4B7A-85F6-25F9EA313770}"\r
+       RootNamespace="testmetadata"\r
+       Keyword="Win32Proj"\r
+       SignManifests="true"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="Debug"\r
+                       IntermediateDirectory="Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\..;&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include;C:\cygwin\opt\mono\include"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               ObjectFile="$(IntDir)/metadata/"\r
+                               ProgramDataBaseFileName="$(IntDir)/metadata/vc80.pdb"\r
+                               XMLDocumentationFileName="$(IntDir)/metadata/"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\..\;..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\test-metadata.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/samples/embed/teste.vcproj b/samples/embed/teste.vcproj
new file mode 100644 (file)
index 0000000..df99d22
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="teste"\r
+       ProjectGUID="{6FDE4E5E-57D0-432F-A987-6C226A7827E4}"\r
+       RootNamespace="teste"\r
+       Keyword="Win32Proj"\r
+       SignManifests="true"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="Debug"\r
+                       IntermediateDirectory="Debug"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="..\..;&quot;..\..\VSDependancies\include\glib-2.0\glib&quot;;..\..\VSDependancies\include;C:\cygwin\opt\mono\include"\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               ObjectFile="$(IntDir)/e/"\r
+                               ProgramDataBaseFileName="$(IntDir)/e/vc80.pdb"\r
+                               XMLDocumentationFileName="$(IntDir)/e/"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                               CompileAs="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\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"\r
+                               LinkIncremental="1"\r
+                               AdditionalLibraryDirectories="..\..\;..\..\VSDependancies\lib"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="1"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="true"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="3"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <File\r
+                       RelativePath=".\teste.c"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
index b55af1c54dfc7cca3bf80adcfc457cfb9445800f..a8851d5c6d1d8834154775fc308b2e8d81d81f03 100755 (executable)
@@ -1,3 +1,11 @@
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * fr.xml : more date pattern.
+
+2005-05-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * fr.xml : new file.
+
 2005-04-23  Atsushi Enomoto  <atsushi@ximian.com>
 
        * ko_KR.xml : fixed time format.
diff --git a/tools/locale-builder/supp/fr.xml b/tools/locale-builder/supp/fr.xml
new file mode 100644 (file)
index 0000000..4460c06
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<ldml>
+       <dates>
+               <calendars>
+                       <calendar type="gregorian">
+                               <dateFormats>
+                                       <dateFormatLength type="short">
+                                               <extraPatterns>
+                                                       <pattern>d/MM/yyyy</pattern>
+                                                       <pattern>d/MM/yy</pattern>
+                                               </extraPatterns>
+                                       </dateFormatLength >
+                               </dateFormats>
+                       </calendar>
+               </calendars>
+       </dates>
+</ldml>
\ No newline at end of file