Bump corefx
authorMarek Safar <marek.safar@gmail.com>
Mon, 7 Aug 2017 14:39:39 +0000 (16:39 +0200)
committerMarek Safar <marek.safar@gmail.com>
Thu, 5 Oct 2017 20:43:54 +0000 (22:43 +0200)
32 files changed:
external/corefx
mcs/build/library.make
mcs/build/rules.make
mcs/build/tests.make
mcs/class/Makefile
mcs/class/Microsoft.CSharp/Microsoft.CSharp.dll.sources
mcs/class/Microsoft.CSharp/corefx/SR.cs
mcs/class/Mono.Debugger.Soft/Makefile
mcs/class/System.Drawing/System.Drawing.Drawing2D/LinearGradientBrush.cs
mcs/class/System.Drawing/System.Drawing.Drawing2D/PathGradientBrush.cs
mcs/class/System.Drawing/System.Drawing.dll.sources
mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs
mcs/class/System.Drawing/System.Drawing_test.dll.sources
mcs/class/System.Drawing/Test/System.Drawing/GDIPlusTest.cs
mcs/class/System.Drawing/corefx/SR.cs
mcs/class/System.Numerics/System.Numerics_xtest.dll.sources
mcs/class/System/System.IO.Compression/DeflateStream.cs
mcs/class/corlib/Makefile
mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.cs [new file with mode: 0644]
mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.il [new file with mode: 0644]
mcs/class/corlib/corefx/SR.cs
mcs/class/corlib/corert/Stream.cs [new file with mode: 0644]
mcs/class/corlib/corlib.dll.sources
mcs/class/corlib/corlib_xtest.dll.sources
mcs/class/corlib/il/Makefile [new file with mode: 0644]
mcs/class/corlib/il/il.make [new file with mode: 0644]
mcs/class/referencesource/mscorlib/system/double.cs
mcs/class/referencesource/mscorlib/system/io/stream.cs
mcs/class/referencesource/mscorlib/system/single.cs
mcs/class/referencesource/mscorlib/system/throwhelper.cs
mcs/class/test-helpers/PlatformDetection.cs [new file with mode: 0644]
mcs/tools/cil-stringreplacer/cil-stringreplacer.cs

