+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
--- /dev/null
+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.
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
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
--- /dev/null
+<?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;.\;".\VSDependancies\include\glib-2.0\glib";.\VSDependancies\include;.\mono\;.\mono\jit;"C:\Program Files\Microsoft SDK\include""\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
+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.
--- /dev/null
+<?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
--- /dev/null
+<?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" ""\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" ""\r
+ Optimization="0"\r
+ InlineFunctionExpansion="0"\r
+ AdditionalIncludeDirectories=".\;.\mono\;.\libgc\include;.\VSDependancies\include\;".\VSDependancies\include\glib-2.0\glib""\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
// 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 ();
}
// 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)
{
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()
{
get
{
- lock(typeof(Manager))
+ lock(lockobj)
{
if(manager == null)
{
\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
{\r
if(environment == null)\r
{\r
- lock(typeof(DB2Environment))\r
+ lock(lockobj)\r
{\r
if(environment == null)\r
{\r
+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
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"
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
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
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 {
+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
public static IDataObject GetDataObject() {
DataObject clipboard;
IntPtr clipboard_handle;
- IntPtr retrieve_handle;
int[] native_formats;
DataFormats.Format item_format;
object managed_clipboard_item;
[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;
#region Protected Instance Methods
[EditorBrowsable (EditorBrowsableState.Advanced)]
protected override void AdjustFormScrollbars(bool displayScrollbars) {
- // Internal MS
+ base.AdjustFormScrollbars(displayScrollbars);
}
protected override void Dispose(bool disposing) {
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)]
}
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
[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;
}
}
[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;
}
}
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 {
#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";
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
}
}
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]
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;
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;
internal VScrollBar vert_scrollbar;
private DataGridDrawing grid_drawing;
internal int first_visiblerow;
+ internal int horz_pixeloffset;
#endregion // Local Variables
#region Public Constructors
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;
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);
#region Public Instance Properties
+ [DefaultValue(true)]
public bool AllowNavigation {
get {
return allow_navigation;
}
}
+ [DefaultValue(true)]
public bool AllowSorting {
get {
return allow_sorting;
}
}
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public Image BackgroundImage {
get {
return base.BackgroundImage;
}
}
+ [DispId(-504)]
+ [DefaultValue(BorderStyle.Fixed3D)]
public BorderStyle BorderStyle {
get {
return border_style;
set {
if (border_style != value) {
border_style = value;
+ grid_drawing.CalcGridAreas ();
OnBorderStyleChanged (EventArgs.Empty);
Refresh ();
}
}
}
+ [Localizable(true)]
+ [AmbientValue(null)]
public Font CaptionFont {
get {
if (caption_font == null) {
}
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 ();
}
}
}
}
+ [Localizable(true)]
+ [DefaultValue("")]
public string CaptionText {
get {
return caption_text;
}
}
+ [DefaultValue(true)]
public bool CaptionVisible {
get {
return caption_visible;
}
}
+ [DefaultValue(true)]
public bool ColumnHeadersVisible {
get {
return columnheaders_visible;
}
}
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DataGridCell CurrentCell {
get {
return current_cell;
}
}
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int CurrentRowIndex {
get {
return currentrow_index;
}
}
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override Cursor Cursor {
get {
return base.Cursor;
}
}
+ [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 {
}
}
+ [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;
}
}
+ [Browsable(false)]
public int FirstVisibleColumn {
get {
return firstvisible_column;
}
}
+ [DefaultValue(false)]
public bool FlatMode {
get {
return flatmode;
}
set {
+ if (value == Color.Empty) {
+ throw new ArgumentNullException ("Color.Empty value is invalid.");
+ }
+
if (gridline_color != value) {
gridline_color = value;
Refresh ();
}
}
+ [DefaultValue(DataGridLineStyle.Solid)]
public DataGridLineStyle GridLineStyle {
get {
return gridline_style;
}
set {
+ if (value == Color.Empty) {
+ throw new ArgumentNullException ("Color.Empty value is invalid.");
+ }
+
if (header_backcolor != value) {
header_backcolor = value;
Refresh ();
}
[ComVisible(false)]
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public Color LinkHoverColor {
get {
return link_hovercolor;
}
}
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
protected internal CurrencyManager ListManager {
get {
if (BindingContext == null || DataSource == null) {
}
}
+ [DefaultValue(DataGridParentRowsLabelStyle.Both)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DataGridParentRowsLabelStyle ParentRowsLabelStyle {
get {
return parentrowslabel_style;
}
}
+ [DefaultValue(true)]
public bool ParentRowsVisible {
get {
return parentrows_visible;
}
// Settting this property seems to have no effect.
+ [DefaultValue(75)]
+ [TypeConverter(typeof(DataGridPreferredColumnWidthTypeConverter))]
public int PreferredColumnWidth {
get {
return preferredcolumn_width;
}
}
+ [DefaultValue(false)]
public bool ReadOnly {
get {
return _readonly;
}
}
+ [DefaultValue(true)]
public bool RowHeadersVisible {
get {
return rowheaders_visible;
}
}
+ [DefaultValue(35)]
public int RowHeaderWidth {
get {
return rowheaders_width;
}
}
+ [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;
}
}
+ [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;
current_style = value;
}
}
-
+
internal int FirstVisibleRow {
get { return first_visiblerow; }
set { first_visiblerow = value;}
Navigate (this, e);
}
}
-
+
protected override void OnPaint (PaintEventArgs pe)
- {
- grid_drawing.OnPaint (pe);
+ {
+ grid_drawing.OnPaint (pe);
}
protected override void OnPaintBackground (PaintEventArgs ebe)
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)
{
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
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;
protected event EventHandler RowHeaderClick;
public event EventHandler Scroll;
public event EventHandler ShowParentDetailsButtonClick;
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public new event EventHandler TextChanged;
#endregion // Events
}
#endregion
#region Public Instance Properties
+ [DefaultValue(true)]
public bool AllowNull {
get {
return allownull;
}
}
+ [TypeConverter(typeof(System.ComponentModel.StringConverter))]
public object FalseValue {
get {
return falsevalue;
}
}
+ [TypeConverter(typeof(System.ComponentModel.StringConverter))]
public object NullValue {
get {
return nullvalue;
}
}
+ [TypeConverter(typeof(System.ComponentModel.StringConverter))]
public object TrueValue {
get {
return truevalue;
{
}
-
- [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]
// 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)]
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
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;
}
}
+ [Browsable(false)]
public virtual DataGridTableStyle DataGridTableStyle {
get {
return table_style;
}
}
+ [Browsable(false)]
public AccessibleObject HeaderAccessibleObject {
get {
return accesible_object;
}
}
+ [Localizable(true)]
public virtual string HeaderText {
get {
return header_text;
}
}
+ [Editor("System.Windows.Forms.Design.DataGridColumnStyleMappingNameEditor, " + Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
+ [Localizable(true)]
public string MappingName {
get {
return mapping_name;
}
}
+ [Localizable(true)]
public virtual string NullText {
get {
return null_text;
}
}
+ [Browsable(false)]
+ [DefaultValue(null)]
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
public virtual PropertyDescriptor PropertyDescriptor {
get {
return property_descriptor;
}
}
+ [DefaultValue(false)]
public virtual bool ReadOnly {
get {
return read_only;
}
}
+ [DefaultValue(100)]
+ [Localizable(true)]
public virtual int Width {
get {
return width;
}
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");
}
}
}
protected internal virtual object GetColumnValueAtRow (CurrencyManager source, int rowNum)
- {
+ {
CheckValidDataSource (source);
return property_descriptor.GetValue (source.GetItem (rowNum));
}
{
}
-
#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
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;
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
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 ();
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 ()
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 ()
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 ()
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;
} 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 ()
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
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;
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;
#endregion // Public Instance Methods
#region Instance Properties
- // Temp
internal int BorderStyleSize {
get {
-
switch (grid.border_style) {
case BorderStyle.Fixed3D:
return 2;
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
}
}
--- /dev/null
+// 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
+ }
+}
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);
#endregion
#region Public Instance Properties
+ [DefaultValue(true)]
public bool AllowSorting {
get {
return allow_sorting;
}
}
+ [DefaultValue(true)]
public bool ColumnHeadersVisible {
get {
return columnheaders_visible;
}
}
+ [Browsable(false)]
public virtual DataGrid DataGrid {
get {
return datagrid;
}
}
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
+ [Localizable(true)]
public virtual GridColumnStylesCollection GridColumnStyles {
get { return column_styles; }
}
}
}
+ [DefaultValue(DataGridLineStyle.Solid)]
public DataGridLineStyle GridLineStyle {
get {
return gridline_style;
}
}
+ [AmbientValue(null)]
+ [Localizable(true)]
public Font HeaderFont {
get {
if (header_font != null)
}
[ComVisible(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ [Browsable(false)]
public Color LinkHoverColor {
get {
return link_hovercolor;
}
}
+ [Editor("System.Windows.Forms.Design.DataGridTableStyleMappingNameEditor, " + Consts.AssemblySystem_Design, typeof(System.Drawing.Design.UITypeEditor))]
public string MappingName {
get {
return mapping_name;
}
}
+ [DefaultValue(75)]
+ [TypeConverter(typeof(DataGridPreferredColumnWidthTypeConverter))]
+ [Localizable(true)]
public int PreferredColumnWidth {
get {
return preferredcolumn_width;
}
}
+ [Localizable(true)]
public int PreferredRowHeight {
get {
return preferredrow_height;
}
}
+ [DefaultValue(false)]
public bool ReadOnly {
get {
return _readonly;
}
}
+ [DefaultValue(true)]
public bool RowHeadersVisible {
get {
return rowheaders_visible;
}
}
+ [DefaultValue(35)]
+ [Localizable(true)]
public int RowHeaderWidth {
get {
return rowheaders_width;
}
}
+ [Description("The foreground color for the current data grid row")]
public Color SelectionForeColor {
get {
return selection_forecolor;
}
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 ();
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);
}
namespace System.Windows.Forms
{
+ [DefaultProperty("GridEditName")]
+ [DesignTimeVisible(false)]
+ [ToolboxItem(false)]
public class DataGridTextBox : TextBox
{
#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;
}
}
}
-
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
public IFormatProvider FormatInfo {
get {
return format_provider;
}
}
}
-
+
+ [DefaultValue(null)]
public PropertyDescriptor PropertyDescriptor {
set {
base.PropertyDescriptor = value;
}
[MonoTODO]
+ [Browsable(false)]
public virtual TextBox TextBox {
get {
return null;
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)
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);
}
{
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
#region Constructors
internal Entry(string type, object data, bool autoconvert) {
- Entry e;
-
this.type = type;
this.data = data;
this.autoconvert = autoconvert;
}
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) {
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
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 {
namespace System.Windows.Forms
{
+ [DefaultProperty("FileName")]
+ [DefaultEvent("FileOk")]
public abstract class FileDialog : CommonDialog
{
internal enum FileDialogType
private bool showHiddenFiles = false;
internal FileDialogType fileDialogType;
-
+
+ internal FileDialog() : base() {
+ }
+
+ [DefaultValue(true)]
public bool AddExtension
{
get
addExtension = value;
}
}
-
+
+ [DefaultValue(false)]
public virtual bool CheckFileExists
{
get
}
}
+ [DefaultValue(true)]
public bool CheckPathExists
{
get
}
}
+ [DefaultValue("")]
public string DefaultExt
{
get
// DerefenceLinks is true or false
// if the selected file is a link FileDialog
// always returns the link
+ [DefaultValue(true)]
public bool DereferenceLinks
{
get
}
}
+ [DefaultValue("")]
public string FileName
{
get
fileName = value;
}
}
-
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string[] FileNames
{
get
return null;
}
}
-
+
+ [DefaultValue("")]
+ [Localizable(true)]
public string Filter
{
get
fileDialogPanel.UpdateFilters( );
}
}
-
+
+ [DefaultValue(1)]
public int FilterIndex
{
get
filterIndex = value;
}
}
-
+
+ [DefaultValue("")]
public string InitialDirectory
{
get
}
}
+ [DefaultValue(false)]
public bool RestoreDirectory
{
get
}
}
+ [DefaultValue(false)]
public bool ShowHelp
{
get
}
}
+ [DefaultValue("")]
+ [Localizable(true)]
public string Title
{
get
// - trailing periods or spaces
// - case sensitive
// - etc...
+ [DefaultValue(true)]
public bool ValidateNames
{
get
}
// extension to MS.NET framework...
- public bool ShowHiddenFiles
+ // Must keep this internal, otherwise our signature doesn't match MS
+ internal bool ShowHiddenFiles
{
set
{
{
[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
namespace System.Windows.Forms
{
[DefaultProperty( "Font" )]
+ [DefaultEvent("Apply")]
public class FontDialog : CommonDialog
{
private FontDialogPanel fontDialogPanel;
}
}
- [DefaultValue("Black")]
public Color Color
{
set {
}
}
- [DefaultValue(typeof(Size), "{Width=0, Height=0}")]
+ [DefaultValue("{Width=0, Height=0}")]
[Localizable(true)]
[RefreshProperties(RefreshProperties.Repaint)]
public Size MaximumSize {
}
}
- [DefaultValue(typeof(Size), "{Width=0, Height=0}")]
+ [DefaultValue("{Width=0, Height=0}")]
[Localizable(true)]
[RefreshProperties(RefreshProperties.Repaint)]
public Size MinimumSize {
{
[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;
--- /dev/null
+// 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
+ }
+}
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 {
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 {
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;
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
- string s;
string[] parts;
int start;
int length;
{
[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;
{
[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;
#endregion // Public Constructors
#region Public Instance Properties
+ [Localizable(true)]
public override System.Drawing.Image BackgroundImage {
get {
return base.BackgroundImage;
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
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;
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
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
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 () {
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;
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
}
}
- [MonoTODO()]
+ [MonoTODO]
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoScroll {
get {
return base.AutoScroll;
}
[MonoTODO()]
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override Image BackgroundImage {
get {
return base.BackgroundImage;
}
[MonoTODO()]
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Control.ControlCollection Controls {
get {
return base.Controls;
}
[MonoTODO()]
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public override Color ForeColor
{
get {
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
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
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;
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
- string s;\r
string[] parts;\r
DateTime start;\r
DateTime end;\r
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
{
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
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;
[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
#region Datagrid
public abstract int DataGridPreferredColumnWidth { get; }
+ public abstract int DataGridMinimumColumnCheckBoxHeight { get; }
+ public abstract int DataGridMinimumColumnCheckBoxWidth { get; }
// Default colours
public abstract Color DataGridAlternatingBackColor { get; }
#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;} }
{
[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
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
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
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 = "\\";
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() {
// Timers
private ArrayList TimerList;
+ static readonly object lockobj = new object ();
+
// Event Handlers
internal override event EventHandler Idle;
#region Singleton specific code
public static XplatUIOSX GetInstance() {
- lock (typeof (XplatUIOSX)) {
+ lock (lockobj) {
if (Instance == null) {
Instance = new XplatUIOSX ();
}
\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
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);
}
return;
}
}
- return;
}
internal override int KeyboardSpeed {
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;
// '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
#region Singleton Specific Code
public static XplatUIX11 GetInstance() {
- lock (typeof(XplatUIX11)) {
+ lock (lockobj) {
if (Instance == null) {
Instance=new XplatUIX11();
}
} else if (Clipboard.Item is string) {
IntPtr buffer;
int buflen;
- byte b;
buffer = Marshal.StringToHGlobalAnsi((string)Clipboard.Item);
buflen = 0;
}\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
+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
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) {
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;
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);
//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");
}
+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.
}
// 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
private Surface (IntPtr ptr, bool owns)
{
surface = ptr;
- lock (typeof (Surface)){
+ lock (surfaces.SyncRoot){
surfaces [ptr] = this;
}
if (!owns)
static internal Surface LookupExternalSurface (IntPtr p)
{
- lock (typeof (Surface)){
+ lock (surfaces.SyncRoot){
object o = surfaces [p];
if (o == null){
return new Surface (p, false);
{
if (surface == (IntPtr) 0)
return;
- lock (typeof (Surface)){
+ lock (surfaces.SyncRoot){
surfaces.Remove (surface);
}
CairoAPI.cairo_surface_destroy (surface);
+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.
MonoSymbolWriter.cs
MonoSymbolTable.cs
MonoSymbolFile.cs
+SymbolWriterImpl.cs
--- /dev/null
+//
+// 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 ();
+ }
+}
--- /dev/null
+2005-05-27 Sureshkumar T <tsureshkumar@novell.com>
+
+ * TdsMetaParameter.cs: Prepare: in SQL, a variable declaration
+ with size 0 is not allowed. fixes #62978.
+
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));
// 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");
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");
+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
+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
* 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
_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
\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
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
\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
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
\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
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
\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
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
\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
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
\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
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
\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
#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
#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
#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
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
\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
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
\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
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
\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
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
\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
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
\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
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
\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
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
--- /dev/null
+//
+// 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
#region Fields
internal static OdbcConnectionFactory Instance; // singleton
private static DbProviderFactory _providerFactory;
+ static readonly object lockobj = new object ();
#endregion // Fields
#region Constructors
// create singleton connection factory.
internal static OdbcConnectionFactory GetSingleton (OdbcFactory pvdrFactory)
{
- lock (typeof (OdbcConnectionFactory))
+ lock (lockobj)
{
if (Instance == null)
Instance = new OdbcConnectionFactory (pvdrFactory);
{
#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()
{
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)
+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
}
}
- public String SoruceColumn {
+ public String SourceColumn {
get {
if (this.sourceColumn != null)
return sourceColumn;
KeepIdentity = 1,
KeepNulls = 8,
TableLock = 4,
- UseInternalTranscation = 32
+ UseInternalTransaction = 32
}
}
--- /dev/null
+//
+// 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
+
#region Fields
internal static SqlConnectionFactory Instance; // singleton
private static DbProviderFactory _providerFactory;
+ static readonly object lockobj = new object ();
#endregion // Fields
#region Constructors
#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]
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
/// <summary>
/// Describes the differnt transports that can be used between the client and the server.
/// </summary>
+ [Flags]
+ [Serializable]
public enum SqlNotificationTransports {
Any = -1,
set { container = value; }
}
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[Browsable (false)]
[DataSysDescription ("The parameter generic type.")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
}
[DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("Input, output, or bidirectional parameter.")]
[DefaultValue (ParameterDirection.Input)]
#endif
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)]
[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
set { offset = value; }
}
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("Name of the parameter, like '@p1'")]
[DefaultValue ("")]
#endif
}
[DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("For decimal, numeric, varnumeric DBTypes.")]
[DefaultValue (0)]
#endif
}
[DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("For decimal, numeric, varnumeric DBTypes.")]
[DefaultValue (0)]
#endif
}
[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
}
[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
}
[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
}
[DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("The parameter native type.")]
[DefaultValue (SqlDbType.NVarChar)]
#endif
}
[DataCategory ("Data")]
-#if NET_1_1
+#if ONLY_1_0 || ONLY_1_1
[DataSysDescription ("Value of the parameter.")]
[DefaultValue (null)]
#endif
}
}
-#if NET_2_0
+//#if NET_2_0
// public SqlCompareOptions CompareInfo{
-#endif
+//#endif
#endregion // Properties
// 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
#endregion // Constructors
#region Properties
-
+#if ONLY_1_1 || ONLY_1_0
[Browsable (false)]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+#endif
+
+
public
#if NET_2_0
override
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
}
}
+#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; }
get { return list.SyncRoot; }
}
+
+
internal TdsMetaParameterCollection MetaParameters {
get { return metaParameters; }
}
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
}
+#if NET_2_0
+ public int IndexOf (SqlParameter value) {
+ return list.IndexOf(value);
+ }
+
+#endif // NET_2_0
+
public
#if NET_2_0
override
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
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
}
}
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
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
+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
_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);
/// 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
}
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
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
-//\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);
//string GetDataTypeName(int i);
- //DateTime GetDateTime(int i);
+ DateTime GetDateTimeSafe(int i);
decimal GetDecimalSafe(int i);
//object this[string name]{get;}
- //object this[int i]{get;}\r
- }\r
-}\r
+ //object this[int i]{get;}
+ }
+}
+System.Data.Test.Utils/DataProvider.cs
System.Data.SqlTypes/SqlBinaryTest.cs
System.Data.SqlTypes/SqlBooleanTest.cs
System.Data.SqlTypes/SqlByteTest.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
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
+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 &
--- /dev/null
+2005-05-26 Eyal Alaluf <eyala@mainsoft.com>
+ * DataProvider.cs: Utiltilty class for creating different types of DataTables.
--- /dev/null
+// 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;
+ }
+ }
+}
+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
--- /dev/null
+// 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;
+ }
+ }
+}
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");
+
}
}
}
-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
* 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
~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)
return null;
}
- internal static IntPtr CreateInterface(IStream managedInterface)
+ internal static IntPtr GetInterface(IStream managedInterface)
{
IntPtr comInterface;
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));
lock (thisObject)
{
if ((thisObject.refCount != 0) && (--thisObject.refCount == 0))
- thisObject.Dispose();
+ thisObject.Dispose(true);
return thisObject.refCount;
}
{
#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
}
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)
return IntPtr.Zero;
}
- internal static IStream CreateInterface(IntPtr comInterface, bool outParam)
+ internal static IStream GetInterface(IntPtr comInterface, bool outParam)
{
IStream managedInterface;
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);
}
}
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()
}
}
}
+
+ private static bool IsIndexedPixelFormat(PixelFormat pixfmt)
+ {
+ return ((pixfmt & PixelFormat.Indexed) != 0);
+ }
+
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
[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 {
class WSConfig
{
- static WSConfig instance;
+ volatile static WSConfig instance;
WSProtocol protocols;
string wsdlHelpPage;
string filePath;
ArrayList extensionImporterTypes = new ArrayList();
ArrayList extensionReflectorTypes = new ArrayList();
ArrayList formatExtensionTypes = new ArrayList();
+ static readonly object lockobj = new object ();
public WSConfig (WSConfig parent, object context)
{
if (instance != null)
return instance;
- lock (typeof (WSConfig)) {
+ lock (lockobj) {
if (instance != null)
return instance;
+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.
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;
public static string MachineConfigPath {
get {
- lock (typeof (WebConfigurationSettings)) {
+ lock (lockobj) {
if (machineConfigPath != null)
return machineConfigPath;
{
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)
{
if (instance != null)
return instance;
- lock (typeof (WebControlsConfig)) {
+ lock (lockobj) {
if (instance != null)
return instance;
+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:
private bool _isCookieless;
private SessionStateMode _mode;
private bool _isReadonly;
- private bool _abandoned;
+ internal bool _abandoned;
internal HttpSessionState (string id,
SessionDictionary dict,
item.Touch ();
return item;
}
+
+ internal void Remove (string id)
+ {
+ table.Remove (id);
+ }
}
}
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)
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,
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)
{
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,
+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
public DataSourceView GetView (string viewName)
{
- return new CollectionDataSourceView (collection);
+ return new CollectionDataSourceView (this, viewName, collection);
}
public ICollection GetViewNames ()
{
IEnumerable collection;
- public CollectionDataSourceView (IEnumerable collection)
+ public CollectionDataSourceView (IDataSource owner, string viewName, IEnumerable collection)
+ : base (owner, viewName)
{
this.collection = collection;
}
}
}
+ [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]
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) {
field.UpdateImageUrl = UpdateImageUrl;
field.UpdateText = UpdateText;
}
+
+ public override void ValidateSupportsCallback ()
+ {
+ }
}
}
#endif
{\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
}\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
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);
{\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
if (valuesCollection != null)\r
return valuesCollection;\r
\r
- lock (creatingValues) {\r
+ lock (lockobj) {\r
if (valuesCollection != null)\r
return valuesCollection;\r
\r
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);
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)
{
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);
set { dataItem = value; }
}
- public object ItemIndex {
+ public int ItemIndex {
+ get { return index; }
+ }
+
+ int IDataItemContainer.DataItemIndex {
+ get { return index; }
+ }
+
+ int IDataItemContainer.DisplayIndex {
get { return index; }
}
}
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;
}
}\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
using System;
using System.Collections;
using System.Web.UI;
+using System.Web.Util;
using System.ComponentModel;
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);
}
}
}
// 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)
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
{
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
--- /dev/null
+//
+// 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
--- /dev/null
+//
+// 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
HttpContext context;
public SqlDataSourceView (SqlDataSource owner, string name, HttpContext context)
+ : base (owner, name)
{
this.owner = owner;
this.name = name;
protected virtual string RaiseCallbackEvent (string eventArgs)
{
+ RequiresDataBinding = true;
+ EnsureDataBound ();
+
TreeNode node = FindNodeByPos (eventArgs);
ArrayList levelLines = new ArrayList ();
TreeNode nd = node;
protected virtual bool LoadPostData (string postDataKey, NameValueCollection postCollection)
{
+ RequiresDataBinding = true;
EnsureDataBound ();
bool res = false;
ArrayList nodes;
public XmlDataSourceView (XmlDataSource owner, string name, XmlNodeList nodes)
+ : base (owner, name)
{
// Why do they pass owner?
this.name = name;
foreach (string key in bag.Keys) {
string value = bag [key] as string;
if (value != null)
- writer.WriteAttribute (key, value);
+ writer.WriteAttribute (key, value, true);
}
}
}
+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.
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 ()
}
- 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");
}\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);
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;
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)
if (!callBack (rowAffected, passOn) && passOn != null)
throw passOn;
-
- return rowAffected;
}
public virtual bool CanDelete { get { return false; } }
//
// 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()
{
}
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); }
if (eh != null)
eh (this, e);
}
+
+ public override void RenderControl (HtmlTextWriter writer)
+ {
+ // nop
+ }
}
namespace System.Web.UI
{
- public interface IDataItemContainer
+ public interface IDataItemContainer: INamingContainer
{
object DataItem { get; }
-/* int DataItemIndex { get; }
+ int DataItemIndex { get; }
int DisplayIndex { get; }
-*/
}
}
#endif
--- /dev/null
+//
+// 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
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
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
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
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 ();
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 ()
if (loaded)
return;
- lock (typeof (CapabilitiesLoader)) {
+ lock (lockobj) {
if (loaded)
return;
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;
- }
- }
- }
}
}
+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
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
using System.Configuration.Provider;
namespace System.Web {
- public sealed class SiteMap {
+ public abstract class SiteMap {
internal SiteMap ()
{
[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);
}
}
}
}
}
+ public event SiteMapResolveEventHandler SiteMapResolve {
+ add { Provider.SiteMapResolve += value; }
+ remove { Provider.SiteMapResolve -= value; }
+ }
+
static SiteMapProvider provider;
static SiteMapProviderCollection providers;
static object locker = new object ();
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;
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)
return new SiteMapHierarchicalDataSourceView (this);
}
- [MonoTODO]
public bool IsAccessibleToUser (System.Web.HttpContext ctx)
{
- throw new NotImplementedException ();
+ return provider.IsAccessibleToUser (ctx, this);
}
public override string ToString()
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 ()
{
}
}
- [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; } }
}
[MonoTODO]
- protected string GetExplicitResourceString (string attributeName, bool b)
+ protected string GetExplicitResourceString (string attributeName, string defaultValue, bool throwIfNotFound)
{
return null;
}
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 ()
set { CheckWritable (); attributes = value; }
}
+ [Localizable (true)]
public virtual string Description {
get { return description != null ? description : ""; }
set { CheckWritable (); description = value; }
bool readOnly;
string resourceKey;
SiteMapNode parent;
+ string implicitResourceKey;
+ SiteMapNodeCollection childNodes;
#endregion
}
//
// 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)
//
//
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)
{
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);
this.List.CopyTo (array, index);
}
-// public SiteMapDataSourceView GetDataSourceView ()
-// {
-// return new SiteMapDataSourceView (this);
-// }
-
public int IndexOf (SiteMapNode value)
{
return this.List.IndexOf (value);
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)
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; }
}
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
//
// 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)
//
//
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
//
// 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.Web.UI;
namespace System.Web {
- public class SiteMapProviderCollection : ProviderCollection
+ public sealed class SiteMapProviderCollection : ProviderCollection
{
public SiteMapProviderCollection () {}
{
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
--- /dev/null
+//
+// 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
+
//
// 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)
//
//
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 ()
{
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;
}
}
[MonoTODO]
SiteMapNode BuildSiteMapRecursive (XmlNode xmlNode)
{
-
if (xmlNode.Name != "siteMapNode")
throw new ConfigurationException ("incorrect element name", xmlNode);
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)
}
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)
}
}
- 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;
root = null;
}
- [MonoTODO]
public void Dispose ()
{
- // what do i do?
+ watcher.Dispose ();
}
[MonoTODO]
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 {
}
}
- string file;
- SiteMapNode root = null;
+ protected internal override SiteMapNode GetRootNodeCore ()
+ {
+ return BuildSiteMap ();
+ }
}
}
+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)
$(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 \
+2005-05-25 Andrew Skiba <andrews@mainsoft.com>
+
+ * W3C : directory added
+
2005-05-10 Atsushi Enomoto <atsushi@ximian.com>
* XmlValidatingReaderTests.cs : fixed TestPreserveEntityNotOnDotNet()
--- /dev/null
+2005-05-25 Andrew Skiba <andrews@mainsoft.com>
+
+ * README : added
--- /dev/null
+This directory contains XML W3C Conformance Test Suite. See http://www.w3.org/XML/Test/ for more details
+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
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 ()
{
if (action != null)
return action;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (action == null)
action = new CategoryAttribute ("Action");
}
if (appearance != null)
return appearance;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (appearance == null)
appearance = new CategoryAttribute ("Appearance");
}
if (behaviour != null)
return behaviour;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (behaviour == null)
behaviour = new CategoryAttribute ("Behavior");
}
if (data != null)
return data;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (data == null)
data = new CategoryAttribute ("Data");
}
if (def != null)
return def;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (def == null)
def = new CategoryAttribute ();
}
if (design != null)
return design;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (design == null)
design = new CategoryAttribute ("Design");
}
if (drag_drop != null)
return drag_drop;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (drag_drop == null)
drag_drop = new CategoryAttribute ("Drag Drop");
}
if (focus != null)
return focus;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (focus == null)
focus = new CategoryAttribute ("Focus");
}
if (format != null)
return format;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (format == null)
format = new CategoryAttribute ("Format");
}
if (key != null)
return key;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (key == null)
key = new CategoryAttribute ("Key");
}
if (layout != null)
return layout;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (layout == null)
layout = new CategoryAttribute ("Layout");
}
if (mouse != null)
return mouse;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (mouse == null)
mouse = new CategoryAttribute ("Mouse");
}
if (window_style != null)
return window_style;
- lock (typeof (CategoryAttribute)) {
+ lock (lockobj) {
if (window_style == null)
window_style = new CategoryAttribute ("Window Style");
}
{
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 ()
{
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();
}
}
set {
- lock (typeof(LicenseManager)) {
+ lock (lockObject) {
if (contextLockUser==null) {
mycontext = value;
} else {
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;
}
}
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;
{
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);
}
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;
//
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;
}
+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.
{
}
+ // 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)
{
}
+ // 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)
data.SubDirs = new Hashtable ();
data.Enabled = true;
+ StartMonitoringDirectory (data);
lock (this) {
- StartMonitoringDirectory (data);
watches [fsw] = data;
requests [data.Request.ReqNum] = data;
stop = false;
void ProcessEvents ()
{
+ ArrayList newdirs = null;
lock (this) {
do {
int code;
}
if (fa == FileAction.Added && Directory.Exists (datadir)) {
+ if (newdirs == null)
+ newdirs = new ArrayList (4);
+
FAMData fd = new FAMData ();
fd.FSW = fsw;
fd.Directory = datadir;
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;
}
}
}
} 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 ()
bool disposed;
string mangledFilter;
static IFileWatcher watcher;
+ static object lockobj = new object ();
#endregion // Fields
void InitWatcher ()
{
- lock (typeof (FileSystemWatcher)) {
+ lock (lockobj) {
if (watcher != null)
return;
{
}
+ // 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)
{
}
+ // Locked by caller
public static bool GetInstance (out IFileWatcher watcher)
{
throw new NotSupportedException ();
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;
}
}
{\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
if (proxy != null)\r
return proxy;\r
\r
- lock (typeof (GlobalProxySelection)) {\r
+ lock (lockobj) {\r
if (proxy != null)\r
return proxy;\r
\r
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
+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
\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
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
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
\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
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;
// 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;
}
}
+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.
public void Close ()
{
- StopTimer ();
+ Enabled = false;
}
public void EndInit ()
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
#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());
+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 $+.
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]
--- /dev/null
+2005-05-28 Kornél Pál <kornelpal@hotmail.com>
+
+ * TimerTest.cs: New test file for System.Timers.Timer.
--- /dev/null
+//
+// 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
+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.
+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.
// 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");
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");
+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
}
}
}
-
+
protected virtual int GetHash (K key)
{
- IComparer<K> hcp = this._hcp;
+ //IComparer<K> hcp = this._hcp;
return key.GetHashCode ();
/*
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++)
}
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 {
}
// 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;
}
}
// 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;
}
}
}
-
static bool TestPrime (int x)
{
if ((x & 1) != 0) {
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; }
+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.
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;
+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.
}
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");
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
+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>
}
#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
}
}
+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
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;
+using System.Diagnostics.SymbolStore;
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);
}
// 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
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]);
}
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]);
}
public override Type UnderlyingSystemType {
get {
- return null;
+ return this;
}
}
const int defaultFixupSize = 8;
const int defaultLabelsSize = 8;
+ ArrayList sequencePointLists;
+ SequencePointList currentSequence;
internal ILGenerator (Module m, TokenGenerator token_gen, int size)
{
open_blocks = new Stack ();
this.token_gen = token_gen;
}
-
+
private void add_token_fixup (MemberInfo mi)
{
if (num_token_fixups == token_fixups.Length) {
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)
{
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;
+ }
}
#endif
internal ILGenerator ilgen;
+ int startOffset;
+ int endOffset;
internal LocalBuilder (Type t, ILGenerator ilgen)
{
public void SetLocalSymInfo (string lname, int startOffset, int endOffset)
{
- // nop
+ name = lname;
+ this.startOffset = startOffset;
+ this.endOffset = endOffset;
}
public void SetLocalSymInfo (string lname)
}
}
#endif
+
+ internal string Name {
+ get { return name; }
+ }
+
+ internal int StartOffset {
+ get { return startOffset; }
+ }
+
+ internal int EndOffset {
+ get { return endOffset; }
+ }
}
}
using System.Security.Permissions;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using System.Diagnostics.SymbolStore;
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;
pi_dll = dllName;
pi_entry = entryName;
native_cc = nativeCConv;
- ncharset = nativeCharset;
+ charset = nativeCharset;
}
public bool InitLocals {
/* 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));
}
}
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)
bool transient;
ModuleBuilderTokenGenerator token_gen;
ArrayList resource_writers = null;
+ ISymbolWriter symbolWriter;
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void basic_init (ModuleBuilder ab);
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;}}
}
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 ()
// 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 {
}
}
}
+
using System.Collections;
using System.Security;
using System.Security.Permissions;
+using System.Diagnostics.SymbolStore;
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)
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 ();
}
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;
}
}
+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.
--- /dev/null
+//
+// 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
--- /dev/null
+//
+// 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
--- /dev/null
+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.
+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.
if (null == handler)
throw new ArgumentNullException("handler");
- lock (typeof(TrackingServices)) {
+ lock (_handlers.SyncRoot) {
if (-1 != _handlers.IndexOf(handler))
throw new RemotingException("handler already registered");
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");
\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
+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
{
public class InternalRemotingServices
{
- static Hashtable _soapAttributes;
+ static Hashtable _soapAttributes = new Hashtable ();
public InternalRemotingServices ()
{
}
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;
+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.
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;
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();
+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.
--- /dev/null
+//
+// 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;
+ }
+ }
+}
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) {
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)
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) {
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);
}
}
// 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 ()
{
}
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 ();
+ }
}
}
}
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)
+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
[Serializable]
[SecurityPermission (SecurityAction.InheritanceDemand, ControlEvidence = true, ControlPolicy = true)]
+#if NET_2_0
+ [ComVisible (true)]
+#endif
public abstract class CodeAccessPermission : IPermission, ISecurityEncodable, IStackWalk {
protected CodeAccessPermission ()
// 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.");
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);
#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 ()
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;
}
--- /dev/null
+//
+// 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);
+ }
+ }
+}
[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;
// 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)
// 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);
}
}
}
}
- [MonoTODO ("adjust class version with current runtime - unification")]
public virtual void FromXml (SecurityElement et)
{
if (et == null)
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");
// 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));
}
}
}
// 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!
{
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;
PermissionSet ps = (obj as PermissionSet);
if (ps == null)
return false;
+ if (state != ps.state)
+ return false;
if (list.Count != ps.Count)
return false;
internal sealed class SecurityContext {
#endif
private bool _capture;
- private WindowsIdentity _winid;
+ private IntPtr _winid;
private CompressedStack _stack;
private bool _suppressFlowWindowsIdentity;
private bool _suppressFlow;
SecurityContext capture = new SecurityContext ();
capture._capture = true;
- capture._winid = WindowsIdentity.GetCurrent ();
+ capture._winid = WindowsIdentity.GetCurrentToken ();
capture._stack = CompressedStack.Capture ();
return capture;
}
set { _stack = value; }
}
- internal WindowsIdentity WindowsIdentity {
+ internal IntPtr IdentityToken {
get { return _winid; }
set { _winid = value; }
}
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)
{
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;
}
}
: 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)
+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
// 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) {
#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 ();
}
{
get {
if (bigEndianEncoding == null) {
- lock (typeof(Encoding)) {
+ lock (lockobj) {
if (bigEndianEncoding == null) {
bigEndianEncoding = new UnicodeEncoding (true, true);
}
{
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.
{
get {
if (isoLatin1Encoding == null) {
- lock (typeof(Encoding)) {
+ lock (lockobj) {
if (isoLatin1Encoding == null) {
isoLatin1Encoding = new Latin1Encoding ();
}
{
get {
if (utf7Encoding == null) {
- lock (typeof(Encoding)) {
+ lock (lockobj) {
if (utf7Encoding == null) {
utf7Encoding = new UTF7Encoding ();
}
{
get {
if (utf8EncodingWithMarkers == null) {
- lock (typeof(Encoding)) {
+ lock (lockobj) {
if (utf8EncodingWithMarkers == null) {
utf8EncodingWithMarkers = new UTF8Encoding (true);
}
internal static Encoding UTF8Unmarked {
get {
if (utf8EncodingWithoutMarkers == null) {
- lock (typeof (Encoding)){
+ lock (lockobj){
if (utf8EncodingWithoutMarkers == null){
utf8EncodingWithoutMarkers = new UTF8Encoding (false, false);
}
{
get {
if (unicodeEncoding == null) {
- lock (typeof(Encoding)) {
+ lock (lockobj) {
if (unicodeEncoding == null) {
unicodeEncoding = new UnicodeEncoding (false, true);
}
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;
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
// 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;
+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
// 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
namespace System.Threading
{
- [ComVisibleAttribute (false)]
public class SynchronizationContext
{
[ThreadStatic]
{
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)
{
{
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);
[MonoTODO]
[CLSCompliant (false)]
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
+ [PrePrepareMethod ()]
protected static int WaitHelper (IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
{
throw new NotImplementedException ();
*/
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
byte[] arr = GetSerializedCurrentCulture ();
if (arr == null) {
- lock (typeof (Thread)) {
+ lock (culture_lock) {
in_currentculture=true;
culture = CultureInfo.ConstructCurrentCulture ();
//
MemoryStream ms = new MemoryStream (arr);
culture = (CultureInfo)bf.Deserialize (ms);
SetCachedCurrentCulture (culture);
- }
- finally {
+ } finally {
in_currentculture = false;
}
byte[] arr = GetSerializedCurrentUICulture ();
if (arr == null) {
- lock (typeof (Thread)) {
+ lock (culture_lock) {
in_currentculture=true;
/* We don't
* distinguish
// instead and have the property call these.
-#pragma warning disable 618
[MonoTODO]
public ApartmentState GetApartmentState ()
{
return false;
}
}
-#pragma warning restore 618
[ComVisible (false)]
public override int GetHashCode ()
#if NET_2_0
using System.Reflection;
+using System.Runtime.Hosting;
using System.Security;
using System.Security.Policy;
using System.Threading;
// 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
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+#if NET_2_0
+using System.Runtime.Hosting;
+#endif
+
namespace System
{
[Serializable]
private LoaderOptimization loader_optimization;
bool disallow_binding_redirects;
bool disallow_code_downloads;
+#if NET_2_0
+ private ActivationArguments _activationArguments;
+#endif
public AppDomainSetup ()
{
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;
}
}
#endif
+
+#if NET_2_0
+ public ActivationArguments ActivationArguments {
+ get { return _activationArguments; }
+ set { _activationArguments = value; }
+ }
+#endif
}
}
+++ /dev/null
-//
-// 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
+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
// 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",
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) {
}
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;
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++) {
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)
} 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
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
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;
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;
}
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)
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)
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;
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;
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;
* 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
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 ();
return null;
if (stack_trace == null) {
- StackTrace st = new StackTrace (this, true);
+ StackTrace st = new StackTrace (this, 0, true, true);
StringBuilder sb = new StringBuilder ();
public override string AssemblyQualifiedName {
get {
- return getFullName (false) + ", " + Assembly.GetName ().ToString ();
+ return getFullName (false) + ", " + Assembly.UnprotectedGetName ().ToString ();
}
}
// 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);
}
}
}
if (start < format.length)
- result.Append (format.Substring (start));
+ result.Append (format, start, format.Length - start);
}
public unsafe static String Copy (String str)
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);
}
}
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);
}
}
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);
}
}
[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]
[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)
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);
}
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);
}
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,
{
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);
}
-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.
{\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
[Test]
[ExpectedException (typeof(ArgumentNullException))]
- [Category("NotWorking")]
public void TestGetConstructorNullElementType ()
{
EnumBuilder enumBuilder = GenerateEnum ();
+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
[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)]
}
#if NET_2_0
- [Category ("NotWorking")]
[Test]
public void PseudoCustomAttributes ()
{
}
#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 ()
{
--- /dev/null
+//
+// 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);
+ }
+}
+}
+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.
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
+using System.Text;
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]
{
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 ()
-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.
using NUnit.Framework;
using System;
using System.Reflection;
-//using System.Runtime.Hosting;
using System.Security;
using System.Security.Policy;
}
[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 ()
{
}
#if NET_2_0
[Test]
- [Category ("NotWorking")]
public void Equals ()
{
NamedPermissionSet psn = new NamedPermissionSet (name, PermissionState.None);
--- /dev/null
+//
+// 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
+ }
+}
AssertEquals ("PermissionStateUnrestricted.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
}
-#if NET_2_0
- [Category ("NotWorking")]
-#endif
[Test]
public void PermissionSetNull ()
{
AssertEquals ("0", 0, ps.Count);
}
-#if NET_2_0
- [Category ("NotWorking")]
-#endif
[Test]
public void AddPermission_SetUnrestricted ()
{
[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 ()
{
[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 ()
{
Assert ("3.State", !copy.IsUnrestricted ());
AssertEquals ("3.Count", 2, copy.Count);
}
-#if NET_2_0
- [Category ("NotWorking")]
-#endif
+
[Test]
public void Copy_Unrestricted ()
{
ps2.FromXml (se);
Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
}
-#if NET_2_0
- [Category ("NotWorking")]
-#endif
+
[Test]
public void FromXmlOne ()
{
}
[Test]
-#if !NET_2_0
+#if NET_2_0
+ [ExpectedException (typeof (TypeLoadException))]
+#else
[ExpectedException (typeof (ArgumentException))]
#endif
public void FromXml_PermissionWithoutNamespace ()
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 ()
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]
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 ()
{
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 ()
{
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 ()
{
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 ()
{
AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
AssertEquals ("SecurityZone", SecurityZone.Intranet, zipr.SecurityZone);
}
-#if NET_2_0
- [Category ("NotWorking")]
-#endif
+
[Test]
public void SetPermission_Unrestricted ()
{
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 ()
{
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 ()
{
using NUnit.Framework;
-namespace MonoCasTests.System.Threading {
+namespace MonoCasTests.System.Security {
[TestFixture]
[Category ("CAS")]
+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
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
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
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
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
AssertEquals ("H16", t2.Ticks, t1.Ticks);\r
}\r
\r
+ [Category ("NotWorking")]\r
public void TestParse3 ()\r
{\r
string s = "Wednesday, 09 June 2004";\r
}\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
}\r
\r
[Test]\r
- [Category ("NotWorking")]
public void ParseAllowsQueerString ()\r
{\r
DateTime.Parse ("Sat,,,,,, 01 Oct 1994 03:00:00", CultureInfo.InvariantCulture);\r
}\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
System/AppDomainManager.cs
System/AppDomainSetup.cs
System/AppDomainUnloadedException.cs
-System/ApplicationActivator.cs
System/ApplicationException.cs
System/ApplicationId.cs
System/ApplicationIdentity.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
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
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
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
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
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
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
+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.
+++ /dev/null
-// 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);
- }
-}
--- /dev/null
+// 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);
+ }
+}
cs0119.cs
cs0121-3.cs NO ERROR
cs0122-12.cs
+cs0173-3.cs
cs0201.cs
cs0202.cs # new in GMCS
cs0229.cs NO ERROR
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
cs2007.cs
gcs0694.cs NO ERROR
gcs1644-2.cs NO ERROR
-
-cs0647.cs NO ERROR # not yet merged
+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
+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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-'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
-
+++ /dev/null
-'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
-
+++ /dev/null
-'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
-
+++ /dev/null
-'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
-
+++ /dev/null
-'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
-
+++ /dev/null
-'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
-
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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+'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
+
--- /dev/null
+'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
+
--- /dev/null
+'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
+
--- /dev/null
+'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
+
--- /dev/null
+'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
+
--- /dev/null
+'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
+
--- /dev/null
+'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
--- /dev/null
+'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
--- /dev/null
+'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
--- /dev/null
+'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
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;
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;
}
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
/// 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)
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);
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;
}
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) {
//
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;
{
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;
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);
}
;
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;
}
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);
}
;
;
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
}
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);
+ }
}
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)
stmtBlock.IsLateBindingRequired = true;
this.loc = loc;
this.isRetValRequired = this.isLeftHandSide = false;
+ this.memberName = "";
+ this.type_expr = null;
}
public ArrayList Arguments {
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;
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));
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;
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));
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;
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;
//
// 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 {
}
}
- 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;
}
}
// 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;
}
}
// 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)
{
//
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,
converted = e;
}
return converted;
+*/
+ return null;
}
void error152 (string n)
} 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;
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)
}
}
+/*
/// <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,
return all_return;
}
+*/
public override bool Resolve (EmitContext ec)
{
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;
}
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
//
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);
//
ec.LoopEnd = old_end;
ec.Switch = old_switch;
-
- return all_return;
+ return true;
}
}
//
// 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
//
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);
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);
}
+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
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++;
}
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);
}
//
ILGenerator ig = builder.GetILGenerator ();
aec.ig = ig;
- Parameters.LabelParameters (aec, builder, loc);
+ Parameters.LabelParameters (aec, builder);
//
// Adjust based on the computed state of the
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) {
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];
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;
}
}
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;
}
ec.IsStatic = false;
}
- Parameters.LabelParameters (ec, ConstructorBuilder, Location);
+ Parameters.LabelParameters (ec, ConstructorBuilder);
SourceMethod source = SourceMethod.Create (
Parent, ConstructorBuilder, block);
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;
{
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;
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;
{
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;
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);
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);
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);
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) ||
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);
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);
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);
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);
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
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
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) ||
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
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) ||
} 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) ||
} 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) ||
} 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) ||
} 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) ||
} 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) ||
} 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) ||
} 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) ||
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
{
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
{
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);
}
//
/// <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);
}
//
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);
}
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>
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
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);
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
//
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;
}
TypeManager.CSharpName (target_type) + "'");
return null;
}
-
+
Error_CannotConvertType (loc, original_expr_type, target_type);
return null;
}
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
{
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
{
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
{
}
| 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);
}
;
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
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
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;
} else
args = null;
current_local_parameters = new Parameters (
- args, indexer_parameters.ArrayParameter, lexer.Location);
+ args, indexer_parameters.ArrayParameter);
}
lexer.PropertyParsing = false;
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) {
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 ();
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 ();
{
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 ();
{
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 ();
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 ();
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
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
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);
}
}
;
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");
//
// 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,
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++;
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++;
}
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),
}
}
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
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,
public override void Emit ()
{
if (OptAttributes != null) {
- Parameters.LabelParameters (ec, InvokeBuilder, Location);
+ Parameters.LabelParameters (ec, InvokeBuilder);
OptAttributes.Emit (ec, this);
}
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
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 ()
{
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)
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,
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)
/// </summary>
public class ReturnParameter: ParameterBase {
public ReturnParameter (MethodBuilder mb, Location location):
- base (null)
+ base (null, location)
{
try {
builder = mb.DefineParameter (0, ParameterAttributes.None, "");
/// 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, "");
}
/// <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 {
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;
// <summary>
// Resolve is used in method definitions
// </summary>
- public bool Resolve (EmitContext ec, Location l)
+ public bool Resolve (EmitContext ec)
{
this.ec = ec;
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;
}
/// 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;
}
}
}
- 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;
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>
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;
}
}
}
- public Location Location {
- get { return loc; }
- }
-
public void ComputeSignature (EmitContext ec)
{
signature = "";
for (int i = 0; i < FixedParameters.Length; i++){
Parameter par = FixedParameters [i];
- signature += par.GetSignature (ec, loc);
+ signature += par.GetSignature (ec);
}
}
//
//
}
- void Error_DuplicateParameterName (string name)
+ void Error_DuplicateParameterName (string name, Location loc)
{
Report.Error (
100, loc, "The parameter name `" + name + "' is a duplicate");
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;
}
}
foreach (Parameter p in FixedParameters){
Type t = null;
- if (p.Resolve (ec, loc))
+ if (p.Resolve (ec))
t = p.ExternalType ();
else
failed = true;
}
if (extra > 0){
- if (ArrayParameter.Resolve (ec, loc))
+ if (ArrayParameter.Resolve (ec))
types [i] = ArrayParameter.ExternalType ();
else
failed = true;
// 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.
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);
}
}
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;
}
+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.
# 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
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 \
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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;
+ }
+}
+
--- /dev/null
+\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
--- /dev/null
+<?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;".\VSDependancies\include\glib-2.0\glib";.\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
+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.
#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)
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:
#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]) {
#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,
#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)
#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)
#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)
#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)
#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)
#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)
#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)
+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.
--- /dev/null
+<?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;"..\..\VSDependancies\include\glib-2.0\glib";..\..\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
+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
* 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);
}
#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);
}
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);
+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.
#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;
{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}
};
"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"
"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"
#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))
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);
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;
}
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)
MonoString *dll;
MonoString *dllentry;
guint32 charset;
+ guint32 extra_flags;
guint32 native_cc;
guint32 call_conv;
MonoBoolean init_locals;
guint32 nrefs;
gpointer *refs;
/* for PInvoke */
- int charset, lasterr, native_cc;
+ int charset, extra_flags, native_cc;
MonoString *dll, *dllentry;
} ReflectionMethodBuilder;
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;
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);
reflection_methodbuilder_from_ctor_builder (&rmb, mb);
mono_image_basic_method (&rmb, assembly);
+ mb->table_idx = *rmb.table_idx;
}
static char*
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);
{"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}
+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.
}
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)
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;
# 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
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:
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:
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
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
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
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:
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:
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:
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
# 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
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
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)
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
+ }
}
# (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) {
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);
}
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: */
+}
+
%%
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)
{
#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)
if (spec [MONO_INST_CLOB] == 'c') {
int j, s, dreg, dreg2;
- guint32 clob_mask;
+ guint64 clob_mask;
clob_mask = MONO_ARCH_CALLEE_REGS;
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);
}
#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)
typedef enum {
ArgInIReg,
- ArgInFloatSSEReg,
- ArgInDoubleSSEReg,
+ ArgInFloatReg,
ArgOnStack,
+ ArgValuetypeAddrInIReg,
ArgValuetypeInReg,
ArgNone /* only in pair_storage */
} ArgStorage;
(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:
*
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:
}
}
- 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;
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 */
gint32 *offsets;
CallInfo *cinfo;
+ mono_ia64_alloc_stacked_registers (m);
+
header = mono_method_get_header (m->method);
sig = mono_method_signature (m->method);
*/
/* 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 ();
gboolean inreg = TRUE;
MonoType *arg_type;
- NOT_IMPLEMENTED;
-
if (sig->hasthis && (i == 0))
arg_type = &mono_defaults.object_class->byval_arg;
else
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;
}
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;
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.
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
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:
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:
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;
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;
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;
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:
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;
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:
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;
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:
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;
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:
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:
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;
}
/* 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;
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:
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;
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;
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: */
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);
/*
* 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 ();
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;
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
}
}
}
- 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 */
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;
}
if (method->save_lmf) {
- NOT_IMPLEMENTED;
+ /* FIXME: */
}
ia64_codegen_close (code);
pos = 0;
if (method->save_lmf) {
- NOT_IMPLEMENTED;
+ /* FIXME: */
}
/* Load returned vtypes into registers if needed */
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);
gpointer*
mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs)
{
- NOT_IMPLEMENTED;
+ /* FIXME: */
return NULL;
}
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*
{
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);
#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)
#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)
#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;
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);
#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
#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__ */
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")
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")
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);
/*
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;
+ }
+
}
#define NOT_IMPLEMENTED g_assert_not_reached ()
+#define GP_SCRATCH_REG 31
+
/*
* get_unbox_trampoline:
* @m: method pointer
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;
}
/*
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;
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*
+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
--- /dev/null
+<?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=""..\..\VSDependancies\include\glib-2.0\glib";..\..\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
--- /dev/null
+<?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;"..\VSDependancies\include\glib-2.0\glib";..\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
+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
--- /dev/null
+<?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;"..\..\VSDependancies\include\glib-2.0\glib";..\..\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
--- /dev/null
+<?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;"..\VSDependancies\include\glib-2.0\glib";..\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
+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
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; \
--- /dev/null
+<?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;"..\..\VSDependancies\include\glib-2.0\glib";..\..\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
--- /dev/null
+<?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="..\..;"..\..\VSDependancies\include\glib-2.0\glib";..\..\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
--- /dev/null
+<?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="..\..;"..\..\VSDependancies\include\glib-2.0\glib";..\..\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
+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.
--- /dev/null
+<?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