index cb1b049c95227465c1791b857cb5ba86385d9f29..eed24cf38a93e59638405a4c92f610dca02be1ec 160000 (submodule)
@@ -1 +1 @@
-Subproject commit cb1b049c95227465c1791b857cb5ba86385d9f29
+Subproject commit eed24cf38a93e59638405a4c92f610dca02be1ec
index 76a49a7220bc29413fa32a5c16ff2ae254d96dde..2b9c75cf414491ea9051fb03ff62e354b1c9ca83 100644 (file)
@@ -58,6 +58,7 @@ the_libdir_base = $(topdir)/class/$(lib_dir)/$(PROFILE_DIRECTORY)/$(if $(LIBRARY
 ifdef RESOURCE_STRINGS
 ifneq (basic, $(PROFILE))
 RESOURCE_STRINGS_FILES += $(RESOURCE_STRINGS:%=--resourcestrings:%)
+IL_REPLACE_FILES += $(IL_REPLACE:%=--ilreplace:%)
 endif
 endif
 
@@ -324,10 +325,10 @@ endif
 
 ifndef NO_BUILD
 
-$(build_lib): $(response) $(sn) $(BUILT_SOURCES) $(build_libdir)/.stamp $(GEN_RESOURCE_DEPS)
+$(build_lib): $(response) $(sn) $(BUILT_SOURCES) $(build_libdir)/.stamp $(GEN_RESOURCE_DEPS) $(MODULE_DEPS)
        $(LIBRARY_COMPILE) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS) $(KEYFILE_MCS_FLAGS) $(GEN_RESOURCE_FLAGS) -target:library -out:$@ $(BUILT_SOURCES_cmdline) @$(response)
 ifdef RESOURCE_STRINGS_FILES
-       $(Q) $(STRING_REPLACER) $(RESOURCE_STRINGS_FILES) $@
+       $(Q) $(STRING_REPLACER) $(RESOURCE_STRINGS_FILES) $(IL_REPLACE_FILES) $@
 endif
        $(Q) $(SN) -R $@ $(LIBRARY_SNK)
 
index 349599433af11241e0a6c21c0d9a4a881931c5ce..8fce9aea29e32dc90ef41c0220c83099733445c5 100644 (file)
@@ -27,8 +27,12 @@ Q_MCS=$(if $(V),,@echo "$(if $(MCS_MODE),MCS,CSC)     [$(intermediate)$(PROFILE_
 Q_AOT=$(if $(V),,@echo "AOT     [$(intermediate)$(PROFILE_DIRECTORY)] $(notdir $(@))";)
 
 ifndef BUILD_TOOLS_PROFILE
+ifeq ($(PROFILE),basic)
+BUILD_TOOLS_PROFILE = basic
+else
 BUILD_TOOLS_PROFILE = build
 endif
+endif
 
 USE_MCS_FLAGS = /codepage:$(CODEPAGE) /nologo /noconfig /deterministic $(LOCAL_MCS_FLAGS) $(PLATFORM_MCS_FLAGS) $(PROFILE_MCS_FLAGS) $(MCS_FLAGS)
 USE_MBAS_FLAGS = /codepage:$(CODEPAGE) $(LOCAL_MBAS_FLAGS) $(PLATFORM_MBAS_FLAGS) $(PROFILE_MBAS_FLAGS) $(MBAS_FLAGS)
@@ -44,14 +48,15 @@ INSTALL_BIN = $(INSTALL) -c -m 755
 INSTALL_LIB = $(INSTALL_BIN)
 MKINSTALLDIRS = $(SHELL) $(topdir)/mkinstalldirs
 INTERNAL_MBAS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/mbas/mbas.exe
-INTERNAL_ILASM = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(PROFILE)/ilasm.exe
 INTERNAL_CSC_LOCATION = $(CSC_LOCATION)
 
 # Using CSC_SDK_PATH_DISABLED for sanity check that all references have path specified
 INTERNAL_CSC = CSC_SDK_PATH_DISABLED= $(RUNTIME) $(RUNTIME_FLAGS) $(CSC_RUNTIME_FLAGS) $(INTERNAL_CSC_LOCATION)
 
-RESGEN = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(RESGEN_EXE) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/resgen.exe
+RESGEN = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/resgen.exe
 STRING_REPLACER = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/cil-stringreplacer.exe
+ILASM = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/ilasm.exe
+
 
 depsdir = $(topdir)/build/deps
 
index 5a8bc7d0e481fc39c498d5a72fd1e9748f5897fa..054de2582a1750be5601bc6fb4bc377464e07e5b 100644 (file)
@@ -22,7 +22,7 @@ ifndef NO_TEST
 test_nunit_lib = nunitlite.dll
 xunit_core := xunit.core xunit.abstractions xunit.assert Xunit.NetCore.Extensions
 xunit_deps := System.Runtime
-xunit_src  := $(patsubst %,$(topdir)/../external/xunit-binaries/%,BenchmarkAttribute.cs BenchmarkDiscover.cs)
+xunit_src  := $(patsubst %,$(topdir)/../external/xunit-binaries/%,BenchmarkAttribute.cs BenchmarkDiscover.cs) $(topdir)/../mcs/class/test-helpers/PlatformDetection.cs
 xunit_class_deps := 
 
 xunit_libs_ref = $(patsubst %,-r:$(topdir)/../external/xunit-binaries/%.dll,$(xunit_core))
index 7d9329e02da24d8cb2f7b74cfb52d703547b4933..00f3212dfad56763be0c918945d9bca3b4d74279 100644 (file)
@@ -20,7 +20,11 @@ basic_SUBDIRS := \
        System.Xml.Linq \
        Mono.Cecil \
        $(MCS_MODE_dirs) \
-       ../tools/cil-stringreplacer
+       Mono.CompilerServices.SymbolWriter      \
+       PEAPI \
+       ../tools/cil-stringreplacer \
+       ../ilasm \
+       corlib/il
 
 build_SUBDIRS :=  \
        corlib \
index e80529c65344d14996c3ff4232732f6ebb696d67..6ef6cdf14780e8c30561a2f91ece8ebfa1c04ebe 100644 (file)
@@ -25,15 +25,10 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpSetMemberBinder.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpUnaryOperationBinder.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Error.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/CController.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/CError.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/CErrorFactory.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/CParameterizedError.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/ErrorCode.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/ErrorFacts.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/ErrorFmt.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/ErrorHandling.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/IErrorSink.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/MessageID.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs
@@ -41,7 +36,6 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ICSharpInvokeOrInvokeMemberBinder.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ResetBindException.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinderController.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinderException.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinderExtensions.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinderInternalCompilerException.cs
@@ -69,7 +63,6 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinderResult.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/LangCompiler.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookupResults.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodIterator.cs
@@ -89,7 +82,6 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/LocalVariableSymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/MethodOrPropertySymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/MethodSymbol.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/MiscSymFactory.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/NamespaceOrAggregateSymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/NamespaceSymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/ParentSymbol.cs
@@ -102,9 +94,7 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolMask.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolTable.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymFactory.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymFactoryBase.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/TypeParameterSymbol.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/UnresolvedAggregateSymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/VariableSymbol.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs
@@ -118,7 +108,6 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprOperator.cs
@@ -150,12 +139,10 @@ corefx/SR.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArgumentListType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/BoundLambdaType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ErrorType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/MethodGroupType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/NullableType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/NullType.cs
-../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/OpenTypePlaceholderType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ParameterModifierType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PointerType.cs
 ../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs
index b0889c45c1d4238aad97fef62ca16fa46df8892f..7d50ecad4508884f9fa7651368ecfa40913a6766 100644 (file)
@@ -43,16 +43,12 @@ partial class SR
        public const string AssgReadonlyStatic = "A static readonly field cannot be assigned to (except in a static constructor or a variable initializer)";
        public const string RefReadonlyStatic = "A static readonly field cannot be passed ref or out (except in a static constructor)";
        public const string AssgReadonlyProp = "Property or indexer '{0}' cannot be assigned to -- it is read only";
-       public const string AbstractBaseCall = "Cannot call an abstract base member: '{0}'";
        public const string RefProperty = "A property or indexer may not be passed as an out or ref parameter";
        public const string UnsafeNeeded = "Dynamic calls cannot be used in conjunction with pointers";
        public const string BadBoolOp = "In order to be applicable as a short circuit operator a user-defined logical operator ('{0}') must have the same return type as the type of its 2 parameters";
        public const string MustHaveOpTF = "The type ('{0}') must contain declarations of operator true and operator false";
        public const string ConstOutOfRangeChecked = "Constant value '{0}' cannot be converted to a '{1}' (use 'unchecked' syntax to override)";
        public const string AmbigMember = "Ambiguity between '{0}' and '{1}'";
-       public const string SizeofUnsafe = "'{0}' does not have a predefined size, therefore sizeof can only be used in an unsafe context (consider using System.Runtime.InteropServices.Marshal.SizeOf)";
-       public const string CallingFinalizeDepracated = "Destructors and object.Finalize cannot be called directly. Consider calling IDisposable.Dispose if available.";
-       public const string CallingBaseFinalizeDeprecated = "Do not directly call your base class Finalize method. It is called automatically from your destructor.";
        public const string NoImplicitConvCast = "Cannot implicitly convert type '{0}' to '{1}'. An explicit conversion exists (are you missing a cast?)";
        public const string InaccessibleGetter = "The property or indexer '{0}' cannot be used in this context because the get accessor is inaccessible";
        public const string InaccessibleSetter = "The property or indexer '{0}' cannot be used in this context because the set accessor is inaccessible";
@@ -64,7 +60,6 @@ partial class SR
        public const string GenericConstraintNotSatisfiedRefType = "The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. There is no implicit reference conversion from '{3}' to '{1}'.";
        public const string GenericConstraintNotSatisfiedNullableEnum = "The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. The nullable type '{3}' does not satisfy the constraint of '{1}'.";
        public const string GenericConstraintNotSatisfiedNullableInterface = "The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. The nullable type '{3}' does not satisfy the constraint of '{1}'. Nullable types can not satisfy any interface constraints.";
-       public const string GenericConstraintNotSatisfiedTyVar = "The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. There is no boxing conversion or type parameter conversion from '{3}' to '{1}'.";
        public const string GenericConstraintNotSatisfiedValType = "The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. There is no boxing conversion from '{3}' to '{1}'.";
        public const string TypeVarCantBeNull = "Cannot convert null to type parameter '{0}' because it could be a non-nullable value type. Consider using 'default({0})' instead.";
        public const string BadRetType = "'{1} {0}' has the wrong return type";
@@ -73,21 +68,13 @@ partial class SR
        public const string RefConstraintNotSatisfied = "The type '{2}' must be a reference type in order to use it as parameter '{1}' in the generic type or method '{0}'";
        public const string ValConstraintNotSatisfied = "The type '{2}' must be a non-nullable value type in order to use it as parameter '{1}' in the generic type or method '{0}'";
        public const string AmbigUDConv = "Ambiguous user defined conversions '{0}' and '{1}' when converting from '{2}' to '{3}'";
-       public const string PredefinedTypeNotFound = "Predefined type '{0}' is not defined or imported";
        public const string BindToBogus = "'{0}' is not supported by the language";
        public const string CantCallSpecialMethod = "'{0}': cannot explicitly call operator or accessor";
-       public const string BogusType = "'{0}' is a type not supported by the language";
-       public const string MissingPredefinedMember = "Missing compiler required member '{0}.{1}'";
-       public const string LiteralDoubleCast = "Literal of type double cannot be implicitly converted to type '{1}'; use an '{0}' suffix to create a literal of this type";
        public const string ConvertToStaticClass = "Cannot convert to static type '{0}'";
        public const string GenericArgIsStaticClass = "'{0}': static types cannot be used as type arguments";
-       public const string PartialMethodToDelegate = "Cannot create delegate from method '{0}' because it is a partial method without an implementing declaration";
        public const string IncrementLvalueExpected = "The operand of an increment or decrement operator must be a variable, property or indexer";
-       public const string NoSuchMemberOrExtension = "'{0}' does not contain a definition for '{1}' and no extension method '{1}' accepting a first argument of type '{0}' could be found (are you missing a using directive or an assembly reference?)";
-       public const string ValueTypeExtDelegate = "Extension methods '{0}' defined on value type '{1}' cannot be used to create delegates";
        public const string BadArgCount = "No overload for method '{0}' takes '{1}' arguments";
        public const string BadArgTypes = "The best overloaded method match for '{0}' has some invalid arguments";
-       public const string BadArgType = "Argument '{0}': cannot convert from '{1}' to '{2}'";
        public const string RefLvalueExpected = "A ref or out argument must be an assignable variable";
        public const string BadProtectedAccess = "Cannot access protected member '{0}' via a qualifier of type '{1}'; the qualifier must be of type '{2}' (or derived from it)";
        public const string BindToBogusProp2 = "Property, indexer, or event '{0}' is not supported by the language; try directly calling accessor methods '{1}' or '{2}'";
@@ -97,8 +84,6 @@ partial class SR
        public const string AssgReadonlyLocal = "Cannot assign to '{0}' because it is read-only";
        public const string RefReadonlyLocal = "Cannot pass '{0}' as a ref or out argument because it is read-only";
        public const string ReturnNotLValue = "Cannot modify the return value of '{0}' because it is not a variable";
-       public const string BadArgExtraRef = "Argument '{0}' should not be passed with the '{1}' keyword";
-       public const string BadArgRef = "Argument '{0}' must be passed with the '{1}' keyword";
        public const string AssgReadonly2 = "Members of readonly field '{0}' cannot be modified (except in a constructor or a variable initializer)";
        public const string RefReadonly2 = "Members of readonly field '{0}' cannot be passed ref or out (except in a constructor)";
        public const string AssgReadonlyStatic2 = "Fields of static readonly field '{0}' cannot be assigned to (except in a static constructor or a variable initializer)";
@@ -107,15 +92,13 @@ partial class SR
        public const string RefReadonlyLocalCause = "Cannot pass '{0}' as a ref or out argument because it is a '{1}'";
        public const string DelegateOnNullable = "Cannot bind delegate to '{0}' because it is a member of 'System.Nullable<T>'";
        public const string BadCtorArgCount = "'{0}' does not contain a constructor that takes '{1}' arguments";
-       public const string BadExtensionArgTypes = "'{0}' does not contain a definition for '{1}' and the best extension method overload '{2}' has some invalid arguments";
-       public const string BadInstanceArgType = "Instance argument: cannot convert from '{0}' to '{1}'";
-       public const string BadArgTypesForCollectionAdd = "The best overloaded Add method '{0}' for the collection initializer has some invalid arguments";
-       public const string InitializerAddHasParamModifiers = "The best overloaded method match '{0}' for the collection initializer element cannot be used. Collection initializer 'Add' methods cannot have ref or out parameters.";
        public const string NonInvocableMemberCalled = "Non-invocable member '{0}' cannot be used like a method.";
        public const string NamedArgumentSpecificationBeforeFixedArgument = "Named argument specifications must appear after all fixed arguments have been specified";
        public const string BadNamedArgument = "The best overload for '{0}' does not have a parameter named '{1}'";
        public const string BadNamedArgumentForDelegateInvoke = "The delegate '{0}' does not have a parameter named '{1}'";
        public const string DuplicateNamedArgument = "Named argument '{0}' cannot be specified multiple times";
        public const string NamedArgumentUsedInPositional = "Named argument '{0}' specifies a parameter for which a positional argument has already been given";
-       public const string TypeArgumentRequiredForStaticCall = "The first argument to dynamically-bound static call must be a Type";
+       public const string TypeArgumentRequiredForStaticCall = "The first argument to dynamically-bound static or constructor call must be a Type";
+       public const string DynamicArgumentNeedsValue = "The runtime binder cannot bind a metaobject without a value";
+       public const string BindingNameCollision = "More than one type in the binding has the same full name.";
 }
index 5e926275772e8c6cb44d5418ebdecd3dbb75754d..4fb6f306a97581ed85f326de823f67e982086148 100644 (file)
@@ -26,7 +26,7 @@ dtest-app.exe: Test/dtest-app.cs $(TEST_HELPERS_SOURCES)
        $(CSCOMPILE) -r:$(topdir)/class/lib/$(PROFILE)/System.Core.dll -r:$(topdir)/class/lib/$(PROFILE)/System.dll -out:$@ -unsafe $(PLATFORM_DEBUG_FLAGS) -optimize- Test/dtest-app.cs $(TEST_HELPERS_SOURCES)
 
 dtest-excfilter.exe: Test/dtest-excfilter.il
-       MONO_PATH=$(topdir)/class/lib/$(PROFILE) $(INTERNAL_ILASM) -out:$@ /exe /debug Test/dtest-excfilter.il
+       $(ILASM) -out:$@ /exe /debug Test/dtest-excfilter.il
 
 else
 
index d2e645d2ccbd23152f27b54043cf6ad60308cdd5..2490309a275110cec9e970b9f05d6abaef41783d 100644 (file)
@@ -29,6 +29,7 @@
 //
 
 using System.ComponentModel;
+using System.Runtime.InteropServices;
 
 namespace System.Drawing.Drawing2D {
 
@@ -386,7 +387,7 @@ namespace System.Drawing.Drawing2D {
                public override object Clone ()
                {
                        IntPtr clonePtr;
-                       Status status = GDIPlus.GdipCloneBrush (NativeBrush, out clonePtr);
+                       Status status = (Status) GDIPlus.GdipCloneBrush (new HandleRef (this, NativeBrush), out clonePtr);
                        GDIPlus.CheckStatus (status);
 
                        return new LinearGradientBrush (clonePtr);
index addf2366b9277767f2422b551c25870ed6c8360a..abd6fc1a34659787cb60f923f341f259a9b87f93 100644 (file)
@@ -30,6 +30,7 @@
 //
 
 using System.ComponentModel;
+using System.Runtime.InteropServices;
 
 namespace System.Drawing.Drawing2D {
 
@@ -383,7 +384,7 @@ namespace System.Drawing.Drawing2D {
                public override object Clone ()
                {
                        IntPtr clonePtr;
-                       Status status = GDIPlus.GdipCloneBrush (NativeBrush, out clonePtr);
+                       Status status = (Status) GDIPlus.GdipCloneBrush (new HandleRef(this, NativeBrush), out clonePtr);
                        GDIPlus.CheckStatus (status);
 
                        PathGradientBrush clone = new PathGradientBrush (clonePtr);
index 18e12edb898da2c47d1990f25950687fc4c23a49..93cfada694a63ce8ba53eb77ed6f57f8fdcb4447 100755 (executable)
@@ -1,6 +1,10 @@
-corefx/SR.cs
 System.Drawing/SR.cs
 Assembly/AssemblyInfo.cs
+
+System.Drawing/gdipFunctions.cs
+
+corefx/SR.cs
+
 ../../build/common/Consts.cs
 ../../build/common/Locale.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/ClientUtils.cs
@@ -13,7 +17,6 @@ Assembly/AssemblyInfo.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPRECT.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPRECTF.cs
 ../../../external/corefx/src/System.Drawing.Common/src/AssemblyRef.cs
-../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/ISystemEventTracker.cs
 System.Drawing/Bitmap.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/BitmapSuffixInSameAssemblyAttribute.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/BitmapSuffixInSatelliteAssemblyAttribute.cs
@@ -221,3 +224,7 @@ System.Drawing.Text/PrivateFontCollection.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Text/InstalledFontCollection.cs
 ../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Text/TextRenderingHint.cs
 
+../../../external/corefx/src/Common/src/System/Drawing/ColorTable.cs
+../../../external/corefx/src/Common/src/System/Drawing/ColorUtil.netcoreapp21.cs
+
+../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCap.Unix.cs
index af722ecbcc6509e3dd04c173ffb83c20a0c98531..c42b38a20bc841fd273be353c3a5e9f7e37d830b 100644 (file)
@@ -43,10 +43,18 @@ using System.Runtime.InteropServices.ComTypes;
 
 namespace System.Drawing
 {
+       internal partial class SafeNativeMethods
+       {
+               internal partial class Gdip : GDIPlus
+               {
+
+               }
+       }
+
        /// <summary>
        /// GDI+ API Functions
        /// </summary>
-       internal static class GDIPlus {
+       internal /*static*/ class GDIPlus {
                public const int FACESIZE = 32;
                public const int LANG_NEUTRAL = 0;
                public static IntPtr Display = IntPtr.Zero;
@@ -270,11 +278,11 @@ namespace System.Drawing
 
                // Brush functions
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCloneBrush (IntPtr brush, out IntPtr clonedBrush);
+               static internal extern int GdipCloneBrush (HandleRef brush, out IntPtr clonedBrush);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipDeleteBrush (IntPtr brush);
+               static internal extern int GdipDeleteBrush (HandleRef brush);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetBrushType (IntPtr brush, out BrushType type);
+               static internal extern int GdipGetBrushType (HandleRef brush, out BrushType type);
 
 
                // Region functions
@@ -384,53 +392,53 @@ namespace System.Drawing
 
                // Solid brush functions
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateSolidFill (int color, out IntPtr brush);
+               static internal extern int GdipCreateSolidFill (int color, out IntPtr brush);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetSolidFillColor (IntPtr brush, out int color);
+               static internal extern int GdipGetSolidFillColor (HandleRef brush, out int color);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipSetSolidFillColor (IntPtr brush, int color);
+               static internal extern int GdipSetSolidFillColor (HandleRef brush, int color);
 
                // Hatch Brush functions
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateHatchBrush (HatchStyle hatchstyle, int foreColor, int backColor, out IntPtr brush);
+               static internal extern int GdipCreateHatchBrush (/*HatchStyle*/ int hatchstyle, int foreColor, int backColor, out IntPtr brush);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetHatchStyle (IntPtr brush, out HatchStyle hatchstyle);
+               static internal extern int GdipGetHatchStyle (HandleRef brush, out /*HatchStyle*/ int hatchstyle);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetHatchForegroundColor (IntPtr brush, out int foreColor);
+               static internal extern int GdipGetHatchForegroundColor (HandleRef brush, out int foreColor);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetHatchBackgroundColor (IntPtr brush, out int backColor);
+               static internal extern int GdipGetHatchBackgroundColor (HandleRef brush, out int backColor);
 
                // Texture brush functions
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetTextureImage (IntPtr texture, out IntPtr image);
+               static internal extern int GdipGetTextureImage (HandleRef texture, out IntPtr image);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateTexture (IntPtr image, WrapMode wrapMode, out IntPtr texture);
+               static internal extern int GdipCreateTexture (HandleRef image, /*WrapMode*/ int wrapMode, out IntPtr texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateTextureIAI (IntPtr image, IntPtr imageAttributes, int x, int y, int width, int height, out IntPtr texture);
+               static internal extern int GdipCreateTextureIAI (HandleRef image, HandleRef imageAttributes, int x, int y, int width, int height, out IntPtr texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateTextureIA (IntPtr image, IntPtr imageAttributes, float x, float y, float width, float height, out IntPtr texture);
+               static internal extern int GdipCreateTextureIA (HandleRef image, HandleRef imageAttributes, float x, float y, float width, float height, out IntPtr texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateTexture2I (IntPtr image, WrapMode wrapMode, int x, int y, int width, int height, out IntPtr texture);
+               static internal extern int GdipCreateTexture2I (HandleRef image, /*WrapMode*/ int wrapMode, int x, int y, int width, int height, out IntPtr texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipCreateTexture2 (IntPtr image, WrapMode wrapMode, float x, float y, float width, float height, out IntPtr texture);
+               static internal extern int GdipCreateTexture2 (HandleRef image, /*WrapMode*/ int wrapMode, float x, float y, float width, float height, out IntPtr texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetTextureTransform (IntPtr texture, IntPtr matrix);
+               static internal extern int GdipGetTextureTransform (HandleRef texture, HandleRef matrix);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipSetTextureTransform (IntPtr texture, IntPtr matrix);
+               static internal extern int GdipSetTextureTransform (HandleRef texture, HandleRef matrix);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetTextureWrapMode (IntPtr texture, out WrapMode wrapMode);
+               static internal extern int GdipGetTextureWrapMode (HandleRef texture, out /*WrapMode*/ int wrapMode);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipSetTextureWrapMode (IntPtr texture, WrapMode wrapMode);
+               static internal extern int GdipSetTextureWrapMode (HandleRef texture, /*WrapMode*/ int wrapMode);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipMultiplyTextureTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
+               static internal extern int GdipMultiplyTextureTransform (HandleRef texture, HandleRef matrix, MatrixOrder order);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipResetTextureTransform (IntPtr texture);
+               static internal extern int GdipResetTextureTransform (HandleRef texture);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipRotateTextureTransform (IntPtr texture, float angle, MatrixOrder order);
+               static internal extern int GdipRotateTextureTransform (HandleRef texture, float angle, MatrixOrder order);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipScaleTextureTransform (IntPtr texture, float sx, float sy, MatrixOrder order);
+               static internal extern int GdipScaleTextureTransform (HandleRef texture, float sx, float sy, MatrixOrder order);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipTranslateTextureTransform (IntPtr texture, float dx, float dy, MatrixOrder order);
+               static internal extern int GdipTranslateTextureTransform (HandleRef texture, float dx, float dy, MatrixOrder order);
 
                // PathGradientBrush functions
                [DllImport(GdiPlus)]
@@ -640,41 +648,41 @@ namespace System.Drawing
                static internal extern Status GdipGetRenderingOrigin (IntPtr graphics, out int x, out int y);
                [DllImport (GdiPlus)]
                static internal extern Status GdipSetRenderingOrigin (IntPtr graphics, int x, int y);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipCloneBitmapArea (float x, float y, float width, float height, PixelFormat format, IntPtr original, out IntPtr bitmap);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipCloneBitmapAreaI (int x, int y, int width, int height, PixelFormat format, IntPtr original, out IntPtr bitmap);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipResetWorldTransform (IntPtr graphics);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipSetWorldTransform (IntPtr graphics, IntPtr matrix);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipGetWorldTransform (IntPtr graphics, IntPtr matrix);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipScaleWorldTransform (IntPtr graphics, float sx, float sy, MatrixOrder order);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipGraphicsClear(IntPtr graphics, int argb);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawClosedCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawClosedCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawClosedCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawClosedCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurve3(IntPtr graphics, IntPtr pen, PointF [] points, int count, int offset, int numberOfSegments, float tension);
-               [DllImport(GdiPlus)]
-               internal static extern Status GdipDrawCurve3I(IntPtr graphics, IntPtr pen, Point [] points, int count, int offset, int numberOfSegments, float tension);
-               [DllImport(GdiPlus)]
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipCloneBitmapArea (float x, float y, float width, float height, PixelFormat format, IntPtr original, out IntPtr bitmap);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipCloneBitmapAreaI (int x, int y, int width, int height, PixelFormat format, IntPtr original, out IntPtr bitmap);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipResetWorldTransform (IntPtr graphics);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipSetWorldTransform (IntPtr graphics, IntPtr matrix);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipGetWorldTransform (IntPtr graphics, IntPtr matrix);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipScaleWorldTransform (IntPtr graphics, float sx, float sy, MatrixOrder order);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipGraphicsClear(IntPtr graphics, int argb);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawClosedCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawClosedCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawClosedCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawClosedCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurve3(IntPtr graphics, IntPtr pen, PointF [] points, int count, int offset, int numberOfSegments, float tension);
+               [DllImport(GdiPlus)]
+               internal static extern Status GdipDrawCurve3I(IntPtr graphics, IntPtr pen, Point [] points, int count, int offset, int numberOfSegments, float tension);
+               [DllImport(GdiPlus)]
                internal static extern Status GdipSetClipRect(IntPtr graphics, float x, float y, float width, float height, CombineMode combineMode);
                [DllImport(GdiPlus)]
                internal static extern Status GdipSetClipRectI(IntPtr graphics, int x, int y, int width, int height, CombineMode combineMode);
@@ -897,51 +905,51 @@ namespace System.Drawing
 
                // CustomLineCap functions
                [DllImport(GdiPlus)]
-               internal static extern Status GdipCreateCustomLineCap (IntPtr fillPath, IntPtr strokePath, LineCap baseCap, float baseInset, out IntPtr customCap);
+               internal static extern int GdipCreateCustomLineCap (HandleRef fillPath, HandleRef strokePath, LineCap baseCap, float baseInset, out IntPtr customCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipDeleteCustomLineCap (IntPtr customCap);
+               internal static extern int GdipDeleteCustomLineCap (HandleRef customCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipCloneCustomLineCap (IntPtr customCap, out IntPtr clonedCap);
+               internal static extern int GdipCloneCustomLineCap (HandleRef customCap, out IntPtr clonedCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetCustomLineCapStrokeCaps (IntPtr customCap, LineCap startCap, LineCap endCap);
+               internal static extern int GdipSetCustomLineCapStrokeCaps (HandleRef customCap, LineCap startCap, LineCap endCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetCustomLineCapStrokeCaps (IntPtr customCap, out LineCap startCap, out LineCap endCap);
+               internal static extern int GdipGetCustomLineCapStrokeCaps (HandleRef customCap, out LineCap startCap, out LineCap endCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetCustomLineCapStrokeJoin (IntPtr customCap, LineJoin lineJoin);
+               internal static extern int GdipSetCustomLineCapStrokeJoin (HandleRef customCap, LineJoin lineJoin);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetCustomLineCapStrokeJoin (IntPtr customCap, out LineJoin lineJoin);
+               internal static extern int GdipGetCustomLineCapStrokeJoin (HandleRef customCap, out LineJoin lineJoin);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetCustomLineCapBaseCap (IntPtr customCap, LineCap baseCap);
+               internal static extern int GdipSetCustomLineCapBaseCap (HandleRef customCap, LineCap baseCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetCustomLineCapBaseCap (IntPtr customCap, out LineCap baseCap);
+               internal static extern int GdipGetCustomLineCapBaseCap (HandleRef customCap, out LineCap baseCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetCustomLineCapBaseInset (IntPtr customCap, float inset);
+               internal static extern int GdipSetCustomLineCapBaseInset (HandleRef customCap, float inset);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetCustomLineCapBaseInset (IntPtr customCap, out float inset);
+               internal static extern int GdipGetCustomLineCapBaseInset (HandleRef customCap, out float inset);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetCustomLineCapWidthScale (IntPtr customCap, float widthScale);
+               internal static extern int GdipSetCustomLineCapWidthScale (HandleRef customCap, float widthScale);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetCustomLineCapWidthScale (IntPtr customCap, out float widthScale);
+               internal static extern int GdipGetCustomLineCapWidthScale (HandleRef customCap, out float widthScale);
 
                // AdjustableArrowCap functions
                [DllImport(GdiPlus)]
-               internal static extern Status GdipCreateAdjustableArrowCap (float height, float width, bool isFilled, out IntPtr arrowCap);
+               internal static extern int GdipCreateAdjustableArrowCap (float height, float width, bool isFilled, out IntPtr arrowCap);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetAdjustableArrowCapHeight (IntPtr arrowCap, float height);
+               internal static extern int GdipSetAdjustableArrowCapHeight (HandleRef arrowCap, float height);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetAdjustableArrowCapHeight (IntPtr arrowCap, out float height);
+               internal static extern int GdipGetAdjustableArrowCapHeight (HandleRef arrowCap, out float height);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetAdjustableArrowCapWidth (IntPtr arrowCap, float width);
+               internal static extern int GdipSetAdjustableArrowCapWidth (HandleRef arrowCap, float width);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetAdjustableArrowCapWidth (IntPtr arrowCap, out float width);
+               internal static extern int GdipGetAdjustableArrowCapWidth (HandleRef arrowCap, out float width);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetAdjustableArrowCapMiddleInset (IntPtr arrowCap, float middleInset);
+               internal static extern int GdipSetAdjustableArrowCapMiddleInset (HandleRef arrowCap, float middleInset);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetAdjustableArrowCapMiddleInset (IntPtr arrowCap, out float middleInset);
+               internal static extern int GdipGetAdjustableArrowCapMiddleInset (HandleRef arrowCap, out float middleInset);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipSetAdjustableArrowCapFillState (IntPtr arrowCap, bool isFilled);
+               internal static extern int GdipSetAdjustableArrowCapFillState (HandleRef arrowCap, bool isFilled);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipGetAdjustableArrowCapFillState (IntPtr arrowCap, out bool isFilled);
+               internal static extern int GdipGetAdjustableArrowCapFillState (HandleRef arrowCap, out bool isFilled);
 
 
                [DllImport(GdiPlus)]
@@ -1360,82 +1368,82 @@ namespace System.Drawing
 
                // GraphicsPathIterator
                [DllImport(GdiPlus)]
-               internal static extern Status GdipCreatePathIter (out IntPtr iterator, IntPtr path);
+               internal static extern int GdipCreatePathIter (out IntPtr iterator, HandleRef path);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterGetCount (IntPtr iterator, out int count);
+               internal static extern int GdipPathIterGetCount (HandleRef iterator, out int count);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterGetSubpathCount (IntPtr iterator, out int count);
+               internal static extern int GdipPathIterGetSubpathCount (HandleRef iterator, out int count);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipDeletePathIter (IntPtr iterator);
+               internal static extern int GdipDeletePathIter (HandleRef iterator);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterCopyData (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int startIndex, int endIndex);
+               internal static extern int GdipPathIterCopyData (HandleRef iterator, out int resultCount, /*PointF[]*/ IntPtr points, byte [] types, int startIndex, int endIndex);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterEnumerate (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int count);
+               internal static extern int GdipPathIterEnumerate (HandleRef iterator, out int resultCount, /*PointF[]*/ IntPtr points, byte [] types, int count);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterHasCurve (IntPtr iterator, out bool curve);
+               internal static extern int GdipPathIterHasCurve (HandleRef iterator, out bool curve);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterNextMarkerPath (IntPtr iterator, out int resultCount, IntPtr path);
+               internal static extern int GdipPathIterNextMarkerPath (HandleRef iterator, out int resultCount, HandleRef path);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterNextMarker (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex);
+               internal static extern int GdipPathIterNextMarker (HandleRef iterator, out int resultCount, out int startIndex, out int endIndex);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterNextPathType (IntPtr iterator, out int resultCount, out byte pathType, out int startIndex, out int endIndex);
+               internal static extern int GdipPathIterNextPathType (HandleRef iterator, out int resultCount, out byte pathType, out int startIndex, out int endIndex);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterNextSubpathPath (IntPtr iterator, out int resultCount, IntPtr path, out bool isClosed);
+               internal static extern int GdipPathIterNextSubpathPath (HandleRef iterator, out int resultCount, HandleRef path, out bool isClosed);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterNextSubpath (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex, out bool isClosed);
+               internal static extern int GdipPathIterNextSubpath (HandleRef iterator, out int resultCount, out int startIndex, out int endIndex, out bool isClosed);
                [DllImport(GdiPlus)]
-               internal static extern Status GdipPathIterRewind (IntPtr iterator);
+               internal static extern int GdipPathIterRewind (HandleRef iterator);
 
                // ImageAttributes
                [DllImport (GdiPlus)]
-               internal static extern Status GdipCreateImageAttributes (out IntPtr imageattr);
+               internal static extern int GdipCreateImageAttributes (out IntPtr imageattr);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesColorKeys (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesColorKeys (HandleRef imageattr,
                                ColorAdjustType type, bool enableFlag, int colorLow, int colorHigh);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipDisposeImageAttributes (IntPtr imageattr);
+               internal static extern int GdipDisposeImageAttributes (HandleRef imageattr);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesColorMatrix (IntPtr imageattr,
-                               ColorAdjustType type, bool enableFlag, IntPtr colorMatrix,
-                               IntPtr grayMatrix, ColorMatrixFlag flags);
+               internal static extern int GdipSetImageAttributesColorMatrix (HandleRef imageattr,
+                               ColorAdjustType type, bool enableFlag, ColorMatrix colorMatrix,
+                               ColorMatrix grayMatrix, ColorMatrixFlag flags);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesGamma (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesGamma (HandleRef imageattr,
                        ColorAdjustType type, bool enableFlag,
                                                                                                                                                        float gamma);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesNoOp (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesNoOp (HandleRef imageattr,
                        ColorAdjustType type, bool enableFlag);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesOutputChannel (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesOutputChannel (HandleRef imageattr,
                        ColorAdjustType type, bool enableFlag,  ColorChannelFlag channelFlags);
 
                [DllImport (GdiPlus, CharSet=CharSet.Auto)]
-               internal static extern Status GdipSetImageAttributesOutputChannelColorProfile (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesOutputChannelColorProfile (HandleRef imageattr,
                        ColorAdjustType type, bool enableFlag, [MarshalAs (UnmanagedType.LPWStr)] string profileName);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesRemapTable (IntPtr imageattr,
-                       ColorAdjustType type, bool enableFlag,  uint mapSize, IntPtr colorMap);
+               internal static extern int GdipSetImageAttributesRemapTable (HandleRef imageattr,
+                       ColorAdjustType type, bool enableFlag,  int mapSize, HandleRef colorMap);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesThreshold (IntPtr imageattr,
+               internal static extern int GdipSetImageAttributesThreshold (HandleRef imageattr,
                        ColorAdjustType type, bool enableFlag, float thresHold);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipCloneImageAttributes(IntPtr imageattr, out IntPtr cloneImageattr);
+               internal static extern int GdipCloneImageAttributes(HandleRef imageattr, out IntPtr cloneImageattr);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipGetImageAttributesAdjustedPalette (IntPtr imageattr, IntPtr colorPalette,
+               internal static extern int GdipGetImageAttributesAdjustedPalette (HandleRef imageattr, HandleRef colorPalette,
                        ColorAdjustType colorAdjustType);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipSetImageAttributesWrapMode(IntPtr imageattr, WrapMode wrap,
+               internal static extern int GdipSetImageAttributesWrapMode(HandleRef imageattr, /*WrapMode*/ int wrap,
                        int argb, bool clamp);
 
 
@@ -1524,14 +1532,14 @@ namespace System.Drawing
 
                // FontCollection
                [DllImport (GdiPlus)]
-               internal static extern Status GdipGetFontCollectionFamilyCount (IntPtr collection, out int found);
+               internal static extern int GdipGetFontCollectionFamilyCount (HandleRef collection, out int found);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipGetFontCollectionFamilyList (IntPtr collection, int getCount, IntPtr[] dest, out int retCount);
+               internal static extern int GdipGetFontCollectionFamilyList (HandleRef collection, int getCount, IntPtr[] dest, out int retCount);
                //internal static extern Status GdipGetFontCollectionFamilyList( IntPtr collection, int getCount, [Out] FontFamily [] familyList, out int retCount );
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipNewInstalledFontCollection (out IntPtr collection);
+               internal static extern int GdipNewInstalledFontCollection (out IntPtr collection);
 
                [DllImport (GdiPlus)]
                internal static extern Status GdipNewPrivateFontCollection (out IntPtr collection);
@@ -1591,7 +1599,7 @@ namespace System.Drawing
                internal static extern Status GdipGetFontHeightGivenDPI (IntPtr font, float dpi, out float height);
 
                [DllImport (GdiPlus)]
-               internal static extern Status GdipCloneFontFamily (IntPtr fontFamily, out IntPtr clone);
+               internal static extern int GdipCloneFontFamily (HandleRef fontFamily, out IntPtr clone);
 
 
                // String Format
@@ -1687,13 +1695,13 @@ namespace System.Drawing
 #endif
                //ImageCodecInfo functions
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetImageDecodersSize (out int decoderNums, out int arraySize);
+               static internal extern int GdipGetImageDecodersSize (out int decoderNums, out int arraySize);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetImageDecoders (int decoderNums, int arraySize, IntPtr decoders);
+               static internal extern int GdipGetImageDecoders (int decoderNums, int arraySize, IntPtr decoders);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetImageEncodersSize (out int encoderNums, out int arraySize);
+               static internal extern int GdipGetImageEncodersSize (out int encoderNums, out int arraySize);
                [DllImport(GdiPlus)]
-               static internal extern Status GdipGetImageEncoders (int encoderNums, int arraySize, IntPtr encoders);
+               static internal extern int GdipGetImageEncoders (int encoderNums, int arraySize, IntPtr encoders);
 
                //
                // These are stuff that is unix-only
index bbde755ab8ad0612d194bbe436e7dee7d649a5c7..aa4ba34fd16f348548453644144cb190750ec5c5 100644 (file)
@@ -1,25 +1,10 @@
 ../../test-helpers/NunitHelpers.cs
 ../../../build/common/Locale.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Gdiplus.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/NativeMethods.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/UnsafeNativeMethods.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPPOINT.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPPOINTF.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPRECT.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Internal/GPRECTF.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCapType.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/PropertyItemInternal.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Imaging/PropertyItem.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Imaging/MetafileHeaderWmf.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Imaging/MetafileHeaderEmf.cs
-../../../../external/corefx/src/System.Drawing.Common/src/System/Drawing/Imaging/EmfPlusFlags.cs
-../../../../external/corefx/src/System.Drawing.Common/src/misc/HandleCollector.cs
-../corefx/SR.cs
-../System.Drawing/SR.cs
-../System.Drawing/ExternDll.cs
-../System.Drawing/gdipEnums.cs    
+
+../System.Drawing/gdipEnums.cs
 ../System.Drawing/gdipFunctions.cs
 ../System.Drawing/gdipStructs.cs
+
 HostIgnoreList.cs
 System.Drawing/ColorTranslator.cs
 System.Drawing/ColorConverter.cs
index 4e6c25725298c8f808a2ac4720fcbd63a8c4dece..939dbd8fe63a7298805a3548965cff9e81b1410e 100644 (file)
@@ -40,6 +40,8 @@ namespace MonoTests.System.Drawing {
        [TestFixture]
        public class GDIPlusTest {
 
+               static readonly HandleRef HandleRefZero = new HandleRef (null, IntPtr.Zero);
+
                // for the moment this LOGFONT is different (and ok) from the one defined internally in SD
                [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Auto)]
                public class LOGFONT {
@@ -71,10 +73,10 @@ namespace MonoTests.System.Drawing {
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePath (FillMode.Alternate, out path), "GdipCreatePath");
 
                        // test invalid conditions for #81829
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateCustomLineCap (IntPtr.Zero, path, LineCap.Flat, 1.0f, out cap), "GdipCreateCustomLineCap-FillPath-Null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteCustomLineCap (cap), "GdipDeleteCustomLineCap-1");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateCustomLineCap (path, IntPtr.Zero, LineCap.Flat, 1.0f, out cap), "GdipCreateCustomLineCap-StrokePath-Null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteCustomLineCap (cap), "GdipDeleteCustomLineCap-2");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreateCustomLineCap (HandleRefZero, new HandleRef (this, path), LineCap.Flat, 1.0f, out cap), "GdipCreateCustomLineCap-FillPath-Null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteCustomLineCap (new HandleRef (this, cap)), "GdipDeleteCustomLineCap-1");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreateCustomLineCap (new HandleRef (this, path), HandleRefZero, LineCap.Flat, 1.0f, out cap), "GdipCreateCustomLineCap-StrokePath-Null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteCustomLineCap (new HandleRef (this, cap)), "GdipDeleteCustomLineCap-2");
 
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePath (path), "GdipDeletePath");
                }
@@ -110,12 +112,14 @@ namespace MonoTests.System.Drawing {
                public void CloneFontFamily ()
                {
                        IntPtr font_family = IntPtr.Zero;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCloneFontFamily (IntPtr.Zero, out font_family), "GdipCloneFontFamily(null)");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipCloneFontFamily (HandleRefZero, out font_family), "GdipCloneFontFamily(null)");
 
                        GDIPlus.GdipCreateFontFamilyFromName ("Arial", IntPtr.Zero, out font_family);
                        if (font_family != IntPtr.Zero) {
+                               var font_family_handle = new HandleRef (this, font_family);
+
                                IntPtr clone;
-                               Assert.AreEqual (Status.Ok, GDIPlus.GdipCloneFontFamily (font_family, out clone), "GdipCloneFontFamily(arial)");
+                               Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCloneFontFamily (font_family_handle, out clone), "GdipCloneFontFamily(arial)");
                                Assert.IsTrue (clone != IntPtr.Zero, "clone");
                                Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteFontFamily (font_family), "GdipDeleteFontFamily(arial)");
                                Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteFontFamily (clone), "GdipDeleteFontFamily(clone)");
@@ -249,7 +253,7 @@ namespace MonoTests.System.Drawing {
                [Test]
                public void DeleteBrush ()
                {
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDeleteBrush (IntPtr.Zero), "GdipDeleteBrush");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipDeleteBrush (HandleRefZero), "GdipDeleteBrush");
                }
 
                // Graphics
@@ -513,86 +517,88 @@ namespace MonoTests.System.Drawing {
                {
                        IntPtr path;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePath (FillMode.Alternate, out path), "GdipCreatePath");
-                       
+                       var pathHandle = new HandleRef (this, path);
+
                        IntPtr iter;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePathIter (out iter, path), "GdipCreatePathIter");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreatePathIter (out iter, pathHandle), "GdipCreatePathIter");
+                       var iterHandle = new HandleRef (this, iter);
 
                        int count = -1;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterGetCount (IntPtr.Zero, out count), "GdipPathIterGetCount-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterGetCount (iter, out count), "GdipPathIterGetCount");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterGetCount (HandleRefZero, out count), "GdipPathIterGetCount-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterGetCount (iterHandle, out count), "GdipPathIterGetCount");
                        Assert.AreEqual (0, count, "count-1");
 
                        count = -1;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterGetSubpathCount (IntPtr.Zero, out count), "GdipPathIterGetSubpathCount-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterGetSubpathCount (iter, out count), "GdipPathIterGetSubpathCount");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterGetSubpathCount (HandleRefZero, out count), "GdipPathIterGetSubpathCount-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterGetSubpathCount (iterHandle, out count), "GdipPathIterGetSubpathCount");
                        Assert.AreEqual (0, count, "count-2");
 
                        bool curve;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterHasCurve (IntPtr.Zero, out curve), "GdipPathIterHasCurve-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterHasCurve (iter, out curve), "GdipPathIterHasCurve");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterHasCurve (HandleRefZero, out curve), "GdipPathIterHasCurve-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterHasCurve (iterHandle, out curve), "GdipPathIterHasCurve");
                        Assert.IsFalse (curve, "curve");
 
                        int result;
                        PointF[] points = new PointF[count];
                        byte[] types = new byte[count];
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (IntPtr.Zero, out result, points, types, count), "GdipPathIterEnumerate-iter");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (iter, out result, null, types, count), "GdipPathIterEnumerate-points");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (iter, out result, points, null, count), "GdipPathIterEnumerate-types");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iter, out result, points, types, -1), "GdipPathIterEnumerate-count");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iter, out result, points, types, count), "GdipPathIterEnumerate");
-
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (IntPtr.Zero, out result, points, types, 0, 0), "GdipPathIterCopyData-iter");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (iter, out result, null, types, 0, 0), "GdipPathIterCopyData-points");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (iter, out result, points, null, 0, 0), "GdipPathIterCopyData-types");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iter, out result, points, types, -1, 0), "GdipPathIterCopyData-start");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iter, out result, points, types, 0, -1), "GdipPathIterCopyData-end");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iter, out result, points, types, 0, 0), "GdipPathIterCopyData");
-
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterNextMarkerPath (IntPtr.Zero, out result, path), "GdipPathIterNextMarkerPath-iter");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iter, out result, IntPtr.Zero), "GdipPathIterNextMarkerPath-path");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iter, out result, path), "GdipPathIterNextMarkerPath");
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (HandleRefZero, out result, points, types, count), "GdipPathIterEnumerate-iter");
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (iterHandle, out result, null, types, count), "GdipPathIterEnumerate-points");
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterEnumerate (iterHandle, out result, points, null, count), "GdipPathIterEnumerate-types");
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iterHandle, out result, points, types, -1), "GdipPathIterEnumerate-count");
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iterHandle, out result, points, types, count), "GdipPathIterEnumerate");
+
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (HandleRefZero, out result, points, types, 0, 0), "GdipPathIterCopyData-iter");
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (iterHandle, out result, null, types, 0, 0), "GdipPathIterCopyData-points");
+//                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterCopyData (iterHandle, out result, points, null, 0, 0), "GdipPathIterCopyData-types");
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iterHandle, out result, points, types, -1, 0), "GdipPathIterCopyData-start");
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iterHandle, out result, points, types, 0, -1), "GdipPathIterCopyData-end");
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iterHandle, out result, points, types, 0, 0), "GdipPathIterCopyData");
+
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterNextMarkerPath (HandleRefZero, out result, pathHandle), "GdipPathIterNextMarkerPath-iter");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iterHandle, out result, HandleRefZero), "GdipPathIterNextMarkerPath-path");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iterHandle, out result, pathHandle), "GdipPathIterNextMarkerPath");
 
                        result = -1;
                        int start = -1;
                        int end = -1;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterNextMarker (IntPtr.Zero, out result, out start, out end), "GdipPathIterNextMarker-iter");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterNextMarker (HandleRefZero, out result, out start, out end), "GdipPathIterNextMarker-iter");
                        start = -1;
                        end = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextMarker (iter, out result, out start, out end), "GdipPathIterNextMarker");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextMarker (iterHandle, out result, out start, out end), "GdipPathIterNextMarker");
                        Assert.AreEqual (0, result, "result-4");
                        Assert.AreEqual (-1, start, "start-1");
                        Assert.AreEqual (-1, end, "end-1");
 
                        byte pathType = 255;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterNextPathType (IntPtr.Zero, out result, out pathType, out start, out end), "GdipPathIterNextPathType-iter");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterNextPathType (HandleRefZero, out result, out pathType, out start, out end), "GdipPathIterNextPathType-iter");
                        pathType = 255;
                        start = -1;
                        end = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextPathType (iter, out result, out pathType, out start, out end), "GdipPathIterNextPathType");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextPathType (iterHandle, out result, out pathType, out start, out end), "GdipPathIterNextPathType");
                        Assert.AreEqual (0, result, "result-5");
                        Assert.AreEqual (255, pathType, "pathType");
                        Assert.AreEqual (-1, start, "start-2");
                        Assert.AreEqual (-1, end, "end-2");
 
                        bool closed = false;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterNextSubpathPath (IntPtr.Zero, out result, IntPtr.Zero, out closed), "GdipPathIterNextSubpathPath-iter");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterNextSubpathPath (HandleRefZero, out result, HandleRefZero, out closed), "GdipPathIterNextSubpathPath-iter");
                        closed = false;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iter, out result, IntPtr.Zero, out closed), "GdipPathIterNextSubpathPath-path");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iter, out result, path, out closed), "GdipPathIterNextSubpathPath");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iterHandle, out result, HandleRefZero, out closed), "GdipPathIterNextSubpathPath-path");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iterHandle, out result, pathHandle, out closed), "GdipPathIterNextSubpathPath");
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterNextSubpath (IntPtr.Zero, out result, out start, out end, out closed), "GdipPathIterNextSubpath-iter");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterNextSubpath (HandleRefZero, out result, out start, out end, out closed), "GdipPathIterNextSubpath-iter");
                        start = -1;
                        end = -1;
                        closed = false;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextSubpath (iter, out result, out start, out end, out closed), "GdipPathIterNextSubpath");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextSubpath (iterHandle, out result, out start, out end, out closed), "GdipPathIterNextSubpath");
                        Assert.AreEqual (-1, start, "start-3");
                        Assert.AreEqual (-1, end, "end-3");
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipPathIterRewind (IntPtr.Zero), "GdipPathIterRewind-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterRewind (iter), "GdipPathIterRewind");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipPathIterRewind (HandleRefZero), "GdipPathIterRewind-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterRewind (iterHandle), "GdipPathIterRewind");
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDeletePathIter (IntPtr.Zero), "GdipDeletePathIter-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePathIter (iter), "GdipDeletePathIter");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipDeletePathIter (HandleRefZero), "GdipDeletePathIter-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeletePathIter (iterHandle), "GdipDeletePathIter");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePath (path), "GdipDeletePath");
                }
 
@@ -601,37 +607,38 @@ namespace MonoTests.System.Drawing {
                {
                        // a path isn't required to create an iterator - ensure we never crash for any api
                        IntPtr iter;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePathIter (out iter, IntPtr.Zero), "GdipCreatePathIter-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreatePathIter (out iter, HandleRefZero), "GdipCreatePathIter-null");
+                       var iterHandle = new HandleRef (this, iter);
 
                        int count = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterGetCount (iter, out count), "GdipPathIterGetCount");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterGetCount (iterHandle, out count), "GdipPathIterGetCount");
                        Assert.AreEqual (0, count, "count-1");
 
                        count = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterGetSubpathCount (iter, out count), "GdipPathIterGetSubpathCount");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterGetSubpathCount (iterHandle, out count), "GdipPathIterGetSubpathCount");
                        Assert.AreEqual (0, count, "count-2");
 
                        bool curve;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterHasCurve (iter, out curve), "GdipPathIterHasCurve");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterHasCurve (iterHandle, out curve), "GdipPathIterHasCurve");
 
                        int result = -1;
-                       PointF[] points = new PointF[count];
-                       byte[] types = new byte[count];
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iter, out result, points, types, count), "GdipPathIterEnumerate");
-                       Assert.AreEqual (0, result, "result-1");
+//                     PointF[] points = new PointF[count];
+//                     byte[] types = new byte[count];
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterEnumerate (iterHandle, out result, points, types, count), "GdipPathIterEnumerate");
+//                     Assert.AreEqual (0, result, "result-1");
 
-                       result = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iter, out result, points, types, 0, 0), "GdipPathIterCopyData");
-                       Assert.AreEqual (0, result, "result-2");
+//                     result = -1;
+//                     Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterCopyData (iterHandle, out result, points, types, 0, 0), "GdipPathIterCopyData");
+//                     Assert.AreEqual (0, result, "result-2");
 
                        result = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iter, out result, IntPtr.Zero), "GdipPathIterNextMarkerPath");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextMarkerPath (iterHandle, out result, HandleRefZero), "GdipPathIterNextMarkerPath");
                        Assert.AreEqual (0, result, "result-3");
 
                        result = -1;
                        int start = -1;
                        int end = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextMarker (iter, out result, out start, out end), "GdipPathIterNextMarker");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextMarker (iterHandle, out result, out start, out end), "GdipPathIterNextMarker");
                        Assert.AreEqual (0, result, "result-4");
                        Assert.AreEqual (-1, start, "start-1");
                        Assert.AreEqual (-1, end, "end-1");
@@ -640,25 +647,25 @@ namespace MonoTests.System.Drawing {
                        byte pathType = 255;
                        start = -1;
                        end = -1;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextPathType (iter, out result, out pathType, out start, out end), "GdipPathIterNextPathType");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextPathType (iterHandle, out result, out pathType, out start, out end), "GdipPathIterNextPathType");
                        Assert.AreEqual (0, result, "result-5");
                        Assert.AreEqual (255, pathType, "pathType");
                        Assert.AreEqual (-1, start, "start-2");
                        Assert.AreEqual (-1, end, "end-2");
 
                        bool closed = false;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iter, out result, IntPtr.Zero, out closed), "GdipPathIterNextSubpathPath");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextSubpathPath (iterHandle, out result, HandleRefZero, out closed), "GdipPathIterNextSubpathPath");
 
                        start = -1;
                        end = -1;
                        closed = false;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterNextSubpath (iter, out result, out start, out end, out closed), "GdipPathIterNextSubpath");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterNextSubpath (iterHandle, out result, out start, out end, out closed), "GdipPathIterNextSubpath");
                        Assert.AreEqual (-1, start, "start-3");
                        Assert.AreEqual (-1, end, "end-3");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipPathIterRewind (iter), "GdipPathIterRewind");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipPathIterRewind (iterHandle), "GdipPathIterRewind");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePathIter (iter), "GdipDeletePathIter");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeletePathIter (iterHandle), "GdipDeletePathIter");
                }
 
                // Matrix
@@ -954,29 +961,24 @@ namespace MonoTests.System.Drawing {
                public void ImageAttribute ()
                {
                        IntPtr attr;
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateImageAttributes (out attr), "GdipCreateImageAttributes");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreateImageAttributes (out attr), "GdipCreateImageAttributes");
+                       var attrHandle = new HandleRef (this, attr);
 
                        IntPtr clone;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCloneImageAttributes (IntPtr.Zero, out clone), "GdipCloneImageAttributes");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCloneImageAttributes (attr, out clone), "GdipCloneImageAttributes");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipCloneImageAttributes (HandleRefZero, out clone), "GdipCloneImageAttributes");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCloneImageAttributes (attrHandle, out clone), "GdipCloneImageAttributes");
+                       var cloneHandle = new HandleRef (this, clone);
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetImageAttributesColorMatrix (attr, ColorAdjustType.Default, true, IntPtr.Zero, IntPtr.Zero, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-true-matrix1");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipSetImageAttributesColorMatrix (attrHandle, ColorAdjustType.Default, true, null, null, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-true-matrix1");
                        // the first color matrix can be null if enableFlag is false
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipSetImageAttributesColorMatrix (attr, ColorAdjustType.Default, false, IntPtr.Zero, IntPtr.Zero, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-false-matrix1");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipSetImageAttributesColorMatrix (attrHandle, ColorAdjustType.Default, false, null, null, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-false-matrix1");
                        ColorMatrix cm = new ColorMatrix ();
-                       IntPtr color = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (ColorMatrix)));
-                       try {
-                               Marshal.StructureToPtr (cm, color, false);
-                               Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetImageAttributesColorMatrix (IntPtr.Zero, ColorAdjustType.Default, true, color, IntPtr.Zero, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-null");
-                               Assert.AreEqual (Status.Ok, GDIPlus.GdipSetImageAttributesColorMatrix (attr, ColorAdjustType.Default, true, color, IntPtr.Zero, ColorMatrixFlag.Default), "GdipCloneImageAttributes");
-                       }
-                       finally {
-                               Marshal.FreeHGlobal (color);
-                       }
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipSetImageAttributesColorMatrix (HandleRefZero, ColorAdjustType.Default, true, cm, null, ColorMatrixFlag.Default), "GdipSetImageAttributesColorMatrix-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipSetImageAttributesColorMatrix (attrHandle, ColorAdjustType.Default, true, cm, null, ColorMatrixFlag.Default), "GdipCloneImageAttributes");
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipDisposeImageAttributes (IntPtr.Zero), "GdipDisposeImageAttributes-null");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImageAttributes (attr), "GdipDisposeImageAttributes");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImageAttributes (clone), "GdipDisposeImageAttributes-clone");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipDisposeImageAttributes (HandleRefZero), "GdipDisposeImageAttributes-null");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDisposeImageAttributes (attrHandle), "GdipDisposeImageAttributes");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDisposeImageAttributes (cloneHandle), "GdipDisposeImageAttributes-clone");
                }
 
                // PathGradientBrush
@@ -999,6 +1001,7 @@ namespace MonoTests.System.Drawing {
                        points = new PointF[2] { new PointF (1, 2), new PointF (20, 30) };
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePathGradient (points, 2, WrapMode.Clamp, out brush), "two");
                        Assert.IsTrue (brush != IntPtr.Zero, "Handle");
+                       var brushHandle = new HandleRef (this, brush);
 
                        int count;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipGetPathGradientBlendCount (brush, out count), "GdipGetPathGradientBlendCount");
@@ -1009,7 +1012,7 @@ namespace MonoTests.System.Drawing {
                        Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetPathGradientPresetBlend (brush, colors, positions, count), "GdipGetPathGradientBlend");
                        // can't call that for 1 count!
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual (0, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                }
 
                [Test]
@@ -1026,6 +1029,7 @@ namespace MonoTests.System.Drawing {
 
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePathGradientFromPath (path, out brush), "path");
                        Assert.IsTrue (brush != IntPtr.Zero, "Handle");
+                       var brushHandle = new HandleRef (this, brush);                  
 
                        int count;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipGetPathGradientBlendCount (brush, out count), "GdipGetPathGradientBlendCount");
@@ -1035,7 +1039,7 @@ namespace MonoTests.System.Drawing {
                        float[] positions = new float[count];
                        Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetPathGradientPresetBlend (brush, colors, positions, count), "GdipGetPathGradientBlend");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual (0, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePath (path), "GdipDeletePath");
                }
 
@@ -1051,6 +1055,7 @@ namespace MonoTests.System.Drawing {
                        IntPtr brush;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreatePathGradientFromPath (path, out brush), "path");
                        Assert.IsTrue (brush != IntPtr.Zero, "Handle");
+                       var brushHandle = new HandleRef (this, brush);
 
                        int count;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipGetPathGradientBlendCount (brush, out count), "GdipGetPathGradientBlendCount");
@@ -1060,7 +1065,7 @@ namespace MonoTests.System.Drawing {
                        float[] positions = new float[count];
                        Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetPathGradientPresetBlend (brush, colors, positions, count), "GdipGetPathGradientBlend");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual (0, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDeletePath (path), "GdipDeletePath");
                }
 
@@ -1102,32 +1107,36 @@ namespace MonoTests.System.Drawing {
                        try {
                                int color = 0;
                                IntPtr brush;
+                               HandleRef brushHandle;
                                Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetPenBrushFill (IntPtr.Zero, out brush), "GdipGetPenBrushFill-null");
                                Assert.AreEqual (Status.Ok, GDIPlus.GdipGetPenBrushFill (pen, out brush), "GdipGetPenBrushFill");
+                               brushHandle = new HandleRef (this, brush);
+
                                try {
-                                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetSolidFillColor (IntPtr.Zero, out color), "GdipGetSolidFillColor-null");
-                                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetSolidFillColor (brush, out color), "GdipGetSolidFillColor-0");
+                                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipGetSolidFillColor (HandleRefZero, out color), "GdipGetSolidFillColor-null");
+                                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetSolidFillColor (brushHandle, out color), "GdipGetSolidFillColor-0");
                                        Assert.AreEqual (0x7f0000ff, color, "color-0");
 
                                        Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetPenColor (IntPtr.Zero, 0x7fff0000), "GdipSetPenColor-null");
                                        Assert.AreEqual (Status.Ok, GDIPlus.GdipSetPenColor (pen, 0x7fff0000), "GdipSetPenColor");
 
-                                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetSolidFillColor (brush, out color), "GdipGetSolidFillColor-1");
+                                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetSolidFillColor (brushHandle, out color), "GdipGetSolidFillColor-1");
                                        // previous brush color didn't change
                                        Assert.AreEqual (0x7f0000ff, color, "color-1");
                                }
                                finally {
-                                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                                }
 
                                Assert.AreEqual (Status.Ok, GDIPlus.GdipGetPenBrushFill (pen, out brush), "GdipGetPenBrushFill-2");
+                               brushHandle = new HandleRef (this, brush);
                                try {
-                                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetSolidFillColor (brush, out color), "GdipGetSolidFillColor-2");
+                                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetSolidFillColor (brushHandle, out color), "GdipGetSolidFillColor-2");
                                        // new brush color is updated
                                        Assert.AreEqual (0x7fff0000, color, "color-2");
                                }
                                finally {
-                                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush-2");
+                                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush-2");
                                }
                        }
                        finally {
@@ -1207,7 +1216,7 @@ namespace MonoTests.System.Drawing {
 
                        IntPtr brush;
                        GDIPlus.GdipCreateSolidFill (0, out brush);
-
+                       var brushHandle = new HandleRef (this, brush);
 
                        Assert.AreEqual (Status.InvalidParameter,
                                         GDIPlus.GdipFillClosedCurveI (graphics, brush, new Point [] {}, 0),
@@ -1222,7 +1231,7 @@ namespace MonoTests.System.Drawing {
                                                                                      new Point (2, 2) }, 2),
                                         "FillClosedCurve with 2 pts");
                        
-                       GDIPlus.GdipDeleteBrush (brush);
+                       GDIPlus.GdipDeleteBrush (brushHandle);
                        
                        GDIPlus.GdipDeleteGraphics (graphics);
                        GDIPlus.GdipDisposeImage (image);
@@ -1344,19 +1353,22 @@ namespace MonoTests.System.Drawing {
                {
                        IntPtr image;
                        GDIPlus.GdipCreateBitmapFromScan0 (10, 10, 0, PixelFormat.Format32bppArgb, IntPtr.Zero, out image);
+                       var imageHandle = new HandleRef (this, image);
 
                        IntPtr brush;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCreateTexture (IntPtr.Zero, WrapMode.Tile, out brush), "GdipCreateTexture-image");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture (image, (WrapMode)Int32.MinValue, out brush), "GdipCreateTexture-wrapmode");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateTexture (image, WrapMode.Tile, out brush), "GdipCreateTexture");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipCreateTexture (HandleRefZero, (int) WrapMode.Tile, out brush), "GdipCreateTexture-image");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture (imageHandle, Int32.MinValue, out brush), "GdipCreateTexture-wrapmode");
+
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreateTexture (imageHandle, (int) WrapMode.Tile, out brush), "GdipCreateTexture");
+                       var brushHandle = new HandleRef (this, brush);                  
 
                        IntPtr image2;
 // this would throw an AccessViolationException under MS 2.0 (missing null check?)
 //                     Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetTextureImage (IntPtr.Zero, out image2), "GdipGetTextureImage-brush");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetTextureImage (brush, out image2), "GdipGetTextureImage");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetTextureImage (brushHandle, out image2), "GdipGetTextureImage");
                        Assert.IsFalse (image == image2, "image");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (image), "GdipDisposeImage");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (image2), "GdipDisposeImage-image2");
                }
@@ -1366,34 +1378,37 @@ namespace MonoTests.System.Drawing {
                {
                        IntPtr image;
                        GDIPlus.GdipCreateBitmapFromScan0 (10, 10, 0, PixelFormat.Format32bppArgb, IntPtr.Zero, out image);
+                       var imageHandle = new HandleRef (this, image);
 
                        IntPtr brush;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCreateTexture2 (IntPtr.Zero, WrapMode.Tile, 0, 0, 10, 10, out brush), "GdipCreateTexture2-image");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCreateTexture2 (IntPtr.Zero, (WrapMode) Int32.MinValue, 0, 0, 10, 10, out brush), "GdipCreateTexture2-wrapmode");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 0, 0, 0, 10, out brush), "GdipCreateTexture2-width");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 0, 0, 10, 0, out brush), "GdipCreateTexture2-height");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, -1, 0, 0, 10, out brush), "GdipCreateTexture2-x");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 0, -1, 10, 0, out brush), "GdipCreateTexture2-y");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 1, 0, 10, 10, out brush), "GdipCreateTexture2-too-wide");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 0, 1, 10, 10, out brush), "GdipCreateTexture2-too-tall");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateTexture2 (image, WrapMode.Tile, 0, 0, 10, 10, out brush), "GdipCreateTexture2");
-
-                       WrapMode wm;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetTextureWrapMode (IntPtr.Zero, out wm), "GdipGetTextureWrapMode-brush");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetTextureWrapMode (brush, out wm), "GdipGetTextureWrapMode");
-                       Assert.AreEqual (WrapMode.Tile, wm, "WrapMode");
-
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetTextureWrapMode (IntPtr.Zero, WrapMode.Clamp), "GdipSetTextureWrapMode-brush");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipSetTextureWrapMode (brush, WrapMode.Clamp), "GdipSetTextureWrapMode");
-                       GDIPlus.GdipGetTextureWrapMode (brush, out wm);
-                       Assert.AreEqual (WrapMode.Clamp, wm, "WrapMode.Clamp");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipCreateTexture2 (HandleRefZero, (int) WrapMode.Tile, 0, 0, 10, 10, out brush), "GdipCreateTexture2-image");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipCreateTexture2 (HandleRefZero, Int32.MinValue, 0, 0, 10, 10, out brush), "GdipCreateTexture2-wrapmode");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 0, 0, 0, 10, out brush), "GdipCreateTexture2-width");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 0, 0, 10, 0, out brush), "GdipCreateTexture2-height");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, -1, 0, 0, 10, out brush), "GdipCreateTexture2-x");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 0, -1, 10, 0, out brush), "GdipCreateTexture2-y");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 1, 0, 10, 10, out brush), "GdipCreateTexture2-too-wide");
+                       Assert.AreEqual ((int) Status.OutOfMemory, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 0, 1, 10, 10, out brush), "GdipCreateTexture2-too-tall");
+
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipCreateTexture2 (imageHandle, (int) WrapMode.Tile, 0, 0, 10, 10, out brush), "GdipCreateTexture2");
+                       var brushHandle = new HandleRef (this, brush);                  
+
+                       int wm;
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipGetTextureWrapMode (HandleRefZero, out wm), "GdipGetTextureWrapMode-brush");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetTextureWrapMode (brushHandle, out wm), "GdipGetTextureWrapMode");
+                       Assert.AreEqual ((int) WrapMode.Tile, wm, "WrapMode");
+
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipSetTextureWrapMode (HandleRefZero, (int) WrapMode.Clamp), "GdipSetTextureWrapMode-brush");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipSetTextureWrapMode (brushHandle, (int) WrapMode.Clamp), "GdipSetTextureWrapMode");
+                       GDIPlus.GdipGetTextureWrapMode (brushHandle, out wm);
+                       Assert.AreEqual ((int) WrapMode.Clamp, wm, "WrapMode.Clamp");
 
                        // an invalid WrapMode is ignored
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipSetTextureWrapMode (brush, (WrapMode) Int32.MinValue), "GdipSetTextureWrapMode-wrapmode");
-                       GDIPlus.GdipGetTextureWrapMode (brush, out wm);
-                       Assert.AreEqual (WrapMode.Clamp, wm, "WrapMode/Invalid");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipSetTextureWrapMode (brushHandle, Int32.MinValue), "GdipSetTextureWrapMode-wrapmode");
+                       GDIPlus.GdipGetTextureWrapMode (brushHandle, out wm);
+                       Assert.AreEqual ((int) WrapMode.Clamp, wm, "WrapMode/Invalid");
 
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (image), "GdipDisposeImage");
                }
 
@@ -1402,32 +1417,36 @@ namespace MonoTests.System.Drawing {
                {
                        IntPtr image;
                        GDIPlus.GdipCreateBitmapFromScan0 (10, 10, 0, PixelFormat.Format32bppArgb, IntPtr.Zero, out image);
+                       var imageHandle = new HandleRef (this, image);
 
                        IntPtr brush;
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipCreateTextureIA (IntPtr.Zero, IntPtr.Zero, 0, 0, 10, 10, out brush), "GdipCreateTexture2-image");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 0, 0, 0, 10, out brush), "GdipCreateTexture2-width");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 0, 0, 10, 0, out brush), "GdipCreateTexture2-height");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, -1, 0, 10, 10, out brush), "GdipCreateTexture2-x");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 0, -1, 10, 10, out brush), "GdipCreateTexture2-y");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 1, 0, 10, 10, out brush), "GdipCreateTexture2-too-wide");
-                       Assert.AreEqual (Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 0, 1, 10, 10, out brush), "GdipCreateTexture2-too-tall");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateTextureIA (image, IntPtr.Zero, 0, 0, 10, 10, out brush), "GdipCreateTexture2");
+                       Assert.AreEqual ((int)Status.InvalidParameter, GDIPlus.GdipCreateTextureIA (HandleRefZero, HandleRefZero, 0, 0, 10, 10, out brush), "GdipCreateTexture2-image");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 0, 0, 0, 10, out brush), "GdipCreateTexture2-width");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 0, 0, 10, 0, out brush), "GdipCreateTexture2-height");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, -1, 0, 10, 10, out brush), "GdipCreateTexture2-x");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 0, -1, 10, 10, out brush), "GdipCreateTexture2-y");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 1, 0, 10, 10, out brush), "GdipCreateTexture2-too-wide");
+                       Assert.AreEqual ((int)Status.OutOfMemory, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 0, 1, 10, 10, out brush), "GdipCreateTexture2-too-tall");
+
+                       Assert.AreEqual ((int)Status.Ok, GDIPlus.GdipCreateTextureIA (imageHandle, HandleRefZero, 0, 0, 10, 10, out brush), "GdipCreateTexture2");
+                       var brushHandle = new HandleRef (this, brush);
 
                        // TODO - handle ImageAttribute in the tests
 
                        IntPtr matrix;
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipCreateMatrix (out matrix), "GdipCreateMatrix");
+                       var matrixHandle = new HandleRef (this, matrix);
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetTextureTransform (IntPtr.Zero, matrix), "GdipGetTextureTransform-brush");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipGetTextureTransform (brush, IntPtr.Zero), "GdipGetTextureTransform-matrix");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipGetTextureTransform (brush, matrix), "GdipGetTextureTransform");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipGetTextureTransform (HandleRefZero, matrixHandle), "GdipGetTextureTransform-brush");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipGetTextureTransform (brushHandle, HandleRefZero), "GdipGetTextureTransform-matrix");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipGetTextureTransform (brushHandle, matrixHandle), "GdipGetTextureTransform");
 
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetTextureTransform (IntPtr.Zero, matrix), "GdipSetTextureTransform-brush");
-                       Assert.AreEqual (Status.InvalidParameter, GDIPlus.GdipSetTextureTransform (brush, IntPtr.Zero), "GdipSetTextureTransform-matrix");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipSetTextureTransform (brush, matrix), "GdipSetTextureTransform");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipSetTextureTransform (HandleRefZero, matrixHandle), "GdipSetTextureTransform-brush");
+                       Assert.AreEqual ((int) Status.InvalidParameter, GDIPlus.GdipSetTextureTransform (brushHandle, HandleRefZero), "GdipSetTextureTransform-matrix");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipSetTextureTransform (brushHandle, matrixHandle), "GdipSetTextureTransform");
 
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteMatrix (matrix), "GdipDeleteMatrix");
-                       Assert.AreEqual (Status.Ok, GDIPlus.GdipDeleteBrush (brush), "GdipDeleteBrush");
+                       Assert.AreEqual ((int) Status.Ok, GDIPlus.GdipDeleteBrush (brushHandle), "GdipDeleteBrush");
                        Assert.AreEqual (Status.Ok, GDIPlus.GdipDisposeImage (image), "GdipDisposeImage");
                }
 
index 9575948818dd27ebc989e2ef7e09cb47c4aaea7d..16c7132c85316ccc8f9135cf0cee1744a57e13ab 100644 (file)
@@ -95,4 +95,5 @@ partial class SR
        public const string DCTypeInvalid = "GetObjectType on this dc returned an invalid value.";
        public const string InvalidEnumArgument = "The value of argument '{0}' ({1}) is invalid for Enum type '{2}'.";
        public const string ConvertInvalidPrimitive = "{0} is not a valid value for {1}.";
+       public const string LibgdiplusNotFound = "The native library \"libgdiplus\" is not installed on the system, or was otherwise unable to be loaded.";
 }
index af912498a73184f74aee4da718c18f7f0ffe44cc..2a15171317801e9d22521b84fd2e37082e5b0148 100644 (file)
@@ -1,9 +1,9 @@
 ../../../external/corefx/src/CoreFx.Private.TestUtilities/src/System/AssertExtensions.cs
-../../../external/corefx/src/Common/tests/System/PlatformDetection.cs
+
 ../../../external/corefx/src/Common/src/System/MathF.netstandard.cs
 
 # ../../../external/corefx/src/System.Runtime.Numerics/tests/*.cs
-../../../external/corefx/src/System.Runtime.Numerics/tests/BigInteger/*.cs
+#../../../external/corefx/src/System.Runtime.Numerics/tests/BigInteger/*.cs
 
 ../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/ConstantHelper.cs
 
index 8249d786c2e1a5d68f72e0981878d3c0aec30e80..354a16e39e39ce67361fbd28fbd1e0701cb88e0a 100644 (file)
@@ -130,6 +130,11 @@ namespace System.IO.Compression
                        }
                }
 
+               internal int ReadCore (Span<byte> destination)
+               {
+                       throw new NotImplementedException ();
+               }
+
                public override int Read (byte[] array, int offset, int count)
                {
                        if (disposed)
@@ -160,6 +165,11 @@ namespace System.IO.Compression
                        }
                }
 
+               internal void WriteCore (ReadOnlySpan<byte> source)
+               {
+                       throw new NotImplementedException ();
+               }
+
                public override void Write (byte[] array, int offset, int count)
                {
                        if (disposed)
index 131443e8c2ed2c8efab728dc5f46080af5bf745a..e446341ec186f0e83d8f4a88d8ff328f11ce914c 100644 (file)
@@ -21,18 +21,24 @@ endif
 endif
 
 ifeq ($(PROFILE),build)
-CSC_RUNTIME_FLAGS=--profile=aot:output=$(topdir)/class/lib/$(PROFILE)/csc.$(LIBRARY).aotprofile
+CSC_RUNTIME_FLAGS=--profile=aot:output=$(topdir)/class/lib/$(PROFILE_DIRECTORY)/csc.$(LIBRARY).aotprofile
 endif
 
-RESOURCE_STRINGS = ../referencesource/mscorlib/mscorlib.txt
-
 RESX_RESOURCE_STRING = \
        ../../../external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx \
-       ../../../external/corefx/src/System.Collections.Concurrent/src/Resources/Strings.resx
+       ../../../external/corefx/src/System.Collections.Concurrent/src/Resources/Strings.resx \
+       ../../../external/corefx/src/System.Memory/src/Resources/Strings.resx
 
 LIBRARY_COMPILE = $(BOOT_COMPILE)
 LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
 
+ifneq ($(PROFILE),basic)
+RESOURCE_STRINGS = ../referencesource/mscorlib/mscorlib.txt
+include il/il.make
+
+MODULE_DEPS = $(IL_REPLACE)
+endif
+
 RESOURCE_FILES = \
        resources/charinfo.nlp \
        resources/collation.core.bin \
@@ -146,7 +152,7 @@ TEST_RESX_RESOURCES_SATELITE = \
        Test/resources/Resources.es-ES.resources \
        Test/resources/Resources.nn-NO.resources \
 
-CLEAN_FILES += $(TEST_RESX_RESOURCES)
+CLEAN_FILES += $(TEST_RESX_RESOURCES) $(IL_REPLACE)
 
 include $(topdir)/build/library.make
 
@@ -218,7 +224,8 @@ EXTRA_DISTFILES += \
        $(vtsdir)/VersionTolerantSerializationTestLib/4.0/Address.cs \
        $(vtsdir)/VersionTolerantSerializationTestLib/5.0/Address.cs \
        $(vtsdir)/VersionTolerantSerializationTestLib/6.0/Address.cs \
-       $(vtsdir)/BinarySerializationOverVersions.cs
+       $(vtsdir)/BinarySerializationOverVersions.cs \
+       System.Runtime.CompilerServices/Unsafe.il
 
 #
 # Android TimeZoneInfo testing....
diff --git a/mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.cs b/mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.cs
new file mode 100644 (file)
index 0000000..435362d
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// Unsafe.cs: Compile only stubs for Unsafe implementation
+//
+// Authors:
+//   Marek Safar (marek.safar@gmail.com)
+//
+// Copyright (C) 2017 Microsoft Corporation (http://microsoft.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace System.Runtime.CompilerServices
+{
+       static partial class Unsafe
+       {
+               public static ref T Add<T> (ref T source, int elementOffset)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static ref T Add<T> (ref T source, System.IntPtr elementOffset)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static ref T AddByteOffset<T> (ref T source, System.IntPtr byteOffset)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static bool AreSame<T> (ref T left, ref T right)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static T As<T> (object o) where T : class
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static ref TTo As<TFrom, TTo>(ref TFrom source)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public unsafe static ref T AsRef<T> (void* source)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static System.IntPtr ByteOffset<T> (ref T origin, ref T target)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public static void CopyBlock (ref byte destination, ref byte source, uint byteCount)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public static void InitBlockUnaligned (ref byte startAddress, byte value, uint byteCount)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public unsafe static void InitBlockUnaligned (void* startAddress, byte value, uint byteCount)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public unsafe static T Read<T> (void* source)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public static int SizeOf<T> ()
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
diff --git a/mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.il b/mcs/class/corlib/System.Runtime.CompilerServices/Unsafe.il
new file mode 100644 (file)
index 0000000..c002459
--- /dev/null
@@ -0,0 +1,346 @@
+// Simplified version of ../../../external/corefx/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il
+
+.class public abstract auto ansi sealed beforefieldinit System.Runtime.CompilerServices.Unsafe
+{
+  .method public hidebysig static !!T Read<T>(void* source) cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        ldobj !!T
+        ret
+  }
+
+  .method public hidebysig static !!T ReadUnaligned<T>(void* source) cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        unaligned. 0x1
+        ldobj !!T
+        ret
+  }
+  
+  .method public hidebysig static !!T ReadUnaligned<T>(uint8& source) cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        unaligned. 0x1
+        ldobj !!T
+        ret
+  }
+  
+  .method public hidebysig static void Write<T>(void* destination,
+                                                 !!T 'value') cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        stobj !!T
+        ret
+  }
+
+  .method public hidebysig static void WriteUnaligned<T>(void* destination,
+                                                 !!T 'value') cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        unaligned. 0x01
+        stobj !!T
+        ret
+  }
+
+  .method public hidebysig static void WriteUnaligned<T>(uint8& destination,
+                                                 !!T 'value') cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        unaligned. 0x01
+        stobj !!T
+        ret
+  }
+
+  .method public hidebysig static void Copy<T>(void* destination,
+                                                !!T& source) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        ldobj !!T
+        stobj !!T
+        ret
+  }
+
+  .method public hidebysig static void Copy<T>(!!T& destination,
+                                                void* source) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        ldobj !!T
+        stobj !!T
+        ret
+  }
+
+  .method public hidebysig static void* AsPointer<T>(!!T& 'value') cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        conv.u
+        ret
+  }
+
+  .method public hidebysig static int32 SizeOf<T>() cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        sizeof !!T
+        ret
+  }
+
+  .method public hidebysig static void CopyBlock(void* destination, void* source, uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        cpblk
+        ret
+  }
+
+  .method public hidebysig static void CopyBlock(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        cpblk
+        ret
+  }
+
+  .method public hidebysig static void CopyBlockUnaligned(void* destination, void* source, uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        unaligned. 0x1
+        cpblk
+        ret
+  }
+
+  .method public hidebysig static void CopyBlockUnaligned(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        unaligned. 0x1
+        cpblk
+        ret
+  }
+
+  .method public hidebysig static void InitBlock(void* startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        initblk
+        ret
+  }
+
+  .method public hidebysig static void InitBlock(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        initblk
+        ret
+  }
+
+  .method public hidebysig static void InitBlockUnaligned(void* startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        unaligned. 0x1
+        initblk
+        ret
+  }
+
+  .method public hidebysig static void InitBlockUnaligned(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        ldarg.2
+        unaligned. 0x1
+        initblk
+        ret
+  }
+
+  .method public hidebysig static !!T As<class T>(object o) cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        ret
+  }
+
+  .method public hidebysig static !!T& AsRef<T>(void* source) cil managed aggressiveinlining
+  {
+
+        .locals (int32&)
+        .maxstack 1
+        ldarg.0
+        // Roundtrip via a local to avoid type mismatch on return that the JIT inliner chokes on.
+        stloc.0
+        ldloc.0
+        ret
+  }
+
+  .method public hidebysig static !!TTo& As<TFrom, TTo>(!!TFrom& source) cil managed aggressiveinlining
+  {
+
+        .maxstack 1
+        ldarg.0
+        ret
+  }
+
+  .method public hidebysig static !!T& Add<T>(!!T& source, int32 elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        conv.i
+        mul
+        add
+        ret
+  }
+
+  .method public hidebysig static void* Add<T>(void* source, int32 elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        conv.i
+        mul
+        add
+        ret
+  }
+
+  .method public hidebysig static !!T& Add<T>(!!T& source, native int elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        mul
+        add
+        ret
+  }
+
+  .method public hidebysig static !!T& AddByteOffset<T>(!!T& source, native int byteOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        add
+        ret
+  }
+
+  .method public hidebysig static !!T& Subtract<T>(!!T& source, int32 elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        conv.i
+        mul
+        sub
+        ret
+  }
+
+  .method public hidebysig static void* Subtract<T>(void* source, int32 elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        conv.i
+        mul
+        sub
+        ret
+  }
+
+  .method public hidebysig static !!T& Subtract<T>(!!T& source, native int elementOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 3
+        ldarg.0
+        ldarg.1
+        sizeof !!T
+        mul
+        sub
+        ret
+  }
+
+  .method public hidebysig static !!T& SubtractByteOffset<T>(!!T& source, native int byteOffset) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        sub
+        ret
+  }
+
+  .method public hidebysig static native int ByteOffset<T>(!!T& origin, !!T& target) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.1
+        ldarg.0
+        sub
+        ret
+  }
+
+  .method public hidebysig static bool AreSame<T>(!!T& left, !!T& right) cil managed aggressiveinlining
+  {
+
+        .maxstack 2
+        ldarg.0
+        ldarg.1
+        ceq
+        ret
+  }
+
+}
\ No newline at end of file
index 8ee3ec975c8d8988d158bff28b167fd261efdede..0c602b29c087259d34bb56d5b30ecf3fd343e6e7 100644 (file)
@@ -30,6 +30,7 @@ partial class SR
        public const string Arg_DuplicateWaitObjectException = "Duplicate objects in argument.";
        public const string Arg_EnumAndObjectMustBeSameType = "Object must be the same type as the enum. The type passed in was '{0}'; the enum type was '{1}'.";
        public const string Arg_EntryPointNotFoundException = "Entry point was not found.";
+       public const string Arg_EntryPointNotFoundExceptionParameterized = "Unable to find an entry point named '{0}' in DLL '{1}'.";
        public const string Arg_EnumIllegalVal = "Illegal enum value: {0}.";
        public const string Arg_ExecutionEngineException = "Internal error in the runtime.";
        public const string Arg_ExternalException = "External component has thrown an exception.";
@@ -338,6 +339,7 @@ partial class SR
        public const string InvalidOperation_IComparerFailed = "Failed to compare two elements in the array.";
        public const string InvalidOperation_NoValue = "Nullable object must have a value.";
        public const string InvalidOperation_NullArray = "The underlying array is null.";
+       public const string InvalidOperation_Overlapped_Pack = "Cannot pack a packed Overlapped again.";
        public const string InvalidOperation_ReadOnly = "Instance is read-only.";
        public const string InvalidOperation_ThreadWrongThreadStart = "The thread was created with a ThreadStart delegate that does not accept a parameter.";
        public const string InvalidOperation_UnknownEnumType = "Unknown enum type.";
@@ -599,6 +601,7 @@ partial class SR
        public const string Argument_NotEnoughBytesToRead = "There are not enough bytes remaining in the accessor to read at this position.";
        public const string Argument_NotEnoughBytesToWrite = "There are not enough bytes remaining in the accessor to write at this position.";
        public const string Argument_OffsetAndCapacityOutOfBounds = "Offset and capacity were greater than the size of the view.";
+       public const string ArgumentOutOfRange_UnmanagedMemStreamLength = "UnmanagedMemoryStream length must be non-negative and less than 2^63 - 1 - baseAddress.";
        public const string Argument_UnmanagedMemAccessorWrapAround = "The UnmanagedMemoryAccessor capacity and offset would wrap around the high end of the address space.";
        public const string ArgumentOutOfRange_StreamLength = "Stream length must be non-negative and less than 2^31 - 1 - origin.";
        public const string ArgumentOutOfRange_UnmanagedMemStreamWrapAround = "The UnmanagedMemoryStream capacity would wrap around the high end of the address space.";
@@ -760,6 +763,20 @@ partial class SR
        public const string EventSource_EventSourceGuidInUse = "An instance of EventSource with Guid {0} already exists.";
        public const string EventSource_ListenerWriteFailure = "An error occurred when writing to a listener.";
        public const string EventSource_NoManifest = "A manifest could not be generated for this EventSource because it contains one or more ill-formed event methods.";
+       public const string Argument_StreamNotWritable = "Stream was not writable.";
+       public const string Arg_SurrogatesNotAllowedAsSingleChar = "Unicode surrogate characters must be written out as pairs together in the same call, not individually. Consider passing in a character array instead.";
+       public const string CustomAttributeFormat_InvalidFieldFail = "'{0}' field specified was not found.";
+       public const string CustomAttributeFormat_InvalidPropertyFail = "'{0}' property specified was not found.";
+       public const string NotSupported_CannotCallEqualsOnSpan = "Equals() on Span and ReadOnlySpan is not supported. Use operator== instead.";
+       public const string NotSupported_CannotCallGetHashCodeOnSpan = "GetHashCode() on Span and ReadOnlySpan is not supported.";
+       public const string Argument_DestinationTooShort = "Destination is too short.";
+       public const string Argument_InvalidTypeWithPointersNotSupported = "Cannot use type '{0}'. Only value types without pointers or references are supported.";
+       public const string ArrayTypeMismatch_ConstrainedCopy = "Array.ConstrainedCopy will only work on array types that are provably compatible, without any form of boxing, unboxing, widening, or casting of each array element.  Change the array types (i.e., copy a Derived[] to a Base[]), or use a mitigation strategy in the CER for Array.Copy's less powerful reliability contract, such as cloning the array or throwing away the potentially corrupt destination array.";
+       public const string Arg_DllNotFoundException = "Dll was not found.";
+       public const string Arg_DllNotFoundExceptionParameterized = "Unable to load DLL '{0}': The specified module could not be found.";
+       public const string WrongSizeArrayInNStruct = "Type could not be marshaled because the length of an embedded array instance does not match the declared length in the layout.";
+       public const string Arg_InteropMarshalUnmappableChar = "Cannot marshal: Encountered unmappable character.";
+       public const string Arg_MarshalDirectiveException = "Marshaling directives are invalid.";
        public const string BlockingCollection_Add_ConcurrentCompleteAdd = "CompleteAdding may not be used concurrently with additions to the collection.";
        public const string BlockingCollection_Add_Failed = "The underlying collection didn't accept the item.";
        public const string BlockingCollection_CantAddAnyWhenCompleted = "At least one of the specified collections is marked as complete with regards to additions.";
@@ -801,4 +818,7 @@ partial class SR
        public const string PartitionerStatic_CanNotCallGetEnumeratorAfterSourceHasBeenDisposed = "Can not call GetEnumerator on partitions after the source enumerable is disposed";
        public const string PartitionerStatic_CurrentCalledBeforeMoveNext = "MoveNext must be called at least once before calling Current.";
        public const string ConcurrentBag_Enumerator_EnumerationNotStartedOrAlreadyFinished = "Enumeration has either not started or has already finished.";
+       public const string ArrayTypeMustBeExactMatch = "The array type must be exactly {0}.";
+       public const string CannotCallEqualsOnSpan = "Equals() on Span and ReadOnlySpan is not supported. Use operator== instead.";
+       public const string CannotCallGetHashCodeOnSpan = "GetHashCode() on Span and ReadOnlySpan is not supported.";
 }
diff --git a/mcs/class/corlib/corert/Stream.cs b/mcs/class/corlib/corert/Stream.cs
new file mode 100644 (file)
index 0000000..559cefb
--- /dev/null
@@ -0,0 +1,15 @@
+namespace System.IO
+{
+       partial class Stream
+       {
+               public virtual int Read (Span<byte> destination)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public virtual void Write(ReadOnlySpan<byte> source)
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
\ No newline at end of file
index 89d190cbaeae41fb5cdd8c672c57ed75046ac038..9127f396014b88f5da9da7a7a89af1d966b68de9 100644 (file)
@@ -326,6 +326,7 @@ System.Runtime/GCSettings.cs
 System.Runtime/MemoryFailPoint.cs
 System.Runtime.CompilerServices/ConditionalWeakTable.cs
 System.Runtime.CompilerServices/RuntimeHelpers.cs
+System.Runtime.CompilerServices/Unsafe.cs
 System.Runtime.Hosting/ActivationArguments.cs
 System.Runtime.Hosting/ApplicationActivator.cs
 System.Runtime.InteropServices/_Activator.cs
@@ -1621,6 +1622,7 @@ corert/Debug.cs
 corert/EnvironmentAugments.cs
 corert/RelocatedTypeAttribute.cs
 corert/RuntimeThread.cs
+corert/Stream.cs
 corert/ThreadPoolBoundHandle.cs
 
 ../../../external/corert/src/Common/src/Interop/Unix/Interop.Libraries.cs
@@ -1673,6 +1675,15 @@ corefx/SR.cs
 ../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/Partitioner.cs
 ../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/PartitionerStatic.cs
 
+../../../external/corefx/src/System.Memory/src/System/Pinnable.cs
+../../../external/corefx/src/System.Memory/src/System/ReadOnlySpan.cs
+../../../external/corefx/src/System.Memory/src/System/Span.cs
+../../../external/corefx/src/System.Memory/src/System/SpanDebugView.cs
+../../../external/corefx/src/System.Memory/src/System/SpanHelpers.cs
+../../../external/corefx/src/System.Memory/src/System/SpanHelpers.Clear.cs
+../../../external/corefx/src/System.Memory/src/System/ThrowHelper.cs
+
+
 System.Security.Cryptography.X509Certificates/X509CertificateImplApple.cs
 System.Security.Cryptography.X509Certificates/X509Helper.Apple.cs
 CoreFoundation/CFHelpers.cs
index 88d9315ab5c5770e1563b43fa6d03d820959090c..d9c83984c2db4059f0d093659540354d6c2019fc 100644 (file)
@@ -1,5 +1,4 @@
 ../../../external/corefx/src/CoreFx.Private.TestUtilities/src/System/AssertExtensions.cs
-../../../external/corefx/src/Common/tests/System/PlatformDetection.cs
 
 ../../../external/corefx/src/System.Reflection.Emit/tests/Utilities.cs
 
diff --git a/mcs/class/corlib/il/Makefile b/mcs/class/corlib/il/Makefile
new file mode 100644 (file)
index 0000000..8493711
--- /dev/null
@@ -0,0 +1,15 @@
+thisdir = class/corlib/il
+
+include ../../../build/rules.make
+include il.make
+
+clean-local:
+
+TMP_MSCORLIB = $(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.input
+
+all-local: $(IL_REPLACE)
+       cp $(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.dll $(TMP_MSCORLIB)
+       $(Q) $(STRING_REPLACER) --ilreplace=$(IL_REPLACE) $(TMP_MSCORLIB)
+       mv $(TMP_MSCORLIB) $(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.dll
+
+install-local:
diff --git a/mcs/class/corlib/il/il.make b/mcs/class/corlib/il/il.make
new file mode 100644 (file)
index 0000000..f88c347
--- /dev/null
@@ -0,0 +1,6 @@
+IL_REPLACE = $(topdir)/class/lib/$(PROFILE_DIRECTORY)/corlib.unsafe.dll.tmp
+
+$(topdir)/class/lib/$(PROFILE_DIRECTORY)/corlib.unsafe.dll.tmp: $(topdir)/class/corlib/System.Runtime.CompilerServices/Unsafe.il
+       $(Q) $(ILASM) $< /dll /noautoinherit /out:$@
+
+CLEAN_FILES += $(IL_REPLACE)
index 57b4b63272173f388a814d03e002fce45b66d500..74211ede99e5ae32ad641dc21172c3583e70c9d1 100644 (file)
@@ -103,6 +103,16 @@ namespace System {
             return (*(UInt64*)(&d) & 0x7FFFFFFFFFFFFFFFL) > 0x7FF0000000000000L;
         }
 
+#if MONO
+        [Pure]
+        [System.Runtime.Versioning.NonVersionable]
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public unsafe static bool IsFinite(double d)
+        {
+            var bits = BitConverter.DoubleToInt64Bits(d);
+            return (bits & 0x7FFFFFFFFFFFFFFF) < 0x7FF0000000000000;
+        }
+#endif
 
         // Compares this object to another object, returning an instance of System.Relation.
         // Null is considered less than any instance.
index fa022e96e5d8fc29a94d34b28c2212e6eadd28f1..d830182a037bf3dff46af90e3ca65b233eb12a95 100644 (file)
@@ -40,7 +40,7 @@ namespace System.IO {
     [ContractClass(typeof(StreamContract))]
 #endif
 #if FEATURE_REMOTING || MONO
-    public abstract class Stream : MarshalByRefObject, IDisposable {
+    public abstract partial class Stream : MarshalByRefObject, IDisposable {
 #else // FEATURE_REMOTING
     public abstract class Stream : IDisposable {
 #endif // FEATURE_REMOTING
@@ -195,6 +195,9 @@ namespace System.IO {
             InternalCopyTo(destination, _DefaultCopyBufferSize);
         }
 
+#if MONO
+        virtual
+#endif
         public void CopyTo(Stream destination, int bufferSize)
         {
             if (destination == null)
index 5e2cf73befd5bb2729743ab88567dab9722c58d7..3338e560db9ac10e2081943aff9e252f4968c078 100644 (file)
@@ -76,6 +76,15 @@ namespace System {
             return (*(int*)(&f) & 0x7FFFFFFF) > 0x7F800000;
         }
 
+#if MONO
+        [Pure]
+        [System.Runtime.Versioning.NonVersionable]
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public unsafe static bool IsFinite(float f) {
+            return (*(int*)(&f) & 0x7FFFFFFF) < 0x7F800000;
+        }
+#endif
+
         // Compares this object to another object, returning an integer that
         // indicates the relationship.
         // Returns a value less than zero if this  object
index a47c670b31af5841940e2119a8155f4747e7b440..4bb821293ccc6d256db61ac20d3d35cad2d95278 100644 (file)
@@ -51,7 +51,7 @@ namespace System {
     using System.Diagnostics.Contracts;
 
     [Pure]
-    internal static class ThrowHelper {    
+    internal static partial class ThrowHelper {
         internal static void ThrowArgumentOutOfRangeException() {        
             ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);            
         }
@@ -76,6 +76,7 @@ namespace System {
             throw new ArgumentException(Environment.GetResourceString(GetResourceName(resource)), GetArgumentName(argument));
         }
 
+#if !MONO
         internal static void ThrowArgumentNullException(ExceptionArgument argument) {
             throw new ArgumentNullException(GetArgumentName(argument));
         }
@@ -83,6 +84,7 @@ namespace System {
         internal static void ThrowArgumentOutOfRangeException(ExceptionArgument argument) {
             throw new ArgumentOutOfRangeException(GetArgumentName(argument));
         }
+#endif
 
         internal static void ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) {
                 
@@ -468,6 +470,9 @@ namespace System {
         options,
         view,
         sourceBytesToCopy,
+#if MONO
+        start,
+#endif
     }
 
     //
diff --git a/mcs/class/test-helpers/PlatformDetection.cs b/mcs/class/test-helpers/PlatformDetection.cs
new file mode 100644 (file)
index 0000000..d9f6d38
--- /dev/null
@@ -0,0 +1,7 @@
+namespace System
+{
+       static partial class PlatformDetection
+       {
+               public static readonly bool IsNetNative = false;
+       }
+}
\ No newline at end of file
index 3226b3911d9b291093cc8d100a871014dc7f016a..9892827b2d79088e979acea2849bd0f7256a0b3f 100644 (file)
@@ -40,6 +40,7 @@ public class Program
                public bool ShowHelp { get; set; }
                public bool Verbose { get; set; }
                public List<string> ResourcesStrings { get; }
+               public string ILFile { get; set; }
 
                public CmdOptions ()
                {
@@ -54,10 +55,12 @@ public class Program
                var p = new OptionSet () {
                        { "r|resourcestrings=", "File with string resource in key=value format",
                                v => options.ResourcesStrings.Add (v) },
-                       { "h|help",  "Display available options", 
+                       { "h|help",  "Display available options",
                                v => options.ShowHelp = v != null },
-                       { "v|verbose",  "Use verbose output", 
-                               v => options.Verbose = v != null },                     
+                       { "v|verbose",  "Use verbose output",
+                               v => options.Verbose = v != null },
+                       { "ilreplace=", "File with IL code to be used instead",
+                               v => options.ILFile = v },
                };
 
                List<string> extra;
@@ -100,6 +103,24 @@ public class Program
 
        static void RewriteAssembly (string assemblyLocation, Dictionary<string, string> resourcesStrings, CmdOptions options)
        {
+               var methods = new Dictionary<string, MethodBody> (StringComparer.Ordinal);
+               if (options.ILFile != null) {
+                       var rp = new ReaderParameters {
+                               InMemory = true
+                       };
+
+                       using (var module = ModuleDefinition.ReadModule (options.ILFile,rp)) {
+                               foreach (var type in module.GetTypes ()) {
+                                       foreach (var method in type.Methods) {
+                                               if (!method.HasBody)
+                                                       continue;
+
+                                               methods.Add (method.FullName, method.Body);
+                                       }
+                               }
+                       }
+               }
+
                var readerParameters = new ReaderParameters {
                        ReadSymbols = true,
                        ReadWrite = true,
@@ -113,6 +134,33 @@ public class Program
                                                if (!method.HasBody)
                                                        continue;
 
+                                               MethodBody newBody;
+                                               if (methods.TryGetValue (method.FullName, out newBody)) {
+                                                       var mbody = method.Body;
+                                                       mbody.Instructions.Clear ();
+                                                       foreach (var instr in newBody.Instructions) {
+                                                               switch (instr.OpCode.OperandType) {
+                                                               case OperandType.InlineType:
+                                                                       var tr = (TypeReference)instr.Operand;
+                                                                       foreach (var t in method.GenericParameters) {
+                                                                               if (tr.FullName == t.FullName) {
+                                                                                       instr.Operand = t;
+                                                                                       break;
+                                                                               }
+                                                                       }
+
+                                                                       break;
+                                                               }
+
+                                                               mbody.Instructions.Add (instr);
+                                                       }
+
+                                                       method.Body.Variables.Clear ();
+                                                       foreach (var variable in newBody.Variables) {
+                                                               mbody.Variables.Add (variable);
+                                                       }
+                                               }
+
                                                foreach (var instr in method.Body.Instructions) {
                                                        if (instr.OpCode != OpCodes.Ldstr)
                                                                continue;