diff options
258 files changed, 3733 insertions, 4871 deletions
diff --git a/.gitattributes b/.gitattributes index f1689375385..25a58f158fc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,6 +4,9 @@ config.rpath crlf=input configure.host crlf=input mkinstalldirs crlf=input *.sh crlf=input +*.sources crlf=input +.gitattributes crlf=input +*akefile* crlf=input # ensure native line endings on checkout *.c crlf @@ -11,10 +14,6 @@ mkinstalldirs crlf=input *.cs crlf *.il crlf -.gitattributes crlf -*akefile* crlf -*.sources crlf - # don't do anything to line-endings. Let CRLFs go into the repo, and CRLF on checkout *.bat -crlf *.sln -crlf diff --git a/acceptance-tests/SUBMODULES.json b/acceptance-tests/SUBMODULES.json index 9df7b8a5811..1fedbe94fea 100644 --- a/acceptance-tests/SUBMODULES.json +++ b/acceptance-tests/SUBMODULES.json @@ -18,7 +18,7 @@ { "name": "ms-test-suite", "url": "git@github.com:xamarin/ms-test-suite.git", - "rev": "55b6637eb1de61c743323ec82db1e0cadfee5b32", + "rev": "73c155f76b55839f26ba707d6d40091060e4f5d8", "remote-branch": "origin/master", "branch": "master", "directory": "ms-test-suite" diff --git a/configure.ac b/configure.ac index 387b6d297ba..71f242d6fc7 100644 --- a/configure.ac +++ b/configure.ac @@ -334,9 +334,13 @@ case "$host" in CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE" libmono_cflags="-D_REENTRANT -D_THREAD_SAFE" libdl= - LIBS="$LIBS -lnetwork" + LIBS="$LIBS -lnetwork -ltextencoding" need_link_unlink=yes AC_DEFINE(PTHREAD_POINTER_ID) + dnl Haiku does not support static TLS with __thread + with_tls=pthread + dnl Boehm is too much work to backport Haiku support for + support_boehm=no libgc_threads=pthreads use_sigposix=yes ;; @@ -882,10 +886,6 @@ elif test x$with_runtime_preset = xhybridaot; then with_testing_aot_hybrid_default=yes TEST_PROFILE=testing_aot_hybrid - mono_feature_disable_com='yes' - mono_feature_disable_remoting='yes' - mono_feature_disable_appdomains='yes' - AOT_BUILD_FLAGS="--aot=hybrid,$INVARIANT_AOT_OPTIONS" AOT_RUN_FLAGS="--hybrid-aot" elif test x$with_runtime_preset = xaot; then @@ -1432,8 +1432,6 @@ if test x$host_win32 = xno; then AC_CHECK_FUNCS(getgrgid_r) AC_CHECK_FUNCS(getgrnam_r) - AC_CHECK_FUNCS(getpwnam_r) - AC_CHECK_FUNCS(getpwuid_r) AC_CHECK_FUNCS(getresuid) AC_CHECK_FUNCS(setresuid) AC_CHECK_FUNCS(kqueue) @@ -1454,6 +1452,11 @@ if test x$host_win32 = xno; then AC_CHECK_FUNCS(sched_setaffinity) AC_CHECK_FUNCS(sched_getcpu) + if test x$platform_android != xyes; then + AC_CHECK_FUNCS(getpwnam_r) + AC_CHECK_FUNCS(getpwuid_r) + fi + dnl **************************************************************** dnl *** Check for sched_setaffinity from glibc versions before *** dnl *** 2.3.4. The older versions of the function only take 2 *** @@ -1914,6 +1917,10 @@ if test x$host_win32 = xno; then # and libpthread does not exist # case "${host}" in + *-*-*haiku*) + dnl Haiku has pthread in libroot (libc equiv) + AC_CHECK_LIB(pthread, main, LIBS="$LIBS") + ;; *-*-*freebsd*) AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread") ;; @@ -2324,6 +2331,10 @@ if test x$host_win32 = xno; then ]) dnl ********************************** + dnl *** Checks for proclib *** + dnl ********************************** + AC_CHECK_HEADER(sys/errno.h, [AC_DEFINE(HAVE_SYS_ERRNO_H, 1, Define to 1 if you have the <sys/errno.h> header file.)]) + dnl ********************************** dnl *** Checks for MonoPosixHelper *** dnl ********************************** AC_CHECK_HEADERS(checklist.h) @@ -3314,7 +3325,6 @@ if test "x$host" != "x$target"; then TARGET=ARM; arch_target=arm; AC_DEFINE(TARGET_ARM, 1, [...]) - AC_DEFINE(TARGET_ANDROID, 1, [...]) ACCESS_UNALIGNED="no" CPPFLAGS="$CPPFLAGS -D__ARM_EABI__" # Can't use tls, since it depends on the runtime detection of tls offsets @@ -3327,6 +3337,11 @@ if test "x$host" != "x$target"; then CPPFLAGS="$CPPFLAGS" ;; armv5-*-linux-androideabi*) + AC_DEFINE(TARGET_ANDROID, 1, [...]) + CPPFLAGS="$CPPFLAGS" + ;; + *-linux-androideabi*) + AC_DEFINE(TARGET_ANDROID, 1, [...]) CPPFLAGS="$CPPFLAGS" ;; esac @@ -3346,23 +3361,33 @@ if test "x$host" != "x$target"; then TARGET=X86; arch_target=x86; AC_DEFINE(TARGET_X86, 1, [...]) - AC_DEFINE(TARGET_ANDROID, 1, [...]) CPPFLAGS="$CPPFLAGS" # Can't use tls, since it depends on the runtime detection of tls offsets # in mono-compiler.h with_tls=pthread target_mach=no + + case "$target" in + *-linux-android*) + AC_DEFINE(TARGET_ANDROID, 1, [...]) + ;; + esac ;; x86_64*-linux-*) TARGET=AMD64; arch_target=amd64; AC_DEFINE(TARGET_AMD64, 1, [...]) - AC_DEFINE(TARGET_ANDROID, 1, [...]) CPPFLAGS="$CPPFLAGS" # Can't use tls, since it depends on the runtime detection of tls offsets # in mono-compiler.h with_tls=pthread target_mach=no + + case "$target" in + *-linux-android*) + AC_DEFINE(TARGET_ANDROID, 1, [...]) + ;; + esac ;; x86_64-ps4-freebsd) TARGET=AMD64; @@ -3381,12 +3406,16 @@ if test "x$host" != "x$target"; then TARGET=ARM64; arch_target=arm64; AC_DEFINE(TARGET_ARM64, 1, [...]) - AC_DEFINE(TARGET_ANDROID, 1, [...]) CPPFLAGS="$CPPFLAGS" # Can't use tls, since it depends on the runtime detection of tls offsets # in mono-compiler.h with_tls=pthread target_mach=no + case "$target" in + *-linux-android*) + AC_DEFINE(TARGET_ANDROID, 1, [...]) + ;; + esac ;; aarch64-*) TARGET=ARM64 diff --git a/data/lock-decoder/LockTracerDecoder.cs b/data/lock-decoder/LockTracerDecoder.cs index 08576f1a7de..1471ea51181 100644 --- a/data/lock-decoder/LockTracerDecoder.cs +++ b/data/lock-decoder/LockTracerDecoder.cs @@ -86,7 +86,7 @@ LOCK RULES Simple locks: Can be acquired at any point regardless of which locks are taken or not. No other locks can be acquired or released while holding a simple lock. - Reentrancy is not recomended. (warning) + Reentrancy is not recommended. (warning) Simple locks are leaf locks on the lock lattice. Complex locks: @@ -129,7 +129,7 @@ ERROR: tried to acquire lock DomainLock at mono_domain_code_reserve_align while WARNING: tried to acquire lock ImageDataLock at mono_image_init_name_cache while holding ImageDataLock at mono_class_from_name WARNING: tried to acquire lock ImageDataLock at mono_image_init_name_cache while holding ImageDataLock at mono_image_add_to_name_cache Both of those happen when filling up the name_cache, as it needs to alloc image memory. - This one is fixable by spliting mono_image_init_name_cache into a locked and an unlocked variants and calling them appropriatedly. + This one is fixable by splitting mono_image_init_name_cache into a locked and an unlocked variants and calling them appropriately. */ diff --git a/docs/.gitattributes b/docs/.gitattributes new file mode 100644 index 00000000000..1847f864cba --- /dev/null +++ b/docs/.gitattributes @@ -0,0 +1,3 @@ +check-coverage crlf=input +check-exports crlf=input +produce-lists crlf=input diff --git a/docs/abc-removal.txt b/docs/abc-removal.txt index b44089c0de9..5c2ce91fd5f 100755 --- a/docs/abc-removal.txt +++ b/docs/abc-removal.txt @@ -26,7 +26,7 @@ some combination of the two. To be clearer, and give an idea of what the algorithm can and cannot do without describing it in detail... keep in mind that - only "redunant" checks cannot be removed. By "redundant", I + only "redundant" checks cannot be removed. By "redundant", I mean "already explicitly checked" in the method code. Unfortunately, analyzing complex expressions is not so easy @@ -136,7 +136,7 @@ some combination of the two. In the first case, the BB has exactly two exit BBs, and their execution conditions are easy to get from the condition of the branch (see the "get_relation_from_branch_instruction" - function, and expecially the end of "analyze_block" in + function, and especially the end of "analyze_block" in abcremoval.c. If there is a switch, the jump condition of every exit BB is @@ -303,7 +303,7 @@ some combination of the two. each BB tried to examine all possible conditions between all variables, filling a sort of "evaluation matrix". The problem was that the complexity of this evaluation was quadratic (or - worse) on the number of variables, and that many wariables + worse) on the number of variables, and that many variables were examined even if they were not involved in any array access. @@ -332,7 +332,7 @@ some combination of the two. [1b] Prepare the evaluation graph (empty) - [1b] Summarize each varible definition, and put + [1b] Summarize each variable definition, and put the resulting relations in the evaluation graph diff --git a/eglib/configure.ac b/eglib/configure.ac index 89f85d18e59..92cd6156f94 100644 --- a/eglib/configure.ac +++ b/eglib/configure.ac @@ -94,6 +94,9 @@ arm*-darwin*|aarch64*-*) i*86-*-darwin*) ORDER=G_LITTLE_ENDIAN ;; +*-*-haiku*) + LDFLAGS="$LDFLAGS -ltextencoding" + ;; *-*-openbsd*) CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" diff --git a/external/bockbuild b/external/bockbuild -Subproject 7d446abd40b5331b5900cc280dfe8c6d1a1eee4 +Subproject e8abd2e5568b32bd985befca308016d4526158e diff --git a/external/cecil b/external/cecil -Subproject cb70cbe67af98fcae2a35c97f86a6bbf04d05aa +Subproject f41352fa7dce0162d3172004617121fe28f06a8 diff --git a/external/corefx b/external/corefx -Subproject 7668f9bab6c688eef882bfd0b74dd5e86a9ddc1 +Subproject c718457f0540c9b19be7f866dddb153e17ea302 diff --git a/external/ikvm b/external/ikvm -Subproject 367864ef810859ae3ce652864233b35f2dd5fdb +Subproject 7c1e61bec8c069b2cc9e214c3094b147d76bbf8 diff --git a/libgc/blacklst.c b/libgc/blacklst.c index ae2f95cb3fe..5e6ebcfb7a3 100644 --- a/libgc/blacklst.c +++ b/libgc/blacklst.c @@ -21,7 +21,7 @@ * See the definition of page_hash_table in gc_private.h. * False hits from the stack(s) are much more dangerous than false hits * from elsewhere, since the former can pin a large object that spans the - * block, eventhough it does not start on the dangerous block. + * block, even though it does not start on the dangerous block. */ /* diff --git a/libgc/doc/README.changes b/libgc/doc/README.changes index fa6f279f518..c30d2fc2184 100644 --- a/libgc/doc/README.changes +++ b/libgc/doc/README.changes @@ -1872,7 +1872,7 @@ Since 6.2alpha6: - Fixed Makefile.direct for DARWIN. (Thanks to Manuel Serrano.) - There was a race between GC_pthread_detach and thread exit that could result in a thread structure being deallocated by GC_pthread_detach - eventhough it was still needed by the thread exit code. (Thanks to + even though it was still needed by the thread exit code. (Thanks to Dick Porter for the small test case that allowed this to be debugged.) - Fixed version parsing for non-alpha versions in acinclude.m4 and version checking in version.h. diff --git a/libgc/doc/README.macros b/libgc/doc/README.macros index df0ef2cda93..153a3e0f914 100644 --- a/libgc/doc/README.macros +++ b/libgc/doc/README.macros @@ -19,7 +19,7 @@ relatively easy to adapt to new compilers with a different set of predefined macros. Currently these macros generally identify platforms instead of features. In many cases, this is a mistake. -3) The code currently avoids #elif, eventhough that would make it more +3) The code currently avoids #elif, even though that would make it more readable. This was done since #elif would need to be understood by ALL compilers used to build the collector, and that hasn't always been the case. It makes sense to reconsider this decision at some point, since #elif has been diff --git a/libgc/mark.c b/libgc/mark.c index e14e5296c59..e870342e412 100644 --- a/libgc/mark.c +++ b/libgc/mark.c @@ -936,7 +936,7 @@ void GC_do_local_mark(mse *local_mark_stack, mse *local_top) /* Try to share the load, since the main stack is empty, */ /* and helper threads are waiting for a refill. */ /* The entries near the bottom of the stack are likely */ - /* to require more work. Thus we return those, eventhough */ + /* to require more work. Thus we return those, even though */ /* it's harder. */ mse * p; mse * new_bottom = local_mark_stack diff --git a/man/mdoc.5 b/man/mdoc.5 index 440fc15a397..3cd4bbea555 100644 --- a/man/mdoc.5 +++ b/man/mdoc.5 @@ -765,7 +765,7 @@ Refers to a namespace, e.g. \fIN:System\fR. .I "P:" Refers to a property. If the property is an indexer or takes parameters, the parameter types are appended to the property name and enclosed with -paranthesis: +parenthesis: \fIP:System.String.Length\fR, \fIP:System.String.Chars(System.Int32)\fR. .TP diff --git a/man/mono.1 b/man/mono.1 index 7b8506ae8a7..4c99a8dd0d8 100644 --- a/man/mono.1 +++ b/man/mono.1 @@ -609,7 +609,7 @@ Finally, namespaces can be specified using the N: prefix: Don't align stack frames on the x86 architecture. By default, Mono aligns stack frames to 16 bytes on x86, so that local floating point and SIMD variables can be properly aligned. This option turns off the -alignment, which usually saves one intruction per call, but might +alignment, which usually saves one instruction per call, but might result in significantly lower floating point and SIMD performance. .TP \fB--jitmap\fR diff --git a/man/monodocer.1 b/man/monodocer.1 index 19d74030527..8bbc34cb239 100644 --- a/man/monodocer.1 +++ b/man/monodocer.1 @@ -237,7 +237,7 @@ to the type name, while methods append the method name (with an optional count of the number of generic parameters). .Sp If the constructor or method take arguments, these are listed within -paranthesis after the constructor/method name: +parenthesis after the constructor/method name: .Sp .I M:System.Object..ctor , @@ -259,7 +259,7 @@ Refers to a namespace, e.g. .I "P:" Refers to a property. If the property is an indexer or takes parameters, the parameter types are appended to the property name and enclosed with -paranthesis: +parenthesis: .I P:System.String.Length , .I P:System.String.Chars(System.Int32) diff --git a/man/sqlsharp.1 b/man/sqlsharp.1 index 4bf500ffd4a..008fddbfc5c 100644 --- a/man/sqlsharp.1 +++ b/man/sqlsharp.1 @@ -407,7 +407,7 @@ mysql MySQL AB MySql.Data.MySqlClient MySql.Data NOTES: Ngsql is the .Net Data Provider for PosgreSQL. The -latest verison can be downloaded from +latest version can be downloaded from http://npgsql.projects.postgresql.org/ MySql.Data is the MySQL Connector/Net for connecting to MySql databases. diff --git a/mcs/.gitattributes b/mcs/.gitattributes index 1f9c224a2bb..b81912bae54 100644 --- a/mcs/.gitattributes +++ b/mcs/.gitattributes @@ -1,2 +1,3 @@ /LICENSE.MSPL -crlf /ScalableMonoIcon.svg -crlf +/winexe.in crlf=input diff --git a/mcs/CodingStyle b/mcs/CodingStyle index 9d2deb9122f..54aa55d1545 100644 --- a/mcs/CodingStyle +++ b/mcs/CodingStyle @@ -134,7 +134,7 @@ code (); } - * Avoid using unecessary open/close braces, vertical space + * Avoid using unnecessary open/close braces, vertical space is usually limited: good: @@ -474,4 +474,4 @@ class X : Y { MyHelperClass.cli.cs MyHelperClass.jvm.cs - By using partial classes.
\ No newline at end of file + By using partial classes. diff --git a/mcs/class/Microsoft.CSharp/Makefile b/mcs/class/Microsoft.CSharp/Makefile index ae919ca94fb..e22eae3e178 100644 --- a/mcs/class/Microsoft.CSharp/Makefile +++ b/mcs/class/Microsoft.CSharp/Makefile @@ -4,8 +4,10 @@ include ../../build/rules.make LIBRARY = Microsoft.CSharp.dll -LIB_REFS = System.Core Mono.CSharp +LIB_REFS = System.Core System LIB_MCS_FLAGS = +RESX_RESOURCE_STRING = ../../../external/corefx/src/Microsoft.CSharp/src/Resources/Strings.resx + include ../../build/library.make diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp-net_4_x.csproj b/mcs/class/Microsoft.CSharp/Microsoft.CSharp-net_4_x.csproj index 41574527162..e764b1041be 100644 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp-net_4_x.csproj +++ b/mcs/class/Microsoft.CSharp/Microsoft.CSharp-net_4_x.csproj @@ -49,29 +49,201 @@ </PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Binder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\BinderHelper.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpArgumentInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpArgumentInfoFlags.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpBinaryOperationBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpBinaryOperationFlags.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpBinderFlags.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpCallFlags.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpConversionKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpConvertBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpGetIndexBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpGetMemberBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpInvokeBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpInvokeConstructorBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpInvokeMemberBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpIsEventBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpSetIndexBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpSetMemberBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\CSharpUnaryOperationBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Error.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\CController.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\CError.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\CErrorFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\CParameterizedError.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\ErrorCode.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\ErrorFacts.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\ErrorFmt.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\ErrorHandling.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\IErrorSink.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\MessageID.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Errors\UserStringBuilder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\ExpressionTreeCallRewriter.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\ICSharpInvokeOrInvokeMemberBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\ResetBindException.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\RuntimeBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\RuntimeBinderController.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\RuntimeBinderException.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\RuntimeBinderExtensions.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\RuntimeBinderInternalCompilerException.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Binding\Better.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Binding\ErrorReporting.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BindingContextBase.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BindingContexts.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BindingFlag.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BinOpArgInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BinOpKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\BinOpSig.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\CandidateFunctionMember.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ConstVal.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ConstValFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Conversion.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Conversions.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\COperators.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Declarations\AggregateDeclaration.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Declarations\Declaration.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Declarations\GlobalAttributeDeclaration.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Declarations\NamespaceDeclaration.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ExplicitConversion.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ExpressionBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ExpressionKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\EXPRExtensions.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ExprFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\EXPRFLAG.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\FileRecord.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\FundamentalTypes.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\GlobalSymbolContext.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\GroupToArgsBinder.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\GroupToArgsBinderResult.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ImplicitConversion.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\InputFile.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\ITypeOrNamespace.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\LangCompiler.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MemberLookup.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MemberLookupResults.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MetadataToken.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MethodIterator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MethodKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\MethodTypeInferrer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\NameGenerator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Nullable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\NullableLift.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Operators.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\OriginalExpressions.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\PredefinedAttributes.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\PredefinedMembers.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\SemanticChecker.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\SubstitutionContext.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\AggregateSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\AssemblyQualifiedNamespaceSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\EventSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\FieldSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\IndexerSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\LabelSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\LocalVariableSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\MethodOrPropertySymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\MethodSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\MiscSymFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\NamespaceOrAggregateSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\NamespaceSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\ParentSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\PropertySymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\Scope.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\Symbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymbolKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymbolLoader.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymbolManagerBase.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymbolMask.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymbolTable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\SymFactoryBase.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\TransparentIdentifierMemberSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\TypeParameterSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\UnresolvedAggregateSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Symbols\VariableSymbol.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ArrayIndex.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ArrayInitialization.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ArrayLength.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Assignment.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\BinaryOperator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Block.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\BoundAnonymousFunction.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Call.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Cast.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Class.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\CompoundOperator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Concatenate.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ConditionalOperator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Constant.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Event.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\EXPR.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ExpressionIterator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Field.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\FieldInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\HoistedLocal.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\List.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\LocalVariable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\MemberGroup.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\MethodInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\MethodReference.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\NamedArgumentSpecification.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Property.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\PropertyInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Return.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Statement.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Temporary.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\This.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeArguments.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeOf.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeOrNamespace.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UnaryOperator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UnboundAnonymousFunction.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UserDefinedConversion.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UserDefinedLogicalOperator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Visitors\ExpressionTreeRewriter.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Visitors\ExprVisitorBase.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ZeroInitialize.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\TypeBind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\AggregateType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\ArgumentListType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\ArrayType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\BoundLambdaType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\ErrorType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\MethodGroupType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\NullableType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\NullType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\OpenTypePlaceholderType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\ParameterModifierType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\PointerType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\PredefinedTypes.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\Type.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeArray.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeFactory.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeKind.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeManager.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeParameterType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\TypeTable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\Types\VoidType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\UnaOpSig.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\UtilityTypeExtensions.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Semantics\WithType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\SpecialNames.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\SymbolTable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\KnownName.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\NameManager.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\Names.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\NameTable.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\Operators.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\PredefinedName.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\PredefinedType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\TokenFacts.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Microsoft.CSharp\src\Microsoft\CSharp\RuntimeBinder\Syntax\TokenKind.cs" />
+ <Compile Include="..\..\build\common\Consts.cs" />
+ <Compile Include="..\..\build\common\SR.cs" />
<Compile Include="Assembly\AssemblyInfo.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\Binder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpArgumentInfo.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpArgumentInfoFlags.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpBinaryOperationBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpBinderFlags.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpConvertBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpGetIndexBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpGetMemberBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpInvokeBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpInvokeConstructorBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpInvokeMemberBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpIsEventBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpSetIndexBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpSetMemberBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\CSharpUnaryOperationBinder.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\DynamicContext.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\ErrorPrinter.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\Extensions.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\RuntimeBinderContext.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\RuntimeBinderException.cs" />
- <Compile Include="Microsoft.CSharp.RuntimeBinder\RuntimeBinderInternalCompilerException.cs" />
</ItemGroup>
+ <Compile Include="corefx\SR.cs" />
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
@@ -102,9 +274,9 @@ <Project>{359142A1-D80F-401E-AA64-7167C9317649}</Project>
<Name>System.Core-net_4_x</Name>
</ProjectReference>
- <ProjectReference Include="../Mono.CSharp/Mono.CSharp-net_4_x.csproj">
- <Project>{BEFCA993-98B4-48E9-8D68-1ACCB1FA7200}</Project>
- <Name>Mono.CSharp-net_4_x</Name>
+ <ProjectReference Include="../System/System-net_4_x.csproj">
+ <Project>{2762E921-91A8-4C87-91E9-BA628013F753}</Project>
+ <Name>System-net_4_x</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Binder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Binder.cs deleted file mode 100644 index c8d56872c92..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Binder.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// Binder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Linq.Expressions; -using System.Reflection; - -namespace Microsoft.CSharp.RuntimeBinder -{ - public static class Binder - { - public static CallSiteBinder BinaryOperation (CSharpBinderFlags flags, ExpressionType operation, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpBinaryOperationBinder (operation, flags, context, argumentInfo); - } - - public static CallSiteBinder Convert (CSharpBinderFlags flags, Type type, Type context) - { - return new CSharpConvertBinder (type, context, flags); - } - - public static CallSiteBinder GetIndex (CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpGetIndexBinder (context, argumentInfo); - } - - public static CallSiteBinder GetMember (CSharpBinderFlags flags, string name, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpGetMemberBinder (name, context, argumentInfo); - } - - public static CallSiteBinder Invoke (CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpInvokeBinder (flags, context, argumentInfo); - } - - public static CallSiteBinder InvokeConstructor (CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - // What are flags for here - return new CSharpInvokeConstructorBinder (context, argumentInfo); - } - - public static CallSiteBinder InvokeMember (CSharpBinderFlags flags, string name, IEnumerable<Type> typeArguments, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpInvokeMemberBinder (flags, name, context, typeArguments, argumentInfo); - } - - public static CallSiteBinder IsEvent (CSharpBinderFlags flags, string name, Type context) - { - return new CSharpIsEventBinder (name, context); - } - - public static CallSiteBinder SetIndex (CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpSetIndexBinder (flags, context, argumentInfo); - } - - public static CallSiteBinder SetMember (CSharpBinderFlags flags, string name, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpSetMemberBinder (flags, name, context, argumentInfo); - } - - public static CallSiteBinder UnaryOperation (CSharpBinderFlags flags, ExpressionType operation, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - return new CSharpUnaryOperationBinder (operation, flags, context, argumentInfo); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfo.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfo.cs deleted file mode 100644 index 2c54af27975..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfo.cs +++ /dev/null @@ -1,83 +0,0 @@ -// -// CSharpArgumentInfo.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - public sealed class CSharpArgumentInfo - { - readonly CSharpArgumentInfoFlags flags; - readonly string name; - - CSharpArgumentInfo (CSharpArgumentInfoFlags flags, string name) - { - this.flags = flags; - this.name = name; - } - - public static CSharpArgumentInfo Create (CSharpArgumentInfoFlags flags, string name) - { - return new CSharpArgumentInfo (flags, name); - } - - internal Compiler.Argument.AType ArgumentModifier { - get { - if ((flags & CSharpArgumentInfoFlags.IsRef) != 0) - return Compiler.Argument.AType.Ref; - - if ((flags & CSharpArgumentInfoFlags.IsOut) != 0) - return Compiler.Argument.AType.Out; - - return Compiler.Argument.AType.None; - } - } - - internal static CallInfo CreateCallInfo (IEnumerable<CSharpArgumentInfo> argumentInfo, int skipCount) - { - var named = from arg in argumentInfo.Skip (skipCount) where arg.IsNamed select arg.name; - return new CallInfo (Math.Max (0, argumentInfo.Count () - skipCount), named); - } - - internal CSharpArgumentInfoFlags Flags { - get { return flags; } - } - - internal bool IsNamed { - get { return (flags & CSharpArgumentInfoFlags.NamedArgument) != 0; } - } - - internal string Name { - get { return name; } - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfoFlags.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfoFlags.cs deleted file mode 100644 index 9a9ea7ed65c..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfoFlags.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// CSharpArgumentInfoFlags.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace Microsoft.CSharp.RuntimeBinder -{ - [Flags] - public enum CSharpArgumentInfoFlags - { - None = 0, - UseCompileTimeType = 1, - Constant = 2, - NamedArgument = 4, - IsRef = 8, - IsOut = 16, - IsStaticType = 32 - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinaryOperationBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinaryOperationBinder.cs deleted file mode 100644 index 374eb0d961f..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinaryOperationBinder.cs +++ /dev/null @@ -1,160 +0,0 @@ -// -// CSharpBinaryOperationBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpBinaryOperationBinder : BinaryOperationBinder - { - IList<CSharpArgumentInfo> argumentInfo; - readonly CSharpBinderFlags flags; - readonly Type context; - - public CSharpBinaryOperationBinder (ExpressionType operation, CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (operation) - { - this.argumentInfo = new ReadOnlyCollectionBuilder<CSharpArgumentInfo> (argumentInfo); - if (this.argumentInfo.Count != 2) - throw new ArgumentException ("Binary operation requires 2 arguments"); - - this.flags = flags; - this.context = context; - } - - Compiler.Binary.Operator GetOperator (out bool isCompound) - { - isCompound = false; - switch (Operation) { - case ExpressionType.Add: - return Compiler.Binary.Operator.Addition; - case ExpressionType.AddAssign: - isCompound = true; - return Compiler.Binary.Operator.Addition; - case ExpressionType.And: - return (flags & CSharpBinderFlags.BinaryOperationLogical) != 0 ? - Compiler.Binary.Operator.LogicalAnd : Compiler.Binary.Operator.BitwiseAnd; - case ExpressionType.AndAssign: - isCompound = true; - return Compiler.Binary.Operator.BitwiseAnd; - case ExpressionType.Divide: - return Compiler.Binary.Operator.Division; - case ExpressionType.DivideAssign: - isCompound = true; - return Compiler.Binary.Operator.Division; - case ExpressionType.Equal: - return Compiler.Binary.Operator.Equality; - case ExpressionType.ExclusiveOr: - return Compiler.Binary.Operator.ExclusiveOr; - case ExpressionType.ExclusiveOrAssign: - isCompound = true; - return Compiler.Binary.Operator.ExclusiveOr; - case ExpressionType.GreaterThan: - return Compiler.Binary.Operator.GreaterThan; - case ExpressionType.GreaterThanOrEqual: - return Compiler.Binary.Operator.GreaterThanOrEqual; - case ExpressionType.LeftShift: - return Compiler.Binary.Operator.LeftShift; - case ExpressionType.LeftShiftAssign: - isCompound = true; - return Compiler.Binary.Operator.LeftShift; - case ExpressionType.LessThan: - return Compiler.Binary.Operator.LessThan; - case ExpressionType.LessThanOrEqual: - return Compiler.Binary.Operator.LessThanOrEqual; - case ExpressionType.Modulo: - return Compiler.Binary.Operator.Modulus; - case ExpressionType.ModuloAssign: - isCompound = true; - return Compiler.Binary.Operator.Modulus; - case ExpressionType.Multiply: - return Compiler.Binary.Operator.Multiply; - case ExpressionType.MultiplyAssign: - isCompound = true; - return Compiler.Binary.Operator.Multiply; - case ExpressionType.NotEqual: - return Compiler.Binary.Operator.Inequality; - case ExpressionType.Or: - return (flags & CSharpBinderFlags.BinaryOperationLogical) != 0 ? - Compiler.Binary.Operator.LogicalOr : Compiler.Binary.Operator.BitwiseOr; - case ExpressionType.OrAssign: - isCompound = true; - return Compiler.Binary.Operator.BitwiseOr; - case ExpressionType.OrElse: - return Compiler.Binary.Operator.LogicalOr; - case ExpressionType.RightShift: - return Compiler.Binary.Operator.RightShift; - case ExpressionType.RightShiftAssign: - isCompound = true; - return Compiler.Binary.Operator.RightShift; - case ExpressionType.Subtract: - return Compiler.Binary.Operator.Subtraction; - case ExpressionType.SubtractAssign: - isCompound = true; - return Compiler.Binary.Operator.Subtraction; - default: - throw new NotImplementedException (Operation.ToString ()); - } - } - - public override DynamicMetaObject FallbackBinaryOperation (DynamicMetaObject target, DynamicMetaObject arg, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var left = ctx.CreateCompilerExpression (argumentInfo [0], target); - var right = ctx.CreateCompilerExpression (argumentInfo [1], arg); - - bool is_compound; - var oper = GetOperator (out is_compound); - Compiler.Expression expr; - - if (is_compound) { - var target_expr = new Compiler.RuntimeValueExpression (target, ctx.ImportType (target.LimitType)); - expr = new Compiler.CompoundAssign (oper, target_expr, right, left); - } else { - expr = new Compiler.Binary (oper, left, right); - } - - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - if ((flags & CSharpBinderFlags.CheckedContext) != 0) - expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (arg); - - return binder.Bind (ctx, context); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs deleted file mode 100644 index ab977fcffcb..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs +++ /dev/null @@ -1,128 +0,0 @@ -// -// CSharpBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Linq.Expressions; -using Compiler = Mono.CSharp; -using System.Reflection; -using System.Collections.Generic; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpBinder - { - static ConstructorInfo binder_exception_ctor; - static object resolver = new object (); - - DynamicMetaObjectBinder binder; - Compiler.Expression expr; - BindingRestrictions restrictions; - DynamicMetaObject errorSuggestion; - - public CSharpBinder (DynamicMetaObjectBinder binder, Compiler.Expression expr, DynamicMetaObject errorSuggestion) - { - this.binder = binder; - this.expr = expr; - this.restrictions = BindingRestrictions.Empty; - this.errorSuggestion = errorSuggestion; - } - - public Compiler.ResolveContext.Options ResolveOptions { get; set; } - - public void AddRestrictions (DynamicMetaObject arg) - { - restrictions = restrictions.Merge (CreateRestrictionsOnTarget (arg)); - } - - public void AddRestrictions (DynamicMetaObject[] args) - { - restrictions = restrictions.Merge (CreateRestrictionsOnTarget (args)); - } - - public DynamicMetaObject Bind (DynamicContext ctx, Type callingType) - { - Expression res; - try { - var rc = new Compiler.ResolveContext (new RuntimeBinderContext (ctx, callingType), ResolveOptions); - - // Static typemanager and internal caches are not thread-safe - lock (resolver) { - expr = expr.Resolve (rc, Compiler.ResolveFlags.VariableOrValue); - } - - if (expr == null) - throw new RuntimeBinderInternalCompilerException ("Expression resolved to null"); - - res = expr.MakeExpression (new Compiler.BuilderContext ()); - } catch (RuntimeBinderException e) { - if (errorSuggestion != null) - return errorSuggestion; - - res = CreateBinderException (e.Message); - } catch (Exception) { - if (errorSuggestion != null) - return errorSuggestion; - - throw; - } - - return new DynamicMetaObject (res, restrictions); - } - - Expression CreateBinderException (string message) - { - if (binder_exception_ctor == null) - binder_exception_ctor = typeof (RuntimeBinderException).GetConstructor (new[] { typeof (string) }); - - // - // Uses target type to keep expressions composition working - // - return Expression.Throw (Expression.New (binder_exception_ctor, Expression.Constant (message)), binder.ReturnType); - } - - static BindingRestrictions CreateRestrictionsOnTarget (DynamicMetaObject arg) - { - return arg.HasValue && arg.Value == null ? - BindingRestrictions.GetInstanceRestriction (arg.Expression, null) : - BindingRestrictions.GetTypeRestriction (arg.Expression, arg.LimitType); - } - - public static BindingRestrictions CreateRestrictionsOnTarget (DynamicMetaObject[] args) - { - if (args.Length == 0) - return BindingRestrictions.Empty; - - var res = CreateRestrictionsOnTarget (args[0]); - for (int i = 1; i < args.Length; ++i) - res = res.Merge (CreateRestrictionsOnTarget (args[i])); - - return res; - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs deleted file mode 100644 index 39ef67948c0..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// CSharpBinderFlags.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace Microsoft.CSharp.RuntimeBinder -{ - [Flags] - public enum CSharpBinderFlags - { - None = 0, - CheckedContext = 1, - InvokeSimpleName = 1 << 1, - InvokeSpecialName = 1 << 2, - BinaryOperationLogical = 1 << 3, - ConvertExplicit = 1 << 4, - ConvertArrayIndex = 1 << 5, - ResultIndexed = 1 << 6, - ValueFromCompoundAssignment = 1 << 7, - ResultDiscarded = 1 << 8 - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpConvertBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpConvertBinder.cs deleted file mode 100644 index 32fa4726b10..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpConvertBinder.cs +++ /dev/null @@ -1,68 +0,0 @@ -// -// CSharpConvertBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpConvertBinder : ConvertBinder - { - readonly CSharpBinderFlags flags; - readonly Type context; - - public CSharpConvertBinder (Type type, Type context, CSharpBinderFlags flags) - : base (type, (flags & CSharpBinderFlags.ConvertExplicit) != 0) - { - this.flags = flags; - this.context = context; - } - - public override DynamicMetaObject FallbackConvert (DynamicMetaObject target, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var expr = ctx.CreateCompilerExpression (null, target); - - if (Explicit) - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (Type), Compiler.Location.Null), expr, Compiler.Location.Null); - else - expr = new Compiler.ImplicitCast (expr, ctx.ImportType (Type), (flags & CSharpBinderFlags.ConvertArrayIndex) != 0); - - if ((flags & CSharpBinderFlags.CheckedContext) != 0) - expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - - return binder.Bind (ctx, context); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetIndexBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetIndexBinder.cs deleted file mode 100644 index 367cc22b70e..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetIndexBinder.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// CSharpGetIndexBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpGetIndexBinder : GetIndexBinder - { - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - - public CSharpGetIndexBinder (Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (CSharpArgumentInfo.CreateCallInfo (argumentInfo, 1)) - { - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject FallbackGetIndex (DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject errorSuggestion) - { - if (argumentInfo.Count != indexes.Length + 1) { - if (errorSuggestion == null) - throw new NotImplementedException (); - - return errorSuggestion; - } - - var ctx = DynamicContext.Create (); - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - var args = ctx.CreateCompilerArguments (argumentInfo.Skip (1), indexes); - expr = new Compiler.ElementAccess (expr, args, Compiler.Location.Null); - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (indexes); - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetMemberBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetMemberBinder.cs deleted file mode 100644 index 790ed72f08d..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpGetMemberBinder.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// CSharpGetMemberBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpGetMemberBinder : GetMemberBinder - { - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - - public CSharpGetMemberBinder (string name, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (name, false) - { - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject FallbackGetMember (DynamicMetaObject target, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - expr = new Compiler.MemberAccess (expr, Name); - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeBinder.cs deleted file mode 100644 index 1f6b34a070d..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeBinder.cs +++ /dev/null @@ -1,70 +0,0 @@ -// -// CSharpInvokeBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpInvokeBinder : InvokeBinder - { - readonly CSharpBinderFlags flags; - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - - public CSharpInvokeBinder (CSharpBinderFlags flags, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (CSharpArgumentInfo.CreateCallInfo (argumentInfo, 1)) - { - this.flags = flags; - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject FallbackInvoke (DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - var c_args = ctx.CreateCompilerArguments (argumentInfo.Skip (1), args); - expr = new Compiler.Invocation (expr, c_args); - - if ((flags & CSharpBinderFlags.ResultDiscarded) == 0) - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - else - expr = new Compiler.DynamicResultCast (ctx.ImportType (ReturnType), expr); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (args); - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeConstructorBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeConstructorBinder.cs deleted file mode 100644 index b5f0b9f263c..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeConstructorBinder.cs +++ /dev/null @@ -1,73 +0,0 @@ -// -// CSharpInvokeConstructorBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpInvokeConstructorBinder : DynamicMetaObjectBinder - { - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - Type target_return_type; - - public CSharpInvokeConstructorBinder (Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - { - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject Bind (DynamicMetaObject target, DynamicMetaObject[] args) - { - var ctx = DynamicContext.Create (); - - var type = ctx.CreateCompilerExpression (argumentInfo [0], target); - target_return_type = type.Type.GetMetaInfo (); - - var c_args = ctx.CreateCompilerArguments (argumentInfo.Skip (1), args); - - var binder = new CSharpBinder ( - this, new Compiler.New (type, c_args, Compiler.Location.Null), null); - - binder.AddRestrictions (target); - binder.AddRestrictions (args); - - return binder.Bind (ctx, callingContext); - } - - public override Type ReturnType { - get { - return target_return_type; - } - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeMemberBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeMemberBinder.cs deleted file mode 100644 index 138e31416b5..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpInvokeMemberBinder.cs +++ /dev/null @@ -1,194 +0,0 @@ -// -// CSharpInvokeMemberBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; -using SLE = System.Linq.Expressions; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpInvokeMemberBinder : InvokeMemberBinder - { - // - // A custom runtime invocation is needed to deal with member invocation which - // is not real member invocation but invocation on invocalble member. - // - // An example: - // class C { - // dynamic f; - // void Foo () - // { - // dynamic d = new C (); - // d.f.M (); - // } - // - // The runtime value of `f' can be a delegate in which case we are invoking result - // of member invocation, this is already handled by DoResolveDynamic but we need - // more runtime dependencies which require Microsoft.CSharp assembly reference or - // a lot of reflection calls - // - class Invocation : Compiler.Invocation - { - sealed class RuntimeDynamicInvocation : Compiler.ShimExpression - { - Invocation invoke; - - public RuntimeDynamicInvocation (Invocation invoke, Compiler.Expression memberExpr) - : base (memberExpr) - { - this.invoke = invoke; - } - - protected override Compiler.Expression DoResolve (Compiler.ResolveContext rc) - { - type = expr.Type; - eclass = Compiler.ExprClass.Value; - return this; - } - - // - // Creates an invoke call on invocable expression - // - public override System.Linq.Expressions.Expression MakeExpression (Compiler.BuilderContext ctx) - { - var invokeBinder = invoke.invokeBinder; - var binder = Binder.Invoke (invokeBinder.flags, invokeBinder.callingContext, invokeBinder.argumentInfo); - - var args = invoke.Arguments; - var args_expr = new SLE.Expression[invokeBinder.argumentInfo.Count]; - - var types = new Type [args_expr.Length + 2]; - - // Required by MakeDynamic - types[0] = typeof (System.Runtime.CompilerServices.CallSite); - types[1] = expr.Type.GetMetaInfo (); - - args_expr[0] = expr.MakeExpression (ctx); - - for (int i = 0; i < args.Count; ++i) { - args_expr[i + 1] = args[i].Expr.MakeExpression (ctx); - - int type_index = i + 2; - types[type_index] = args[i].Type.GetMetaInfo (); - if (args[i].IsByRef) - types[type_index] = types[type_index].MakeByRefType (); - } - - // Return type goes last - bool void_result = (invokeBinder.flags & CSharpBinderFlags.ResultDiscarded) != 0; - types[types.Length - 1] = void_result ? typeof (void) : invokeBinder.ReturnType; - - // - // Much easier to use Expression.Dynamic cannot be used because it ignores ByRef arguments - // and it always generates either Func or Action and any value type argument is lost - // - Type delegateType = SLE.Expression.GetDelegateType (types); - return SLE.Expression.MakeDynamic (delegateType, binder, args_expr); - } - } - - readonly CSharpInvokeMemberBinder invokeBinder; - - public Invocation (Compiler.Expression expr, Compiler.Arguments arguments, CSharpInvokeMemberBinder invokeBinder) - : base (expr, arguments) - { - this.invokeBinder = invokeBinder; - } - - protected override Compiler.Expression DoResolveDynamic (Compiler.ResolveContext ec, Compiler.Expression memberExpr) - { - return new RuntimeDynamicInvocation (this, memberExpr).Resolve (ec); - } - } - - readonly CSharpBinderFlags flags; - IList<CSharpArgumentInfo> argumentInfo; - IList<Type> typeArguments; - Type callingContext; - - public CSharpInvokeMemberBinder (CSharpBinderFlags flags, string name, Type callingContext, IEnumerable<Type> typeArguments, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (name, false, CSharpArgumentInfo.CreateCallInfo (argumentInfo, 1)) - { - this.flags = flags; - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - this.typeArguments = typeArguments.ToReadOnly (); - } - - public override DynamicMetaObject FallbackInvoke (DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) - { - var b = new CSharpInvokeBinder (flags, callingContext, argumentInfo); - - // TODO: Is errorSuggestion ever used? - return b.Defer (target, args); - } - - public override DynamicMetaObject FallbackInvokeMember (DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var c_args = ctx.CreateCompilerArguments (argumentInfo.Skip (1), args); - var t_args = typeArguments == null ? - null : - new Compiler.TypeArguments (typeArguments.Select (l => new Compiler.TypeExpression (ctx.ImportType (l), Compiler.Location.Null)).ToArray ()); - - var expr = ctx.CreateCompilerExpression (argumentInfo[0], target); - - // - // Simple name invocation is actually member access invocation - // to capture original this argument. This brings problem when - // simple name is resolved as a static invocation and member access - // has to be reduced back to simple name without reporting an error - // - if ((flags & CSharpBinderFlags.InvokeSimpleName) != 0) { - var value = expr as Compiler.RuntimeValueExpression; - if (value != null) - value.IsSuggestionOnly = true; - } - - expr = new Compiler.MemberAccess (expr, Name, t_args, Compiler.Location.Null); - expr = new Invocation (expr, c_args, this); - - if ((flags & CSharpBinderFlags.ResultDiscarded) == 0) - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - else - expr = new Compiler.DynamicResultCast (ctx.ImportType (ReturnType), expr); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (args); - - if ((flags & CSharpBinderFlags.InvokeSpecialName) != 0) - binder.ResolveOptions |= Compiler.ResolveContext.Options.InvokeSpecialName; - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpIsEventBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpIsEventBinder.cs deleted file mode 100644 index e485e40ba14..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpIsEventBinder.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// CSharpIsEventBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpIsEventBinder : DynamicMetaObjectBinder - { - Type callingContext; - string name; - - public CSharpIsEventBinder (string name, Type callingContext) - { - this.name = name; - this.callingContext = callingContext; - } - - public override DynamicMetaObject Bind (DynamicMetaObject target, DynamicMetaObject[] args) - { - var ctx = DynamicContext.Create (); - var context_type = ctx.ImportType (callingContext); - var queried_type = ctx.ImportType (target.LimitType); - var rc = new Compiler.ResolveContext (new RuntimeBinderContext (ctx, context_type), 0); - - var expr = Compiler.Expression.MemberLookup (rc, false, queried_type, - name, 0, Compiler.Expression.MemberLookupRestrictions.ExactArity, Compiler.Location.Null); - - var binder = new CSharpBinder ( - this, new Compiler.BoolConstant (ctx.CompilerContext.BuiltinTypes, expr is Compiler.EventExpr, Compiler.Location.Null), null); - - binder.AddRestrictions (target); - return binder.Bind (ctx, callingContext); - } - - public override Type ReturnType { - get { - return typeof (bool); - } - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetIndexBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetIndexBinder.cs deleted file mode 100644 index ad2f51a1dbf..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetIndexBinder.cs +++ /dev/null @@ -1,86 +0,0 @@ -// -// CSharpSetIndexBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpSetIndexBinder : SetIndexBinder - { - readonly CSharpBinderFlags flags; - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - - public CSharpSetIndexBinder (CSharpBinderFlags flags, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (CSharpArgumentInfo.CreateCallInfo (argumentInfo, 2)) - { - this.flags = flags; - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject FallbackSetIndex (DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject value, DynamicMetaObject errorSuggestion) - { - if (argumentInfo.Count != indexes.Length + 2) { - if (errorSuggestion == null) - throw new NotImplementedException (); - - return errorSuggestion; - } - - var ctx = DynamicContext.Create (); - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - var args = ctx.CreateCompilerArguments (argumentInfo.Skip (1), indexes); - expr = new Compiler.ElementAccess (expr, args, Compiler.Location.Null); - - var source = ctx.CreateCompilerExpression (argumentInfo [indexes.Length + 1], value); - - // Same conversion as in SetMemberBinder - if ((flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0) { - expr = new Compiler.RuntimeExplicitAssign (expr, source); - } else { - expr = new Compiler.SimpleAssign (expr, source); - } - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - if ((flags & CSharpBinderFlags.CheckedContext) != 0) - expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (value); - binder.AddRestrictions (indexes); - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetMemberBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetMemberBinder.cs deleted file mode 100644 index aaf2b251c52..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpSetMemberBinder.cs +++ /dev/null @@ -1,82 +0,0 @@ -// -// CSharpSetMemberBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpSetMemberBinder : SetMemberBinder - { - readonly CSharpBinderFlags flags; - IList<CSharpArgumentInfo> argumentInfo; - Type callingContext; - - public CSharpSetMemberBinder (CSharpBinderFlags flags, string name, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (name, false) - { - this.flags = flags; - this.callingContext = callingContext; - this.argumentInfo = argumentInfo.ToReadOnly (); - } - - public override DynamicMetaObject FallbackSetMember (DynamicMetaObject target, DynamicMetaObject value, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var source = ctx.CreateCompilerExpression (argumentInfo [1], value); - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - - // Field assignment - expr = new Compiler.MemberAccess (expr, Name); - - // Compound assignment under dynamic context does not convert result - // expression but when setting member type we need to do explicit - // conversion to ensure type match between member type and dynamic - // expression type - if ((flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0) { - expr = new Compiler.RuntimeExplicitAssign (expr, source); - } else { - expr = new Compiler.SimpleAssign (expr, source); - } - - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - if ((flags & CSharpBinderFlags.CheckedContext) != 0) - expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null); - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - binder.AddRestrictions (value); - - return binder.Bind (ctx, callingContext); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpUnaryOperationBinder.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpUnaryOperationBinder.cs deleted file mode 100644 index f625f5f2188..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpUnaryOperationBinder.cs +++ /dev/null @@ -1,101 +0,0 @@ -// -// CSharpUnaryOperationBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class CSharpUnaryOperationBinder : UnaryOperationBinder - { - IList<CSharpArgumentInfo> argumentInfo; - readonly CSharpBinderFlags flags; - readonly Type context; - - public CSharpUnaryOperationBinder (ExpressionType operation, CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo) - : base (operation) - { - this.argumentInfo = argumentInfo.ToReadOnly (); - if (this.argumentInfo.Count != 1) - throw new ArgumentException ("Unary operation requires 1 argument"); - - this.flags = flags; - this.context = context; - } - - - Compiler.Unary.Operator GetOperator () - { - switch (Operation) { - case ExpressionType.Negate: - return Compiler.Unary.Operator.UnaryNegation; - case ExpressionType.Not: - return Compiler.Unary.Operator.LogicalNot; - case ExpressionType.OnesComplement: - return Compiler.Unary.Operator.OnesComplement; - case ExpressionType.UnaryPlus: - return Compiler.Unary.Operator.UnaryPlus; - default: - throw new NotImplementedException (Operation.ToString ()); - } - } - - public override DynamicMetaObject FallbackUnaryOperation (DynamicMetaObject target, DynamicMetaObject errorSuggestion) - { - var ctx = DynamicContext.Create (); - var expr = ctx.CreateCompilerExpression (argumentInfo [0], target); - - if (Operation == ExpressionType.IsTrue) { - expr = new Compiler.BooleanExpression (expr); - } else if (Operation == ExpressionType.IsFalse) { - expr = new Compiler.BooleanExpressionFalse (expr); - } else { - if (Operation == ExpressionType.Increment) - expr = new Compiler.UnaryMutator (Compiler.UnaryMutator.Mode.PreIncrement, expr, Compiler.Location.Null); - else if (Operation == ExpressionType.Decrement) - expr = new Compiler.UnaryMutator (Compiler.UnaryMutator.Mode.PreDecrement, expr, Compiler.Location.Null); - else - expr = new Compiler.Unary (GetOperator (), expr, Compiler.Location.Null); - - expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null); - - if ((flags & CSharpBinderFlags.CheckedContext) != 0) - expr = new Compiler.CheckedExpr (expr, Compiler.Location.Null); - } - - var binder = new CSharpBinder (this, expr, errorSuggestion); - binder.AddRestrictions (target); - - return binder.Bind (ctx, context); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/DynamicContext.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/DynamicContext.cs deleted file mode 100644 index 9c466c5ed9c..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/DynamicContext.cs +++ /dev/null @@ -1,192 +0,0 @@ -// -// DynamicContext.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using Compiler = Mono.CSharp; -using System.Reflection; -using System.Collections.Generic; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class DynamicContext - { - static DynamicContext dc; - static object compiler_initializer = new object (); - static object lock_object = new object (); - - readonly Compiler.ModuleContainer module; - readonly Compiler.ReflectionImporter importer; - - private DynamicContext (Compiler.ModuleContainer module, Compiler.ReflectionImporter importer) - { - this.module = module; - this.importer = importer; - } - - public Compiler.CompilerContext CompilerContext { - get { - return module.Compiler; - } - } - - public Compiler.ModuleContainer Module { - get { - return module; - } - } - - public static DynamicContext Create () - { - if (dc != null) - return dc; - - lock (compiler_initializer) { - if (dc != null) - return dc; - - var settings = new Compiler.CompilerSettings () { - WarningLevel = 0 - }; - - var cc = new Compiler.CompilerContext (settings, ErrorPrinter.Instance) { - IsRuntimeBinder = true - }; - - // - // Any later loaded assemblies are handled internally by GetAssemblyDefinition - // domain.AssemblyLoad cannot be used as that would be too destructive as we - // would hold all loaded assemblies even if they can be never visited - // - // TODO: Remove this code and rely on GetAssemblyDefinition only - // - var module = new Compiler.ModuleContainer (cc); - module.HasTypesFullyDefined = true; - - // Setup fake assembly, it's used mostly to simplify checks like friend-access - var temp = new Compiler.AssemblyDefinitionDynamic (module, "dynamic"); - module.SetDeclaringAssembly (temp); - - var importer = new Compiler.ReflectionImporter (module, cc.BuiltinTypes) { - IgnorePrivateMembers = false - }; - - // Import all currently loaded assemblies - // TODO: Rewrite this to populate type cache on-demand, that should greatly - // reduce our start-up cost - var domain = AppDomain.CurrentDomain; - foreach (var a in AppDomain.CurrentDomain.GetAssemblies ()) { - importer.ImportAssembly (a, module.GlobalRootNamespace); - } - - cc.BuiltinTypes.CheckDefinitions (module); - module.InitializePredefinedTypes (); - - dc = new DynamicContext (module, importer); - } - - return dc; - } - - // - // Creates mcs expression from dynamic object - // - public Compiler.Expression CreateCompilerExpression (CSharpArgumentInfo info, DynamicMetaObject value) - { - // - // No type details provider, go with runtime type - // - if (info == null) { - if (value.LimitType == typeof (object)) - return new Compiler.NullLiteral (Compiler.Location.Null); - - return new Compiler.RuntimeValueExpression (value, ImportType (value.RuntimeType)); - } - - // - // Value is known to be a type - // - if ((info.Flags & CSharpArgumentInfoFlags.IsStaticType) != 0) - return new Compiler.TypeExpression (ImportType ((Type) value.Value), Compiler.Location.Null); - - if (value.Value == null && - (info.Flags & (CSharpArgumentInfoFlags.IsOut | CSharpArgumentInfoFlags.IsRef | CSharpArgumentInfoFlags.UseCompileTimeType)) == 0 && - value.LimitType == typeof (object)) { - return new Compiler.NullLiteral (Compiler.Location.Null); - } - - // - // Use compilation time type when type was known not to be dynamic during compilation - // - Type value_type = (info.Flags & CSharpArgumentInfoFlags.UseCompileTimeType) != 0 ? value.Expression.Type : value.LimitType; - var type = ImportType (value_type); - - if ((info.Flags & CSharpArgumentInfoFlags.Constant) != 0) { - var c = Compiler.Constant.CreateConstantFromValue (type, value.Value, Compiler.Location.Null); - // - // It can be null for misused Constant flag - // - if (c != null) - return c; - } - - return new Compiler.RuntimeValueExpression (value, type); - } - - // - // Creates mcs arguments from dynamic argument info - // - public Compiler.Arguments CreateCompilerArguments (IEnumerable<CSharpArgumentInfo> info, DynamicMetaObject[] args) - { - var res = new Compiler.Arguments (args.Length); - int pos = 0; - - // enumerates over args - foreach (var item in info) { - var expr = CreateCompilerExpression (item, args[pos++]); - if (item.IsNamed) { - res.Add (new Compiler.NamedArgument (item.Name, Compiler.Location.Null, expr, item.ArgumentModifier)); - } else { - res.Add (new Compiler.Argument (expr, item.ArgumentModifier)); - } - - if (pos == args.Length) - break; - } - - return res; - } - - public Compiler.TypeSpec ImportType (Type type) - { - lock (lock_object) { - return importer.ImportType (type); - } - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/ErrorPrinter.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/ErrorPrinter.cs deleted file mode 100644 index 874953a50db..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/ErrorPrinter.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -// ErrorPrinter.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - class ErrorPrinter : Compiler.ReportPrinter - { - public static readonly ErrorPrinter Instance = new ErrorPrinter (); - - private ErrorPrinter () - { - } - - public override bool HasRelatedSymbolSupport { - get { - return false; - } - } - - public override void Print (Compiler.AbstractMessage msg, bool showFullPath) - { - string text; - if (msg.Code == 214) { - text = "Pointers and fixed size buffers cannot be used in a dynamic context"; - } else { - text = msg.Text; - } - - throw new RuntimeBinderException (text); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Extensions.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Extensions.cs deleted file mode 100644 index 9a55598f398..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/Extensions.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// CSharpInvokeMemberBinder.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Dynamic; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; - -namespace Microsoft.CSharp.RuntimeBinder -{ - static class Extensions - { - public static IList<T> ToReadOnly<T> (this IEnumerable<T> col) - { - return col == null ? - null : new ReadOnlyCollectionBuilder<T> (col); - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderContext.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderContext.cs deleted file mode 100644 index e2b38dbfcd6..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderContext.cs +++ /dev/null @@ -1,133 +0,0 @@ -// -// RuntimeBinderContext.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections.Generic; -using Compiler = Mono.CSharp; - -namespace Microsoft.CSharp.RuntimeBinder -{ - sealed class RuntimeBinderContext : Compiler.IMemberContext - { - readonly Compiler.ModuleContainer module; - readonly Type callingType; - readonly DynamicContext ctx; - Compiler.TypeSpec callingTypeImported; - - public RuntimeBinderContext (DynamicContext ctx, Compiler.TypeSpec callingType) - { - this.ctx = ctx; - this.module = ctx.Module; - this.callingTypeImported = callingType; - } - - public RuntimeBinderContext (DynamicContext ctx, Type callingType) - { - this.ctx = ctx; - this.module = ctx.Module; - this.callingType = callingType; - } - - #region IMemberContext Members - - public Compiler.TypeSpec CurrentType { - get { - // - // Delay importing of calling type to be compatible with .net - // Some libraries are setting it to null which is invalid - // but the NullReferenceException is thrown only when the context - // is used and not during initialization - // - if (callingTypeImported == null && callingType != null) - callingTypeImported = ctx.ImportType (callingType); - - return callingTypeImported; - } - } - - public Compiler.TypeParameters CurrentTypeParameters { - get { throw new NotImplementedException (); } - } - - public Compiler.MemberCore CurrentMemberDefinition { - get { - return null; - } - } - - public bool IsObsolete { - get { - // Always true to ignore obsolete attribute checks - return true; - } - } - - public bool IsUnsafe { - get { - // Dynamic cannot be used with pointers - return false; - } - } - - public bool IsStatic { - get { - throw new NotImplementedException (); - } - } - - public Compiler.ModuleContainer Module { - get { - return module; - } - } - - public string GetSignatureForError () - { - throw new NotImplementedException (); - } - - public Compiler.ExtensionMethodCandidates LookupExtensionMethod (string name, int arity) - { - // No extension method lookup in this context - return null; - } - - public Compiler.FullNamedExpression LookupNamespaceOrType (string name, int arity, Mono.CSharp.LookupMode mode, Mono.CSharp.Location loc) - { - throw new NotImplementedException (); - } - - public Compiler.FullNamedExpression LookupNamespaceAlias (string name) - { - // No namespace aliases in this context - return null; - } - - #endregion - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderException.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderException.cs deleted file mode 100644 index f30f77ad6cc..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderException.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// RuntimeBinderException.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Runtime.Serialization; - -namespace Microsoft.CSharp.RuntimeBinder -{ - [Serializable] - public class RuntimeBinderException : Exception - { - public RuntimeBinderException () - { - } - - public RuntimeBinderException (string message) - : base (message) - { - } - - public RuntimeBinderException (string message, Exception innerException) - : base (message, innerException) - { - } - - protected RuntimeBinderException (SerializationInfo info, StreamingContext context) - : base (info, context) - { - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderInternalCompilerException.cs b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderInternalCompilerException.cs deleted file mode 100644 index 83e3cc2d36d..00000000000 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/RuntimeBinderInternalCompilerException.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// RuntimeBinderInternalCompilerException.cs -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Runtime.Serialization; - -namespace Microsoft.CSharp.RuntimeBinder -{ - [Serializable] - public class RuntimeBinderInternalCompilerException : Exception - { - public RuntimeBinderInternalCompilerException () - { - } - - public RuntimeBinderInternalCompilerException (string message) - : base (message) - { - } - - public RuntimeBinderInternalCompilerException (string message, Exception innerException) - : base (message, innerException) - { - } - - protected RuntimeBinderInternalCompilerException (SerializationInfo info, StreamingContext context) - : base (info, context) - { - } - } -} diff --git a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.dll.sources b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.dll.sources index 3d6d20b5e75..96568b47086 100644 --- a/mcs/class/Microsoft.CSharp/Microsoft.CSharp.dll.sources +++ b/mcs/class/Microsoft.CSharp/Microsoft.CSharp.dll.sources @@ -1,23 +1,197 @@ Assembly/AssemblyInfo.cs -Microsoft.CSharp.RuntimeBinder/Binder.cs -Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfo.cs -Microsoft.CSharp.RuntimeBinder/CSharpArgumentInfoFlags.cs -Microsoft.CSharp.RuntimeBinder/CSharpBinaryOperationBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs -Microsoft.CSharp.RuntimeBinder/CSharpConvertBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpGetIndexBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpGetMemberBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpInvokeBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpInvokeConstructorBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpInvokeMemberBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpIsEventBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpSetIndexBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpSetMemberBinder.cs -Microsoft.CSharp.RuntimeBinder/CSharpUnaryOperationBinder.cs -Microsoft.CSharp.RuntimeBinder/DynamicContext.cs -Microsoft.CSharp.RuntimeBinder/Extensions.cs -Microsoft.CSharp.RuntimeBinder/RuntimeBinderContext.cs -Microsoft.CSharp.RuntimeBinder/RuntimeBinderException.cs -Microsoft.CSharp.RuntimeBinder/RuntimeBinderInternalCompilerException.cs -Microsoft.CSharp.RuntimeBinder/CSharpBinder.cs -Microsoft.CSharp.RuntimeBinder/ErrorPrinter.cs +../../build/common/SR.cs +../../build/common/Consts.cs + +corefx/SR.cs + +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Binder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/BinderHelper.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpArgumentInfo.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpArgumentInfoFlags.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpBinaryOperationBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpBinaryOperationFlags.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpBinderFlags.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpCallFlags.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpConversionKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpConvertBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpGetIndexBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpGetMemberBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpInvokeBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpInvokeConstructorBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpInvokeMemberBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpIsEventBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/CSharpSetIndexBinder.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 +../../../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 +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BindingContextBase.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BindingContexts.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BindingFlag.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BinOpArgInfo.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BinOpKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/BinOpSig.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/CandidateFunctionMember.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ConstVal.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ConstValFactory.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Declarations/AggregateDeclaration.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Declarations/Declaration.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Declarations/GlobalAttributeDeclaration.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Declarations/NamespaceDeclaration.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/FileRecord.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/FundamentalTypes.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GlobalSymbolContext.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/InputFile.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ITypeOrNamespace.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/MetadataToken.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodIterator.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/NameGenerator.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/NullableLift.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/OriginalExpressions.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedAttributes.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/SemanticChecker.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/SubstitutionContext.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AggregateSymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/EventSymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/FieldSymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/IndexerSymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/LabelSymbol.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 +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/PropertySymbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Scope.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolManagerBase.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/TransparentIdentifierMemberSymbol.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 +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.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/ConditionalOperator.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/Field.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOrNamespace.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/TypeBind.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 +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeArray.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeKind.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeParameterType.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeTable.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/VoidType.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/UnaOpSig.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/UtilityTypeExtensions.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/WithType.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SpecialNames.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/KnownName.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/NameManager.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/Names.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/NameTable.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/Operators.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/PredefinedName.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/PredefinedType.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/TokenFacts.cs +../../../external/corefx/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Syntax/TokenKind.cs diff --git a/mcs/class/Microsoft.CSharp/corefx/SR.cs b/mcs/class/Microsoft.CSharp/corefx/SR.cs new file mode 100644 index 00000000000..c4b854bfd8f --- /dev/null +++ b/mcs/class/Microsoft.CSharp/corefx/SR.cs @@ -0,0 +1,134 @@ +// +// This file was generated by resx2sr tool +// + +partial class SR +{ + public const string InternalCompilerError = "An unexpected exception occurred while binding a dynamic operation"; + public const string BindRequireArguments = "Cannot bind call with no calling object"; + public const string BindCallFailedOverloadResolution = "Overload resolution failed"; + public const string BindBinaryOperatorRequireTwoArguments = "Binary operators must be invoked with two arguments"; + public const string BindUnaryOperatorRequireOneArgument = "Unary operators must be invoked with one argument"; + public const string BindPropertyFailedMethodGroup = "The name '{0}' is bound to a method and cannot be used like a property"; + public const string BindPropertyFailedEvent = "The event '{0}' can only appear on the left hand side of +"; + public const string BindInvokeFailedNonDelegate = "Cannot invoke a non-delegate type"; + public const string BindImplicitConversionRequireOneArgument = "Implicit conversion takes exactly one argument"; + public const string BindExplicitConversionRequireOneArgument = "Explicit conversion takes exactly one argument"; + public const string BindBinaryAssignmentRequireTwoArguments = "Binary operators cannot be invoked with one argument"; + public const string BindBinaryAssignmentFailedNullReference = "Cannot perform member assignment on a null reference"; + public const string NullReferenceOnMemberException = "Cannot perform runtime binding on a null reference"; + public const string BindCallToConditionalMethod = "Cannot dynamically invoke method '{0}' because it has a Conditional attribute"; + public const string BindToVoidMethodButExpectResult = "Cannot implicitly convert type 'void' to 'object'"; + public const string BadBinaryOps = "Operator '{0}' cannot be applied to operands of type '{1}' and '{2}'"; + public const string IntDivByZero = "Division by constant zero"; + public const string BadIndexLHS = "Cannot apply indexing with [] to an expression of type '{0}'"; + public const string BadIndexCount = "Wrong number of indices inside []; expected '{0}'"; + public const string BadUnaryOp = "Operator '{0}' cannot be applied to operand of type '{1}'"; + public const string NoImplicitConv = "Cannot implicitly convert type '{0}' to '{1}'"; + public const string NoExplicitConv = "Cannot convert type '{0}' to '{1}'"; + public const string ConstOutOfRange = "Constant value '{0}' cannot be converted to a '{1}'"; + public const string AmbigBinaryOps = "Operator '{0}' is ambiguous on operands of type '{1}' and '{2}'"; + public const string AmbigUnaryOp = "Operator '{0}' is ambiguous on an operand of type '{1}'"; + public const string ValueCantBeNull = "Cannot convert null to '{0}' because it is a non-nullable value type"; + public const string WrongNestedThis = "Cannot access a non-static member of outer type '{0}' via nested type '{1}'"; + public const string NoSuchMember = "'{0}' does not contain a definition for '{1}'"; + public const string ObjectRequired = "An object reference is required for the non-static field, method, or property '{0}'"; + public const string AmbigCall = "The call is ambiguous between the following methods or properties: '{0}' and '{1}'"; + public const string BadAccess = "'{0}' is inaccessible due to its protection level"; + public const string MethDelegateMismatch = "No overload for '{0}' matches delegate '{1}'"; + public const string AssgLvalueExpected = "The left-hand side of an assignment must be a variable, property or indexer"; + public const string NoConstructors = "The type '{0}' has no constructors defined"; + public const string BadDelegateConstructor = "The delegate '{0}' does not have a valid constructor"; + public const string PropertyLacksGet = "The property or indexer '{0}' cannot be used in this context because it lacks the get accessor"; + public const string ObjectProhibited = "Member '{0}' cannot be accessed with an instance reference; qualify it with a type name instead"; + public const string AssgReadonly = "A readonly field cannot be assigned to (except in a constructor or a variable initializer)"; + public const string RefReadonly = "A readonly field cannot be passed ref or out (except in a constructor)"; + 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 ManagedAddr = "Cannot take the address of, get the size of, or declare a pointer to a managed type ('{0}')"; + public const string FixedNotNeeded = "You cannot use the fixed statement to take the address of an already fixed expression"; + 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 CheckedOverflow = "The operation overflows at compile time in checked mode"; + 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 FieldInitRefNonstatic = "A field initializer cannot reference the non-static field, method, or property '{0}'"; + 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 BadCastInFixed = "The right hand side of a fixed statement assignment may not be a cast expression"; + 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"; + public const string BadArity = "Using the generic {1} '{0}' requires '{2}' type arguments"; + public const string BadTypeArgument = "The type '{0}' may not be used as a type argument"; + public const string TypeArgsNotAllowed = "The {1} '{0}' cannot be used with type arguments"; + public const string HasNoTypeVars = "The non-generic {1} '{0}' cannot be used with type arguments"; + public const string NewConstraintNotSatisfied = "'{2}' must be a non-abstract type with a public parameterless constructor in order to use it as parameter '{1}' in the generic type or method '{0}'"; + 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"; + public const string CantInferMethTypeArgs = "The type arguments for method '{0}' cannot be inferred from the usage. Try specifying the type arguments explicitly."; + public const string MethGrpToNonDel = "Cannot convert method group '{0}' to non-delegate type '{1}'. Did you intend to invoke the method?"; + 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 CircularConstraint = "Circular constraint dependency involving '{0}' and '{1}'"; + public const string BaseConstraintConflict = "Type parameter '{0}' inherits conflicting constraints '{1}' and '{2}'"; + public const string ConWithValCon = "Type parameter '{1}' has the 'struct' constraint so '{1}' cannot be used as a constraint for '{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 PredefinedTypeBadType = "Predefined type '{0}' is declared incorrectly"; + 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 UnifyingInterfaceInstantiations = "'{0}' cannot implement both '{1}' and '{2}' because they may unify for some type parameter substitutions"; + 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}'"; + public const string BindToBogusProp1 = "Property, indexer, or event '{0}' is not supported by the language; try directly calling accessor method '{1}'"; + public const string BadDelArgCount = "Delegate '{0}' does not take '{1}' arguments"; + public const string BadDelArgTypes = "Delegate '{0}' has some invalid arguments"; + 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)"; + public const string RefReadonlyStatic2 = "Fields of static readonly field '{0}' cannot be passed ref or out (except in a static constructor)"; + public const string AssgReadonlyLocalCause = "Cannot assign to '{0}' because it is a '{1}'"; + public const string RefReadonlyLocalCause = "Cannot pass '{0}' as a ref or out argument because it is a '{1}'"; + public const string ThisStructNotInAnonMeth = "Anonymous methods, lambda expressions, and query expressions inside structs cannot access instance members of 'this'. Consider copying 'this' to a local variable outside the anonymous method, lambda expression or query expression and using the local instead."; + 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"; +} diff --git a/mcs/class/Mono.CSharp/Mono.CSharp-net_4_x.csproj b/mcs/class/Mono.CSharp/Mono.CSharp-net_4_x.csproj index eaec4ddcd40..bcf9c8dc840 100644 --- a/mcs/class/Mono.CSharp/Mono.CSharp-net_4_x.csproj +++ b/mcs/class/Mono.CSharp/Mono.CSharp-net_4_x.csproj @@ -106,6 +106,7 @@ <Compile Include="..\..\mcs\typespec.cs" />
<Compile Include="..\..\mcs\visit.cs" />
<Compile Include="..\..\tools\monop\outline.cs" />
+ <Compile Include="aot.cs" />
<Compile Include="Assembly\AssemblyInfo.cs" />
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/mcs/class/Mono.CSharp/Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/Mono.CSharp.dll.sources index 0bbd93782ba..2bd1a5a5f41 100644 --- a/mcs/class/Mono.CSharp/Mono.CSharp.dll.sources +++ b/mcs/class/Mono.CSharp/Mono.CSharp.dll.sources @@ -1,3 +1,5 @@ +Assembly/AssemblyInfo.cs +aot.cs ../../mcs/anonymous.cs ../../mcs/argument.cs ../../mcs/assign.cs @@ -55,4 +57,3 @@ ../../build/common/Consts.cs ../../tools/monop/outline.cs ../../mcs/cs-parser.cs -Assembly/AssemblyInfo.cs diff --git a/mcs/class/Mono.CSharp/aot.cs b/mcs/class/Mono.CSharp/aot.cs new file mode 100644 index 00000000000..844d761ae6a --- /dev/null +++ b/mcs/class/Mono.CSharp/aot.cs @@ -0,0 +1,105 @@ +// +// aot.cs: AOT System.Reflection.Emit extensions to simplify mcs compilation +// +// Authors: +// Marek Safar <marek.safar@gmail.com> +// +// Copyright (C) 2014 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if FULL_AOT_RUNTIME + +namespace System.Reflection.Emit +{ + static class AssemblyBuilderExtensions + { + public static void AddResourceFile (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static ModuleBuilder DefineDynamicModule (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static void DefineVersionInfoResource (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static void DefineUnmanagedResource (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static void Save (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static void SetEntryPoint (this AssemblyBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + } + + static class ConstructorBuilderExtensions + { + public static void AddDeclarativeSecurity (this ConstructorBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + } + + static class MethodBuilderExtensions + { + public static void AddDeclarativeSecurity (this MethodBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + } + + static class ModuleBuilderExtensions + { + public static void DefineManifestResource (this ModuleBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + } + + static class TypeBuilderExtensions + { + public static void AddDeclarativeSecurity (this TypeBuilder builder, params object[] args) + { + throw new NotSupportedException (); + } + + public static Type CreateType (this TypeBuilder builder) + { + throw new NotSupportedException (); + } + } +} +#endif diff --git a/mcs/class/Mono.CSharp/monotouch.cs b/mcs/class/Mono.CSharp/monotouch.cs deleted file mode 100644 index 06feb3cc396..00000000000 --- a/mcs/class/Mono.CSharp/monotouch.cs +++ /dev/null @@ -1,824 +0,0 @@ -// -// monotouch.cs: iOS System.Reflection.Emit API needed to simplify mcs compilation -// -// Authors: -// Marek Safar <marek.safar@gmail.com> -// -// Copyright (C) 2014 Xamarin Inc (http://www.xamarin.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Reflection.Emit -{ - public class TypeBuilder : Type - { - #region implemented abstract members of MemberInfo - - public override bool IsDefined (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override string Name { - get { - throw new NotSupportedException (); - } - } - - #endregion - - #region implemented abstract members of Type - - public override Type GetInterface (string name, bool ignoreCase) - { - throw new NotSupportedException (); - } - - public override Type[] GetInterfaces () - { - throw new NotSupportedException (); - } - - public override Type GetElementType () - { - throw new NotSupportedException (); - } - - public override EventInfo GetEvent (string name, BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override EventInfo[] GetEvents (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override FieldInfo GetField (string name, BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override FieldInfo[] GetFields (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override MemberInfo[] GetMembers (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - protected override MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) - { - throw new NotSupportedException (); - } - - public override MethodInfo[] GetMethods (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override Type GetNestedType (string name, BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override Type[] GetNestedTypes (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override PropertyInfo[] GetProperties (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - protected override PropertyInfo GetPropertyImpl (string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) - { - throw new NotSupportedException (); - } - - protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) - { - throw new NotSupportedException (); - } - - protected override TypeAttributes GetAttributeFlagsImpl () - { - throw new NotSupportedException (); - } - - protected override bool HasElementTypeImpl () - { - throw new NotSupportedException (); - } - - protected override bool IsArrayImpl () - { - throw new NotSupportedException (); - } - - protected override bool IsByRefImpl () - { - throw new NotSupportedException (); - } - - protected override bool IsCOMObjectImpl () - { - throw new NotSupportedException (); - } - - protected override bool IsPointerImpl () - { - throw new NotSupportedException (); - } - - protected override bool IsPrimitiveImpl () - { - throw new NotSupportedException (); - } - - public override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr) - { - throw new NotSupportedException (); - } - - public override object InvokeMember (string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters) - { - throw new NotSupportedException (); - } - - public override Assembly Assembly { - get { - throw new NotSupportedException (); - } - } - - public override string AssemblyQualifiedName { - get { - throw new NotSupportedException (); - } - } - - public override Type BaseType { - get { - throw new NotSupportedException (); - } - } - - public override string FullName { - get { - throw new NotSupportedException (); - } - } - - public override Guid GUID { - get { - throw new NotSupportedException (); - } - } - - public override Module Module { - get { - throw new NotSupportedException (); - } - } - - public override string Namespace { - get { - throw new NotSupportedException (); - } - } - - public override Type UnderlyingSystemType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - public void AddInterfaceImplementation (Type interfaceType) - { - throw new NotSupportedException (); - } - - public void AddDeclarativeSecurity (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetParent (object arg) - { - throw new NotSupportedException (); - } - - public Type CreateType() - { - throw new NotSupportedException (); - } - - public ConstructorBuilder DefineConstructor (params object[] args) - { - throw new NotSupportedException (); - } - - public MethodBuilder DefineMethod (params object[] args) - { - throw new NotSupportedException (); - } - - public TypeBuilder DefineNestedType (params object[] args) - { - throw new NotSupportedException (); - } - - public PropertyBuilder DefineProperty (params object[] args) - { - throw new NotSupportedException (); - } - - public EventBuilder DefineEvent (params object[] args) - { - throw new NotSupportedException (); - } - - public FieldBuilder DefineField (params object[] args) - { - throw new NotSupportedException (); - } - - public GenericTypeParameterBuilder[] DefineGenericParameters (params string[] names) - { - throw new NotSupportedException (); - } - - public MethodBuilder DefineMethodOverride (params object[] args) - { - throw new NotSupportedException (); - } - - public static ConstructorInfo GetConstructor (Type type, ConstructorInfo constructor) - { - throw new NotSupportedException (); - } - - public static FieldInfo GetField (Type type, FieldInfo field) - { - throw new NotSupportedException (); - } - - public static MethodInfo GetMethod (Type type, MethodInfo method) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - - public class MethodBuilder : MethodBase - { - #region implemented abstract members of MemberInfo - - public override bool IsDefined (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override Type DeclaringType { - get { - throw new NotSupportedException (); - } - } - - public override MemberTypes MemberType { - get { - throw new NotSupportedException (); - } - } - - public override string Name { - get { - throw new NotSupportedException (); - } - } - - public override Type ReflectedType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - #region implemented abstract members of MethodBase - - public override MethodImplAttributes GetMethodImplementationFlags () - { - throw new NotSupportedException (); - } - - public override ParameterInfo[] GetParameters () - { - throw new NotSupportedException (); - } - - public override object Invoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, System.Globalization.CultureInfo culture) - { - throw new NotSupportedException (); - } - - public override RuntimeMethodHandle MethodHandle { - get { - throw new NotSupportedException (); - } - } - - public override MethodAttributes Attributes { - get { - throw new NotSupportedException (); - } - } - - #endregion - - public void AddDeclarativeSecurity (params object[] args) - { - throw new NotSupportedException (); - } - - public ParameterBuilder DefineParameter (params object[] args) - { - throw new NotSupportedException (); - } - - public GenericTypeParameterBuilder[] DefineGenericParameters (params string[] names) - { - throw new NotSupportedException (); - } - - public MethodToken GetToken() - { - throw new NotSupportedException (); - } - - public ILGenerator GetILGenerator () - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetImplementationFlags (MethodImplAttributes attributes) - { - throw new NotSupportedException (); - } - - public void SetParameters (params Type[] parameterTypes) - { - throw new NotSupportedException (); - } - - public void SetReturnType (object arg) - { - throw new NotSupportedException (); - } - } - - public class AssemblyBuilder : Assembly - { - public void AddResourceFile (params object[] args) - { - throw new NotSupportedException (); - } - - public void DefineVersionInfoResource (params object[] args) - { - throw new NotSupportedException (); - } - - public ModuleBuilder DefineDynamicModule (params object[] args) - { - throw new NotSupportedException (); - } - - public void DefineUnmanagedResource (params object[] args) - { - throw new NotSupportedException (); - } - - public void Save (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetEntryPoint (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - - public class ConstructorBuilder : MethodBase - { - #region implemented abstract members of MemberInfo - - public override bool IsDefined (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override Type DeclaringType { - get { - throw new NotSupportedException (); - } - } - - public override MemberTypes MemberType { - get { - throw new NotSupportedException (); - } - } - - public override string Name { - get { - throw new NotSupportedException (); - } - } - - public override Type ReflectedType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - #region implemented abstract members of MethodBase - - public override MethodImplAttributes GetMethodImplementationFlags () - { - throw new NotSupportedException (); - } - - public override ParameterInfo[] GetParameters () - { - throw new NotSupportedException (); - } - - public override object Invoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, System.Globalization.CultureInfo culture) - { - throw new NotSupportedException (); - } - - public override RuntimeMethodHandle MethodHandle { - get { - throw new NotSupportedException (); - } - } - - public override MethodAttributes Attributes { - get { - throw new NotSupportedException (); - } - } - - #endregion - - public void AddDeclarativeSecurity (params object[] args) - { - throw new NotSupportedException (); - } - - public ParameterBuilder DefineParameter (params object[] args) - { - throw new NotSupportedException (); - } - - public MethodToken GetToken() - { - throw new NotSupportedException (); - } - - public ILGenerator GetILGenerator () - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetImplementationFlags (MethodImplAttributes attributes) - { - throw new NotSupportedException (); - } - } - - public class ModuleBuilder : Module - { - public void DefineManifestResource (params object[] args) - { - throw new NotSupportedException (); - } - - public TypeBuilder DefineType (params object[] args) - { - throw new NotSupportedException (); - } - - public MethodToken GetToken() - { - throw new NotSupportedException (); - } - - public MethodInfo GetArrayMethod (params object[] args) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - - public class PropertyBuilder : PropertyInfo - { - #region implemented abstract members of MemberInfo - - public override bool IsDefined (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override Type DeclaringType { - get { - throw new NotSupportedException (); - } - } - - public override string Name { - get { - throw new NotSupportedException (); - } - } - - public override Type ReflectedType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - #region implemented abstract members of PropertyInfo - - public override MethodInfo[] GetAccessors (bool nonPublic) - { - throw new NotSupportedException (); - } - - public override MethodInfo GetGetMethod (bool nonPublic) - { - throw new NotSupportedException (); - } - - public override ParameterInfo[] GetIndexParameters () - { - throw new NotSupportedException (); - } - - public override MethodInfo GetSetMethod (bool nonPublic) - { - throw new NotSupportedException (); - } - - public override object GetValue (object obj, BindingFlags invokeAttr, Binder binder, object[] index, System.Globalization.CultureInfo culture) - { - throw new NotSupportedException (); - } - - public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, System.Globalization.CultureInfo culture) - { - throw new NotSupportedException (); - } - - public override PropertyAttributes Attributes { - get { - throw new NotSupportedException (); - } - } - - public override bool CanRead { - get { - throw new NotSupportedException (); - } - } - - public override bool CanWrite { - get { - throw new NotSupportedException (); - } - } - - public override Type PropertyType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - public MethodToken GetToken() - { - throw new NotSupportedException (); - } - - public void SetGetMethod (object arg) - { - throw new NotSupportedException (); - } - - public void SetSetMethod (object arg) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - - public class FieldBuilder : FieldInfo - { - #region implemented abstract members of MemberInfo - - public override bool IsDefined (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (bool inherit) - { - throw new NotSupportedException (); - } - - public override object[] GetCustomAttributes (Type attributeType, bool inherit) - { - throw new NotSupportedException (); - } - - public override Type DeclaringType { - get { - throw new NotSupportedException (); - } - } - - public override string Name { - get { - throw new NotSupportedException (); - } - } - - public override Type ReflectedType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - #region implemented abstract members of FieldInfo - - public override object GetValue (object obj) - { - throw new NotSupportedException (); - } - - public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, System.Globalization.CultureInfo culture) - { - throw new NotSupportedException (); - } - - public override FieldAttributes Attributes { - get { - throw new NotSupportedException (); - } - } - - public override RuntimeFieldHandle FieldHandle { - get { - throw new NotSupportedException (); - } - } - - public override Type FieldType { - get { - throw new NotSupportedException (); - } - } - - #endregion - - public void SetConstant (object arg) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - - public class EventBuilder - { - public void SetAddOnMethod (MethodBuilder mdBuilder) - { - throw new NotSupportedException (); - } - - public void SetRemoveOnMethod (MethodBuilder mdBuilder) - { - throw new NotSupportedException (); - } - - public void SetCustomAttribute (params object[] args) - { - throw new NotSupportedException (); - } - } - -}
\ No newline at end of file diff --git a/mcs/class/Mono.CSharp/monotouch_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/monotouch_Mono.CSharp.dll.sources deleted file mode 100644 index 083e61afd3f..00000000000 --- a/mcs/class/Mono.CSharp/monotouch_Mono.CSharp.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include testing_aot_full_Mono.CSharp.dll.sources diff --git a/mcs/class/Mono.CSharp/monotouch_tv_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/monotouch_tv_Mono.CSharp.dll.sources deleted file mode 100644 index 083e61afd3f..00000000000 --- a/mcs/class/Mono.CSharp/monotouch_tv_Mono.CSharp.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include testing_aot_full_Mono.CSharp.dll.sources diff --git a/mcs/class/Mono.CSharp/monotouch_watch_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/monotouch_watch_Mono.CSharp.dll.sources deleted file mode 100644 index 083e61afd3f..00000000000 --- a/mcs/class/Mono.CSharp/monotouch_watch_Mono.CSharp.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include testing_aot_full_Mono.CSharp.dll.sources diff --git a/mcs/class/Mono.CSharp/orbis_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/orbis_Mono.CSharp.dll.sources deleted file mode 100644 index 394cd48583b..00000000000 --- a/mcs/class/Mono.CSharp/orbis_Mono.CSharp.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include monotouch_Mono.CSharp.dll.sources diff --git a/mcs/class/Mono.CSharp/testing_aot_full_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/testing_aot_full_Mono.CSharp.dll.sources deleted file mode 100644 index 4c30fc6e148..00000000000 --- a/mcs/class/Mono.CSharp/testing_aot_full_Mono.CSharp.dll.sources +++ /dev/null @@ -1,4 +0,0 @@ -#include Mono.CSharp.dll.sources -../corlib/System.Reflection.Emit/PEFileKinds.cs -../corlib/System.Reflection.Emit/MethodToken.cs -monotouch.cs diff --git a/mcs/class/Mono.CSharp/winaot_Mono.CSharp.dll.sources b/mcs/class/Mono.CSharp/winaot_Mono.CSharp.dll.sources deleted file mode 100644 index 4c30fc6e148..00000000000 --- a/mcs/class/Mono.CSharp/winaot_Mono.CSharp.dll.sources +++ /dev/null @@ -1,4 +0,0 @@ -#include Mono.CSharp.dll.sources -../corlib/System.Reflection.Emit/PEFileKinds.cs -../corlib/System.Reflection.Emit/MethodToken.cs -monotouch.cs diff --git a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs index 45b2db17687..cff394bbcfa 100644 --- a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs +++ b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs @@ -221,7 +221,7 @@ namespace Mono.Data.Sqlite case SQLiteDateFormats.UnixEpoch:
return ((long)(dateValue.Subtract(UnixEpoch).Ticks / TimeSpan.TicksPerSecond)).ToString();
default:
- return dateValue.ToString(_datetimeFormats[5], CultureInfo.InvariantCulture);
+ return dateValue.ToString(_datetimeFormats[19], CultureInfo.InvariantCulture);
}
}
diff --git a/mcs/class/Mono.Data.Sqlite/Test/SqliteTests.cs b/mcs/class/Mono.Data.Sqlite/Test/SqliteTests.cs index 15339454b82..969346d0fd4 100644 --- a/mcs/class/Mono.Data.Sqlite/Test/SqliteTests.cs +++ b/mcs/class/Mono.Data.Sqlite/Test/SqliteTests.cs @@ -64,6 +64,38 @@ namespace MonoTests.Mono.Data.Sqlite } [Test] + public void DateTimeConvert_UTC () + { + using (var connection = new SqliteConnection ($"Data Source={_databasePath};DateTimeKind=Utc")) { + connection.Open (); + + using (var cmd = connection.CreateCommand ()) { + cmd.CommandText = "CREATE TABLE OnlyDates (Date1 DATETIME)"; + cmd.CommandType = CommandType.Text; + cmd.ExecuteNonQuery(); + } + + var datetest = DateTime.UtcNow; + + var sqlInsert = "INSERT INTO TestTable (ID, Modified) VALUES (@id, @mod)"; + using (var cmd = connection.CreateCommand ()) { + cmd.CommandText = $"INSERT INTO OnlyDates (Date1) VALUES (@param1);"; + cmd.CommandType = CommandType.Text; + cmd.Parameters.AddWithValue ("@param1", datetest); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand ()) { + cmd.CommandText = $"SELECT Date1 FROM OnlyDates;"; + cmd.CommandType = CommandType.Text; + object objRetrieved = cmd.ExecuteScalar (); + var dateRetrieved = Convert.ToDateTime (objRetrieved); + Assert.AreEqual (DateTimeKind.Unspecified, dateRetrieved.Kind); + } + } + } + + [Test] public void DateTimeConvert () { var dateTime = new DateTime (2016, 9, 15, 12, 1, 53); diff --git a/mcs/class/README b/mcs/class/README index efebe9ad5a9..421c04da2bf 100644 --- a/mcs/class/README +++ b/mcs/class/README @@ -134,7 +134,7 @@ testing. code (); } - * Avoid using unecessary open/close braces, vertical space + * Avoid using unnecessary open/close braces, vertical space is usually limited: good: diff --git a/mcs/class/System.Core/System.Core-net_4_x.csproj b/mcs/class/System.Core/System.Core-net_4_x.csproj index fac304161e6..19cd7e6be5d 100644 --- a/mcs/class/System.Core/System.Core-net_4_x.csproj +++ b/mcs/class/System.Core/System.Core-net_4_x.csproj @@ -90,7 +90,7 @@ <Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\DelegateHelpers.netstandard.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\HoistedLocals.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\ILGen.cs" />
- <Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\KeyedQueue.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\KeyedStack.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\LabelInfo.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\LambdaCompiler.Address.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\LambdaCompiler.Binary.cs" />
diff --git a/mcs/class/System.Core/dynamic_System.Core.dll.sources b/mcs/class/System.Core/dynamic_System.Core.dll.sources index 73362840547..27d916c49d5 100644 --- a/mcs/class/System.Core/dynamic_System.Core.dll.sources +++ b/mcs/class/System.Core/dynamic_System.Core.dll.sources @@ -13,7 +13,7 @@ ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/CompilerScope.Storage.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/CompilerScope.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/ILGen.cs -../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/KeyedQueue.cs +../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/KeyedStack.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LabelInfo.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Address.cs ../../../external/corefx/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Binary.cs diff --git a/mcs/class/System.Data/System.Data-net_4_x.csproj b/mcs/class/System.Data/System.Data-net_4_x.csproj index b257d924a0a..b50eb0df32b 100644 --- a/mcs/class/System.Data/System.Data-net_4_x.csproj +++ b/mcs/class/System.Data/System.Data-net_4_x.csproj @@ -75,7 +75,11 @@ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbCommand.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DBCommandBuilder.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbConnection.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbConnectionPoolKey.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbConnectionStringBuilder.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbDataAdapter.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbDataReader.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbDataReaderExtensions.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbDataRecord.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbDataSourceEnumerator.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbEnumerator.cs" />
@@ -84,18 +88,23 @@ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbMetaDataColumnNames.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbParameter.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbParameterCollection.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbProviderFactory.CreatePermission.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbProviderFactory.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbProviderSpecificTypePropertyAttribute.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DBSchemaRow.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DBSchemaTable.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DbTransaction.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DecimalStorage.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\DoubleStorage.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\FieldNameLookup.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\Groupbybehavior.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\IDbColumnSchemaGenerator.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\identifiercase.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\Int16Storage.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\Int32Storage.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\Int64Storage.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\MultipartIdentifier.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\NameValuePair.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\ObjectStorage.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\RowUpdatedEventArgs.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\Common\RowUpdatingEventArgs.cs" />
@@ -258,6 +267,7 @@ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\StatementCompletedEventArgs.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\StatementCompletedEventHandler.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\StatementType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\StrongTypingException.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\UniqueConstraint.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\UpdateRowSource.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Data\updatestatus.cs" />
@@ -282,6 +292,17 @@ <Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Xml\XmlDataDocument.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Xml\XmlDataImplementation.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Data.Common\src\System\Xml\XPathNodePointer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\Common\ActivityCorrelator.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\OperationAbortedException.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\ProviderBase\DbConnectionPoolGroupProviderInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\ProviderBase\DbConnectionPoolProviderInfo.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\ProviderBase\DbReferenceCollection.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\ProviderBase\TimeoutTimer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\SqlClient\ApplicationIntent.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\SqlClient\SqlError.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\SqlClient\SqlErrorCollection.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Data.SqlClient\src\System\Data\SqlClient\SqlInfoMessageEvent.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Private.Xml\src\Misc\HResults.cs" />
<Compile Include="..\..\build\common\AssemblyRef.cs" />
<Compile Include="..\..\build\common\Consts.cs" />
<Compile Include="..\..\build\common\Locale.cs" />
@@ -290,29 +311,20 @@ <Compile Include="..\referencesource\System.Data\bid\inc\cs\bidPrivateBase.cs" />
<Compile Include="..\referencesource\System.Data\Microsoft\SqlServer\Server\SqlTriggerContext.cs" />
<Compile Include="..\referencesource\System.Data\Misc\ExternDll.cs" />
- <Compile Include="..\referencesource\System.Data\Misc\HResults.cs" />
<Compile Include="..\referencesource\System.Data\Misc\PrivilegedConfigurationManager.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\CodeGen\datacache.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\CodeGen\StrongTypingException.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\ActivityCorrelator.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\AdapterUtil.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DbConnectionOptions.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\DbConnectionPoolKey.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DBConnectionString.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\DbConnectionStringBuilder.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DbConnectionStringCommon.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DBDataPermission.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DBDataPermissionAttribute.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\DbDataReader.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DbProviderConfigurationHandler.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DbProviderFactories.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\DbProviderFactoriesConfigurationHandler.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\DbProviderFactory.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\FieldNameLookup.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\GreenMethods.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\HandlerBase.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\MultipartIdentifier.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\Common\NameValuePair.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\NameValuePermission.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\NativeMethods.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Common\SafeNativeMethods.cs" />
@@ -400,7 +412,6 @@ <Compile Include="..\referencesource\System.Data\System\Data\OleDb\PropertyInfoSet.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\OleDb\RowBinding.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\OleDb\SafeHandles.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\OperationAbortedException.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbBuffer.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionClosed.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionFactory.cs" />
@@ -410,13 +421,9 @@ <Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolAuthenticationContextKey.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolCounters.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolGroup.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolGroupProviderInfo.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolIdentity.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolOptions.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbConnectionPoolProviderInfo.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbMetaDataFactory.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\DbReferenceCollection.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\TimeoutTimer.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\ProviderBase\WrappedIUnknown.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Sql\IBinarySerialize.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Sql\invalidudtexception.cs" />
@@ -431,15 +438,11 @@ <Compile Include="..\referencesource\System.Data\System\Data\Sql\SqlUserDefinedAggregateAttribute.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Sql\SqlUserDefinedTypeAttribute.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\Sql\TriggerAction.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\SqlClient\ApplicationIntent.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\LocalDBAPI.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlClientEncryptionType.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlClientPermission.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlConnectionString.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlConnectionStringBuilder.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlError.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlErrorCollection.cs" />
- <Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlInfoMessageEvent.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\SqlUtil.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\TdsEnums.cs" />
<Compile Include="..\referencesource\System.Data\System\Data\SqlClient\TdsParserStaticMethods.cs" />
diff --git a/mcs/class/System.Data/corefx.common.sources b/mcs/class/System.Data/corefx.common.sources index 4ef6dc6b9c0..24f91f3bef6 100644 --- a/mcs/class/System.Data/corefx.common.sources +++ b/mcs/class/System.Data/corefx.common.sources @@ -24,7 +24,11 @@ ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbCommand.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DBCommandBuilder.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnection.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnectionPoolKey.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbConnectionStringBuilder.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataAdapter.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReader.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataReaderExtensions.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataRecord.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbDataSourceEnumerator.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbEnumerator.cs @@ -33,18 +37,23 @@ ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbMetaDataColumnNames.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbParameter.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbParameterCollection.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.CreatePermission.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderFactory.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbProviderSpecificTypePropertyAttribute.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DBSchemaRow.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DBSchemaTable.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DbTransaction.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DecimalStorage.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/DoubleStorage.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/FieldNameLookup.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/Groupbybehavior.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/IDbColumnSchemaGenerator.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/identifiercase.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/Int16Storage.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/Int32Storage.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/Int64Storage.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/MultipartIdentifier.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/Common/NameValuePair.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/ObjectStorage.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/RowUpdatedEventArgs.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/Common/RowUpdatingEventArgs.cs @@ -207,6 +216,7 @@ ../../../external/corefx/src/System.Data.Common/src/System/Data/StatementCompletedEventArgs.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/StatementCompletedEventHandler.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/StatementType.cs +../../../external/corefx/src/System.Data.Common/src/System/Data/StrongTypingException.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/UniqueConstraint.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/UpdateRowSource.cs ../../../external/corefx/src/System.Data.Common/src/System/Data/updatestatus.cs @@ -228,41 +238,38 @@ ../../../external/corefx/src/System.Data.Common/src/System/Xml/RegionIterator.cs ../../../external/corefx/src/System.Data.Common/src/System/Xml/TreeIterator.cs ../../../external/corefx/src/System.Data.Common/src/System/Xml/XmlBoundElement.cs +../../../external/corefx/src/System.Data.Common/src/System/Xml/XmlDataDocument.cs ../../../external/corefx/src/System.Data.Common/src/System/Xml/XmlDataImplementation.cs ../../../external/corefx/src/System.Data.Common/src/System/Xml/XPathNodePointer.cs -../../../external/corefx/src/System.Data.Common/src/System/Xml/XmlDataDocument.cs - +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/Common/ActivityCorrelator.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/OperationAbortedException.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/ProviderBase/DbReferenceCollection.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/ProviderBase/TimeoutTimer.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/ApplicationIntent.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlError.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlErrorCollection.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlInfoMessageEvent.cs +../../../external/corefx/src/System.Private.Xml/src/Misc/HResults.cs ../referencesource/System.Data/Microsoft/SqlServer/Server/SqlTriggerContext.cs ../referencesource/System.Data/Misc/ExternDll.cs -../referencesource/System.Data/Misc/HResults.cs ../referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs -../referencesource/System.Data/System/Data/Common/ActivityCorrelator.cs ../referencesource/System.Data/System/Data/Common/AdapterUtil.cs ../referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs -../referencesource/System.Data/System/Data/Common/DbConnectionPoolKey.cs ../referencesource/System.Data/System/Data/Common/DBConnectionString.cs -../referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs ../referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs ../referencesource/System.Data/System/Data/Common/DBDataPermission.cs ../referencesource/System.Data/System/Data/Common/DBDataPermissionAttribute.cs -../referencesource/System.Data/System/Data/Common/DbDataReader.cs -../referencesource/System.Data/System/Data/Common/DbProviderFactory.cs -../referencesource/System.Data/System/Data/Common/FieldNameLookup.cs ../referencesource/System.Data/System/Data/Common/GreenMethods.cs -../referencesource/System.Data/System/Data/Common/MultipartIdentifier.cs -../referencesource/System.Data/System/Data/Common/NameValuePair.cs ../referencesource/System.Data/System/Data/Common/NameValuePermission.cs ../referencesource/System.Data/System/Data/Common/SQLTypes/SqlXmlStorage.cs +../referencesource/System.Data/System/Data/DataSet.cs ../referencesource/System.Data/System/Data/OleDb/OleDbType.cs ../referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs -../referencesource/System.Data/System/Data/OperationAbortedException.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolOptions.cs -../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs ../referencesource/System.Data/System/Data/ProviderBase/DbMetaDataFactory.cs -../referencesource/System.Data/System/Data/ProviderBase/DbReferenceCollection.cs -../referencesource/System.Data/System/Data/ProviderBase/TimeoutTimer.cs ../referencesource/System.Data/System/Data/ProviderBase/WrappedIUnknown.cs ../referencesource/System.Data/System/Data/Sql/IBinarySerialize.cs ../referencesource/System.Data/System/Data/Sql/invalidudtexception.cs @@ -277,16 +284,11 @@ ../referencesource/System.Data/System/Data/Sql/SqlUserDefinedAggregateAttribute.cs ../referencesource/System.Data/System/Data/Sql/SqlUserDefinedTypeAttribute.cs ../referencesource/System.Data/System/Data/Sql/TriggerAction.cs -../referencesource/System.Data/System/Data/SqlClient/ApplicationIntent.cs ../referencesource/System.Data/System/Data/SqlClient/LocalDBAPI.cs ../referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionType.cs ../referencesource/System.Data/System/Data/SqlClient/SqlClientPermission.cs ../referencesource/System.Data/System/Data/SqlClient/SqlConnectionString.cs ../referencesource/System.Data/System/Data/SqlClient/SqlConnectionStringBuilder.cs -../referencesource/System.Data/System/Data/SqlClient/SqlError.cs -../referencesource/System.Data/System/Data/SqlClient/SqlErrorCollection.cs -../referencesource/System.Data/System/Data/SqlClient/SqlInfoMessageEvent.cs ../referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs ../referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs -../referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs -../referencesource/System.Data/System/Data/DataSet.cs
\ No newline at end of file +../referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs
\ No newline at end of file diff --git a/mcs/class/System.Data/net_4_x_System.Data.dll.sources b/mcs/class/System.Data/net_4_x_System.Data.dll.sources index fd236c73f6b..4977214850b 100644 --- a/mcs/class/System.Data/net_4_x_System.Data.dll.sources +++ b/mcs/class/System.Data/net_4_x_System.Data.dll.sources @@ -160,7 +160,7 @@ System.Data.Common/DbConnectionStringBuilderHelper.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolCounters.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPool.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolGroup.cs -../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolGroupProviderInfo.cs +../../../external/corefx/src/System.Data.SqlClient/src/System/Data/ProviderBase/DbConnectionPoolGroupProviderInfo.cs ../referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolIdentity.cs # ../referencesource/System.Data/System/Data/ProviderBase/DbParameterCollectionHelper.cs # ../referencesource/System.Data/System/Data/ProviderBase/DbParameterHelper.cs diff --git a/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors-net_4_x.csproj b/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors-net_4_x.csproj index d624f2e4c80..1466512e844 100644 --- a/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors-net_4_x.csproj +++ b/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors-net_4_x.csproj @@ -50,16 +50,16 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Compile Include="..\..\..\external\corefx\src\Common\src\System\Numerics\Hashing\HashHelpers.cs" />
- <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\\JitIntrinsicAttribute.cs" />
- <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\\Register.cs" />
- <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\\Vector.cs" />
- <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\\Vector_Operations.cs" />
<Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\ConstantHelper.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\JitIntrinsicAttribute.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Register.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector_Operations.cs" />
<Compile Include="..\..\build\common\Consts.cs" />
<Compile Include="..\..\build\common\SR.cs" />
<Compile Include="Assembly\AssemblyInfo.cs" />
<Compile Include="Assembly\TypeForwarders.cs" />
- <Compile Include="SR.cs" />
</ItemGroup>
+ <Compile Include="corefx\SR.cs" />
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
diff --git a/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors.dll.sources b/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors.dll.sources index a5f261e85ca..74524d655fd 100644 --- a/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors.dll.sources +++ b/mcs/class/System.Numerics.Vectors/System.Numerics.Vectors.dll.sources @@ -2,11 +2,11 @@ ../../build/common/SR.cs Assembly/AssemblyInfo.cs Assembly/TypeForwarders.cs -SR.cs +corefx/SR.cs ../../../external/corefx/src/Common/src/System/Numerics/Hashing/HashHelpers.cs ../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/ConstantHelper.cs -../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics//JitIntrinsicAttribute.cs -../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics//Register.cs -../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics//Vector_Operations.cs -../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics//Vector.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/JitIntrinsicAttribute.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Register.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector_Operations.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector.cs diff --git a/mcs/class/System.Numerics.Vectors/SR.cs b/mcs/class/System.Numerics.Vectors/corefx/SR.cs index 6c04e222d68..def5b0907ed 100644 --- a/mcs/class/System.Numerics.Vectors/SR.cs +++ b/mcs/class/System.Numerics.Vectors/corefx/SR.cs @@ -6,9 +6,6 @@ partial class SR { public const string Arg_ArgumentOutOfRangeException = "Index was out of bounds:"; public const string Arg_ElementsInSourceIsGreaterThanDestination = "Number of elements in source vector is greater than the destination array"; - public const string Arg_MultiDimArrayNotSupported = "Only one-dimensional arrays are supported"; public const string Arg_NullArgumentNullRef = "The method was called with a null array argument."; - public const string Arg_RegisterLengthOfRangeException = "length must be less than"; public const string Arg_TypeNotSupported = "Specified type is not supported"; - public const string Reflection_MethodNotSupported = "Vector<T>.Count cannot be called via reflection when intrinsics are enabled."; } diff --git a/mcs/class/System.Numerics/Makefile b/mcs/class/System.Numerics/Makefile index bc470e1b6e7..19d1e56a543 100644 --- a/mcs/class/System.Numerics/Makefile +++ b/mcs/class/System.Numerics/Makefile @@ -4,10 +4,12 @@ include ../../build/rules.make LIBRARY = System.Numerics.dll LIB_REFS = System -LIB_MCS_FLAGS = /unsafe -nowarn:414 -nowarn:436 +LIB_MCS_FLAGS = /unsafe TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -TXT_RESOURCE_STRINGS = ../referencesource/System.Numerics/System.Numerics.txt +RESX_RESOURCE_STRING = \ + ../../../external/corefx/src/System.Runtime.Numerics/src/Resources/Strings.resx \ + ../../../external/corefx/src/System.Numerics.Vectors/src/Resources/Strings.resx EXTRA_DISTFILES = diff --git a/mcs/class/System.Numerics/System.Numerics-net_4_x.csproj b/mcs/class/System.Numerics/System.Numerics-net_4_x.csproj index 598f385ec36..60a63a261c5 100644 --- a/mcs/class/System.Numerics/System.Numerics-net_4_x.csproj +++ b/mcs/class/System.Numerics/System.Numerics-net_4_x.csproj @@ -8,7 +8,7 @@ <SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{BD2FFDDC-BD89-4041-82F5-A696C941C7BE}</ProjectGuid>
<OutputType>Library</OutputType>
- <NoWarn>1699,414,436</NoWarn>
+ <NoWarn>1699</NoWarn>
<OutputPath>./../../class/lib/net_4_x</OutputPath>
<IntermediateOutputPath>obj-net_4_x</IntermediateOutputPath>
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
@@ -27,7 +27,7 @@ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
- <NoWarn>1699,414,436</NoWarn>
+ <NoWarn>1699</NoWarn>
<Optimize>false</Optimize>
<DefineConstants>TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM</DefineConstants>
<ErrorReport>prompt</ErrorReport>
@@ -35,7 +35,7 @@ </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
- <NoWarn>1699,414,436</NoWarn>
+ <NoWarn>1699</NoWarn>
<Optimize>true</Optimize>
<DefineConstants>NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM</DefineConstants>
<ErrorReport>prompt</ErrorReport>
@@ -49,27 +49,37 @@ </PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
+ <Compile Include="..\..\..\external\corefx\src\Common\src\System\Globalization\FormatProvider.Number.cs" />
+ <Compile Include="..\..\..\external\corefx\src\Common\src\System\Numerics\Hashing\HashHelpers.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\JitIntrinsicAttribute.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Matrix3x2.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Matrix4x4.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Plane.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Quaternion.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector2.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector2_Intrinsics.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector3.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector3_Intrinsics.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector4.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Numerics.Vectors\src\System\Numerics\Vector4_Intrinsics.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Globalization\FormatProvider.BigInteger.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Globalization\FormatProvider.NumberBuffer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigInteger.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.AddSub.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.BitsBuffer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.DivRem.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.FastReducer.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.GcdInv.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.PowMod.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigIntegerCalculator.SquMul.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\BigNumber.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\Complex.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Runtime.Numerics\src\System\Numerics\NumericsHelpers.cs" />
+ <Compile Include="..\..\build\common\Consts.cs" />
<Compile Include="..\..\build\common\SR.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\BigInteger.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\BigIntegerBuilder.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\BigNumber.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Complex.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\HashCodeHelper.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\JITIntrinsicAttribute.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Matrix3x2.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Matrix4x4.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\NumericsHelpers.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Plane.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Quaternion.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector_Operations.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector2.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector2_Intrinsics.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector3.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector3_Intrinsics.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector4.cs" />
- <Compile Include="..\referencesource\System.Numerics\System\Numerics\Vector4_Intrinsics.cs" />
<Compile Include="Assembly\AssemblyInfo.cs" />
- <Compile Include="ReferenceSources\SR.cs" />
</ItemGroup>
+ <Compile Include="corefx\SR.cs" />
+ <Compile Include="corefx\Vector.cs" />
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
diff --git a/mcs/class/System.Numerics/System.Numerics.dll.sources b/mcs/class/System.Numerics/System.Numerics.dll.sources index 9d03ee13917..1e56c801e93 100644 --- a/mcs/class/System.Numerics/System.Numerics.dll.sources +++ b/mcs/class/System.Numerics/System.Numerics.dll.sources @@ -1,21 +1,34 @@ +../../build/common/Consts.cs ../../build/common/SR.cs Assembly/AssemblyInfo.cs -ReferenceSources/SR.cs -../referencesource/System.Numerics/System/Numerics/BigInteger.cs -../referencesource/System.Numerics/System/Numerics/BigIntegerBuilder.cs -../referencesource/System.Numerics/System/Numerics/BigNumber.cs -../referencesource/System.Numerics/System/Numerics/Complex.cs -../referencesource/System.Numerics/System/Numerics/NumericsHelpers.cs -../referencesource/System.Numerics/System/Numerics/HashCodeHelper.cs -../referencesource/System.Numerics/System/Numerics/JITIntrinsicAttribute.cs -../referencesource/System.Numerics/System/Numerics/Matrix3x2.cs -../referencesource/System.Numerics/System/Numerics/Matrix4x4.cs -../referencesource/System.Numerics/System/Numerics/Plane.cs -../referencesource/System.Numerics/System/Numerics/Quaternion.cs -../referencesource/System.Numerics/System/Numerics/Vector2.cs -../referencesource/System.Numerics/System/Numerics/Vector2_Intrinsics.cs -../referencesource/System.Numerics/System/Numerics/Vector3.cs -../referencesource/System.Numerics/System/Numerics/Vector3_Intrinsics.cs -../referencesource/System.Numerics/System/Numerics/Vector4.cs -../referencesource/System.Numerics/System/Numerics/Vector4_Intrinsics.cs -../referencesource/System.Numerics/System/Numerics/Vector_Operations.cs +corefx/SR.cs +corefx/Vector.cs + +../../../external/corefx/src/Common/src/System/Globalization/FormatProvider.Number.cs +../../../external/corefx/src/Common/src/System/Numerics/Hashing/HashHelpers.cs + +../../../external/corefx/src/System.Runtime.Numerics/src/System/Globalization/FormatProvider.BigInteger.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Globalization/FormatProvider.NumberBuffer.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.AddSub.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.BitsBuffer.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.DivRem.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.FastReducer.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.GcdInv.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.PowMod.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.SquMul.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/BigNumber.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/Complex.cs +../../../external/corefx/src/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs + +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/JitIntrinsicAttribute.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Matrix3x2.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Matrix4x4.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Plane.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Quaternion.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector2.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector2_Intrinsics.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector3.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector3_Intrinsics.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector4.cs +../../../external/corefx/src/System.Numerics.Vectors/src/System/Numerics/Vector4_Intrinsics.cs diff --git a/mcs/class/System.Numerics/ReferenceSources/SR.cs b/mcs/class/System.Numerics/corefx/SR.cs index 3b4d7bd23e7..e4590b7131d 100644 --- a/mcs/class/System.Numerics/ReferenceSources/SR.cs +++ b/mcs/class/System.Numerics/corefx/SR.cs @@ -1,13 +1,13 @@ // -// This file was generated by txt2sr tool +// This file was generated by resx2sr tool // partial class SR { + public const string Argument_BadFormatSpecifier = "Format specifier was invalid."; public const string Argument_InvalidNumberStyles = "An undefined NumberStyles value is being used."; public const string Argument_InvalidHexStyle = "With the AllowHexSpecifier bit set in the enum bit field, the only other valid bits that can be combined into the enum value must be a subset of those in HexNumber."; public const string Argument_MustBeBigInt = "The parameter must be a BigInteger."; - public const string Format_InvalidFormatSpecifier = "Format specifier was invalid."; public const string Format_TooLarge = "The value is too large to be represented by this format specifier."; public const string ArgumentOutOfRange_MustBeNonNeg = "The number must be greater than or equal to zero."; public const string Overflow_BigIntInfinity = "BigInteger cannot represent infinity."; @@ -18,4 +18,8 @@ partial class SR public const string Overflow_UInt32 = "Value was either too large or too small for a UInt32."; public const string Overflow_UInt64 = "Value was either too large or too small for a UInt64."; public const string Overflow_Decimal = "Value was either too large or too small for a Decimal."; + public const string Arg_ArgumentOutOfRangeException = "Index was out of bounds:"; + public const string Arg_ElementsInSourceIsGreaterThanDestination = "Number of elements in source vector is greater than the destination array"; + public const string Arg_NullArgumentNullRef = "The method was called with a null array argument."; + public const string Arg_TypeNotSupported = "Specified type is not supported"; } diff --git a/mcs/class/System.Numerics/corefx/Vector.cs b/mcs/class/System.Numerics/corefx/Vector.cs new file mode 100644 index 00000000000..de085baeb13 --- /dev/null +++ b/mcs/class/System.Numerics/corefx/Vector.cs @@ -0,0 +1,12 @@ +namespace System.Numerics +{ + static class Vector + { + [JitIntrinsic] + public static bool IsHardwareAccelerated { + get { + return false; + } + } + } +}
\ No newline at end of file diff --git a/mcs/class/System.Runtime.Caching/ReferenceSources/R.Designer.cs b/mcs/class/System.Runtime.Caching/ReferenceSources/R.Designer.cs index 1a7d41de48d..2fdeb996965 100644 --- a/mcs/class/System.Runtime.Caching/ReferenceSources/R.Designer.cs +++ b/mcs/class/System.Runtime.Caching/ReferenceSources/R.Designer.cs @@ -1,5 +1,5 @@ // This is a copy of external/referencesource/System.Runtime.Caching/Resources/R.Designer.cs -// This verison does not use ResourceManager, instead it uses hard coded strings. +// This version does not use ResourceManager, instead it uses hard coded strings. // This should be removed once Mono has access to .NET resources. namespace System.Runtime.Caching.Resources { diff --git a/mcs/class/System/Makefile b/mcs/class/System/Makefile index 23554997cb6..19dcfaee734 100644 --- a/mcs/class/System/Makefile +++ b/mcs/class/System/Makefile @@ -14,6 +14,9 @@ RESOURCE_FILES = \ resources/Question.wav endif +RESX_RESOURCE_STRING = \ + ../../../external/corefx/src/System.Collections.Concurrent/src/Resources/Strings.resx + TEST_RESOURCES = \ Test/System/test-uri-props.txt \ Test/System/test-uri-props-manual.txt \ diff --git a/mcs/class/System/ReferenceSources/SR.cs b/mcs/class/System/ReferenceSources/SR.cs index 171360d9052..cacc4936713 100644 --- a/mcs/class/System/ReferenceSources/SR.cs +++ b/mcs/class/System/ReferenceSources/SR.cs @@ -104,34 +104,6 @@ partial class SR public const string NotSupported_ValueCollectionSet = "Mutating a value collection derived from a dictionary is not allowed."; public const string NotSupported_ReadOnlyCollection = "Collection is read-only."; public const string NotSupported_SortedListNestedWrite = "This operation is not supported on SortedList nested types because they require modifying the original SortedList."; - public const string BlockingCollection_ctor_BoundedCapacityRange = "The boundedCapacity argument must be positive."; - public const string BlockingCollection_ctor_CountMoreThanCapacity = "The collection argument contains more items than are allowed by the boundedCapacity."; - 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_Take_CollectionModified = "The underlying collection was modified from outside of the BlockingCollection<T>."; - public const string BlockingCollection_Completed = "The collection has been marked as complete with regards to additions."; - public const string BlockingCollection_Disposed = "The collection has been disposed."; - public const string BlockingCollection_TimeoutInvalid = "The specified timeout must represent a value between -1 and {0}, inclusive."; - public const string BlockingCollection_CantTakeWhenDone = "The collection argument is empty and has been marked as complete with regards to additions."; - public const string BlockingCollection_CantAddAnyWhenCompleted = "At least one of the specified collections is marked as complete with regards to additions."; - public const string BlockingCollection_CantTakeAnyWhenAllDone = "All collections are marked as complete with regards to additions."; - public const string BlockingCollection_ValidateCollectionsArray_ZeroSize = "The collections argument is a zero-length array."; - public const string BlockingCollection_ValidateCollectionsArray_LargeSize = "The collections length is greater than the supported range for 32 bit machine."; - public const string BlockingCollection_ValidateCollectionsArray_NullElems = "The collections argument contains at least one null element."; - public const string BlockingCollection_ValidateCollectionsArray_DispElems = "The collections argument contains at least one disposed element."; - public const string BlockingCollection_CompleteAdding_AlreadyDone = "The collection argument has already been marked as complete with regards to additions."; - public const string BlockingCollection_CopyTo_NonNegative = "The index argument must be greater than or equal zero."; - public const string BlockingCollection_CopyTo_TooManyElems = "The number of elements in the collection is greater than the available space from index to the end of the destination array."; - public const string BlockingCollection_CopyTo_MultiDim = "The array argument is multidimensional."; - public const string BlockingCollection_CopyTo_IncorrectType = "The array argument is of the incorrect type."; - public const string ConcurrentBag_Ctor_ArgumentNullException = "The collection argument is null."; - public const string ConcurrentBag_CopyTo_ArgumentNullException = "The array argument is null."; - public const string ConcurrentBag_CopyTo_ArgumentOutOfRangeException = "The index argument must be greater than or equal zero."; - public const string ConcurrentBag_CopyTo_ArgumentException_IndexGreaterThanLength = "The index argument must be less than the array length."; - public const string ConcurrentBag_CopyTo_ArgumentException_NoEnoughSpace = "The number of elements in the bag is greater than the available space from index to the end of the destination array."; - public const string ConcurrentBag_CopyTo_ArgumentException_InvalidArrayType = "The array argument is multidimensional or of an incorrect type."; - public const string ConcurrentCollection_SyncRoot_NotSupported = "The SyncRoot property may not be used for the synchronization of concurrent collections."; - public const string Common_OperationCanceled = "The operation was canceled."; public const string Barrier_ctor_ArgumentOutOfRange = "The participantCount argument must be non-negative and less than or equal to 32767."; public const string Barrier_AddParticipants_NonPositive_ArgumentOutOfRange = "The participantCount argument must be a positive value."; public const string Barrier_AddParticipants_Overflow_ArgumentOutOfRange = "Adding participantCount participants would result in the number of participants exceeding the maximum number allowed."; diff --git a/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs b/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs index 5db7246a4bd..cb3827785af 100644 --- a/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs +++ b/mcs/class/System/Test/System.Diagnostics/ProcessTest.cs @@ -1139,13 +1139,15 @@ namespace MonoTests.System.Diagnostics Assert.Ignore ("accessing parent pid, only available on unix"); using (Process process = Process.GetProcessById (getppid ())) + using (ManualResetEvent mre = new ManualResetEvent (false)) { Assert.IsFalse (process.WaitForExit (10), "#1"); Assert.IsFalse (process.HasExited, "#2"); Assert.Throws<InvalidOperationException>(delegate { int exitCode = process.ExitCode; }, "#3"); - process.Exited += (s, e) => Assert.Fail ("#4"); + process.Exited += (s, e) => mre.Set (); process.EnableRaisingEvents = true; + Assert.IsFalse (mre.WaitOne (100), "#4"); Assert.IsFalse (process.WaitForExit (10), "#5"); Assert.IsFalse (process.HasExited, "#6"); diff --git a/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs b/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs index bce47bcbf0d..6e82f9d6db8 100755 --- a/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs +++ b/mcs/class/System/Test/System.Net.Sockets/SocketTest.cs @@ -4541,10 +4541,8 @@ namespace MonoTests.System.Net.Sockets mSent.Set (); }, clientSocket); - if (!mSent.WaitOne (1500)) - throw new TimeoutException (); - if (!mReceived.WaitOne (1500)) - throw new TimeoutException (); + Assert.IsTrue (mSent.WaitOne (5000), "#1"); + Assert.IsTrue (mReceived.WaitOne (5000), "#2"); } finally { if (File.Exists (temp)) File.Delete (temp); @@ -4677,9 +4675,6 @@ namespace MonoTests.System.Net.Sockets } [Test] // Covers https://bugzilla.xamarin.com/show_bug.cgi?id=52549 -#if FEATURE_NO_BSD_SOCKETS - [ExpectedException (typeof (PlatformNotSupportedException))] -#endif public void SocketMismatchProtocol () { try { diff --git a/mcs/class/System/Test/System.Net.WebSockets/ClientWebSocketTest.cs b/mcs/class/System/Test/System.Net.WebSockets/ClientWebSocketTest.cs index cf4418e8d7a..b19688cf44c 100644 --- a/mcs/class/System/Test/System.Net.WebSockets/ClientWebSocketTest.cs +++ b/mcs/class/System/Test/System.Net.WebSockets/ClientWebSocketTest.cs @@ -159,7 +159,11 @@ namespace MonoTests.System.Net.WebSockets [Category ("MobileNotWorking")] // Fails when ran as part of the entire BCL test suite. Works when only this fixture is ran public void CloseAsyncTest () { - Assert.IsTrue (socket.ConnectAsync (new Uri (EchoServerUrl), CancellationToken.None).Wait (5000)); + if (!socket.ConnectAsync (new Uri (EchoServerUrl), CancellationToken.None).Wait (5000)) { + Assert.Inconclusive (socket.State.ToString ()); + return; + } + Assert.AreEqual (WebSocketState.Open, socket.State); Assert.IsTrue (socket.CloseAsync (WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).Wait (5000)); diff --git a/mcs/class/System/Test/System.Net/FtpWebRequestTest.cs b/mcs/class/System/Test/System.Net/FtpWebRequestTest.cs index 771d5d1fb6a..05654f49edd 100644 --- a/mcs/class/System/Test/System.Net/FtpWebRequestTest.cs +++ b/mcs/class/System/Test/System.Net/FtpWebRequestTest.cs @@ -336,10 +336,20 @@ namespace MonoTests.System.Net DownloadFile (new ServerDownload (true)); } - void DownloadFile (ServerDownload sp) + [Test] +#if FEATURE_NO_BSD_SOCKETS + [ExpectedException (typeof (PlatformNotSupportedException))] +#endif + public void DownloadFileNonLatinChars () + { + string filename = "\u0411\u0430\u0448\u043DRowan-\u041F\u0435\u0441\u043D\u043F\u0440\u043E\u043C\u043E\u043D\u0430\u0445\u0430\u0422\u0435\u043E\u0434\u043E\u0440\u0443\u0441\u0430\u0438\u0437\u0413\u0430\u043C\u043C\u0435\u043B\u044C\u043D\u0430.mp3"; + DownloadFile (new ServerDownload (null, null, filename, false), "ftp://{0}:{1}/" + filename); + } + + void DownloadFile (ServerDownload sp, string uriTemplate = "ftp://{0}:{1}/file.txt") { sp.Start (); - string uri = String.Format ("ftp://{0}:{1}/file.txt", EncloseIPv6 (sp.IPAddress), sp.Port); + string uri = String.Format (uriTemplate, EncloseIPv6 (sp.IPAddress), sp.Port); try { FtpWebRequest ftp = (FtpWebRequest) WebRequest.Create (uri); ftp.KeepAlive = false; @@ -370,7 +380,7 @@ namespace MonoTests.System.Net { // Some embedded FTP servers in Industrial Automation Hardware report // the PWD using backslashes, but allow forward slashes for CWD. - DownloadFile (new ServerDownload (@"\Users\someuser", "/Users/someuser/", false)); + DownloadFile (new ServerDownload (@"\Users\someuser", "/Users/someuser/", null, false)); } [Test] @@ -381,7 +391,7 @@ namespace MonoTests.System.Net { // Some embedded FTP servers in Industrial Automation Hardware report // the PWD using backslashes, but allow forward slashes for CWD. - DownloadFile (new ServerDownload (@"\Users\someuser", "/Users/someuser/", true)); + DownloadFile (new ServerDownload (@"\Users\someuser", "/Users/someuser/", null, true)); } [Test] @@ -580,18 +590,19 @@ namespace MonoTests.System.Net class ServerDownload : FtpServer { - string Pwd, Cwd; + string Pwd, Cwd, Filename; public ServerDownload (bool ipv6) - : this (null, null, ipv6) + : this (null, null, null, ipv6) { } - public ServerDownload (string pwd, string cwd, bool ipv6) + public ServerDownload (string pwd, string cwd, string filename, bool ipv6) : base (ipv6) { Pwd = pwd ?? "/home/someuser"; Cwd = cwd ?? "/home/someuser/"; + Filename = filename ?? "file.txt"; } protected override void Run () @@ -620,8 +631,8 @@ namespace MonoTests.System.Net writer.Flush (); str = reader.ReadLine (); - if (str != "RETR file.txt") { - Where = "RETR - " + str; + if (str != $"RETR {Filename}") { + Where = $"RETR - got: {str}, expected: RETR {Filename}"; client.Close (); return; } diff --git a/mcs/class/System/common.sources b/mcs/class/System/common.sources index 0efb5c41661..63ca1a082a2 100644 --- a/mcs/class/System/common.sources +++ b/mcs/class/System/common.sources @@ -354,9 +354,6 @@ ReferenceSources/Win32Exception.cs ../referencesource/System/regex/system/text/regularexpressions/compiledregexrunner.cs ../referencesource/System/regex/system/text/regularexpressions/compiledregexrunnerfactory.cs -../referencesource/System/sys/system/collections/concurrent/BlockingCollection.cs -../referencesource/System/sys/system/collections/concurrent/ConcurrentBag.cs - ../referencesource/System/compmod/system/collections/generic/bithelper.cs ../referencesource/System/compmod/system/collections/generic/debugview.cs ../referencesource/System/compmod/system/collections/generic/iset.cs @@ -924,8 +921,13 @@ ReferenceSources/Win32Exception.cs ../referencesource/System/compmod/microsoft/win32/safehandles/SafeProcessHandle.cs +corefx/SR.cs + ../../../external/corefx/src/System.Runtime.Extensions/src/System/CodeDom/Compiler/IndentedTextWriter.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/BlockingCollection.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentBag.cs + ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/CompressionLevel.cs ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/CompressionMode.cs ../../../external/corefx/src/System.IO.Compression/src/System/IO/Compression/GZipStream.cs diff --git a/mcs/class/System/corefx/SR.cs b/mcs/class/System/corefx/SR.cs new file mode 100644 index 00000000000..892f0113ccf --- /dev/null +++ b/mcs/class/System/corefx/SR.cs @@ -0,0 +1,48 @@ +// +// This file was generated by resx2sr tool +// + +partial class SR +{ + 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."; + public const string BlockingCollection_CantTakeAnyWhenAllDone = "All collections are marked as complete with regards to additions."; + public const string BlockingCollection_CantTakeWhenDone = "The collection argument is empty and has been marked as complete with regards to additions."; + public const string BlockingCollection_Completed = "The collection has been marked as complete with regards to additions."; + public const string BlockingCollection_CopyTo_IncorrectType = "The array argument is of the incorrect type."; + public const string BlockingCollection_CopyTo_MultiDim = "The array argument is multidimensional."; + public const string BlockingCollection_CopyTo_NonNegative = "The index argument must be greater than or equal zero."; + public const string Collection_CopyTo_TooManyElems = "The number of elements in the collection is greater than the available space from index to the end of the destination array."; + public const string BlockingCollection_ctor_BoundedCapacityRange = "The boundedCapacity argument must be positive."; + public const string BlockingCollection_ctor_CountMoreThanCapacity = "The collection argument contains more items than are allowed by the boundedCapacity."; + public const string BlockingCollection_Disposed = "The collection has been disposed."; + public const string BlockingCollection_Take_CollectionModified = "The underlying collection was modified from outside of the BlockingCollection<T>."; + public const string BlockingCollection_TimeoutInvalid = "The specified timeout must represent a value between -1 and {0}, inclusive."; + public const string BlockingCollection_ValidateCollectionsArray_DispElems = "The collections argument contains at least one disposed element."; + public const string BlockingCollection_ValidateCollectionsArray_LargeSize = "The collections length is greater than the supported range for 32 bit machine."; + public const string BlockingCollection_ValidateCollectionsArray_NullElems = "The collections argument contains at least one null element."; + public const string BlockingCollection_ValidateCollectionsArray_ZeroSize = "The collections argument is a zero-length array."; + public const string Common_OperationCanceled = "The operation was canceled."; + public const string ConcurrentBag_Ctor_ArgumentNullException = "The collection argument is null."; + public const string ConcurrentBag_CopyTo_ArgumentNullException = "The array argument is null."; + public const string Collection_CopyTo_ArgumentOutOfRangeException = "The index argument must be greater than or equal zero."; + public const string ConcurrentCollection_SyncRoot_NotSupported = "The SyncRoot property may not be used for the synchronization of concurrent collections."; + public const string ConcurrentDictionary_ArrayIncorrectType = "The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array."; + public const string ConcurrentDictionary_SourceContainsDuplicateKeys = "The source argument contains duplicate keys."; + public const string ConcurrentDictionary_ConcurrencyLevelMustBePositive = "The concurrencyLevel argument must be positive."; + public const string ConcurrentDictionary_CapacityMustNotBeNegative = "The capacity argument must be greater than or equal to zero."; + public const string ConcurrentDictionary_IndexIsNegative = "The index argument is less than zero."; + public const string ConcurrentDictionary_ArrayNotLargeEnough = "The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array."; + public const string ConcurrentDictionary_KeyAlreadyExisted = "The key already existed in the dictionary."; + public const string ConcurrentDictionary_ItemKeyIsNull = "TKey is a reference type and item.Key is null."; + public const string ConcurrentDictionary_TypeOfKeyIncorrect = "The key was of an incorrect type for this dictionary."; + public const string ConcurrentDictionary_TypeOfValueIncorrect = "The value was of an incorrect type for this dictionary."; + public const string ConcurrentStack_PushPopRange_CountOutOfRange = "The count argument must be greater than or equal to zero."; + public const string ConcurrentStack_PushPopRange_InvalidCount = "The sum of the startIndex and count arguments must be less than or equal to the collection's Count."; + public const string ConcurrentStack_PushPopRange_StartOutOfRange = "The startIndex argument must be greater than or equal to zero."; + public const string Partitioner_DynamicPartitionsNotSupported = "Dynamic partitions are not supported by this partitioner."; + 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."; +} diff --git a/mcs/class/corlib/Assembly/AssemblyInfo.cs b/mcs/class/corlib/Assembly/AssemblyInfo.cs index 59ef32f147f..6e1e9ef1264 100644 --- a/mcs/class/corlib/Assembly/AssemblyInfo.cs +++ b/mcs/class/corlib/Assembly/AssemblyInfo.cs @@ -76,8 +76,6 @@ using System.Runtime.InteropServices; [assembly: InternalsVisibleTo ("System, PublicKey=" + AssemblyRef.FrameworkPublicKeyFull2)] [assembly: InternalsVisibleTo ("System.Core, PublicKey=" + AssemblyRef.FrameworkPublicKeyFull2)] -[assembly: InternalsVisibleTo ("System.Numerics, PublicKey=00000000000000000400000000000000")] - [assembly: InternalsVisibleTo ("System.Runtime.WindowsRuntime, PublicKey=00000000000000000400000000000000")] [assembly: InternalsVisibleTo ("System.Runtime.WindowsRuntime.UI.Xaml, PublicKey=00000000000000000400000000000000")] diff --git a/mcs/class/corlib/Makefile b/mcs/class/corlib/Makefile index 965d85ddee2..19b9392fc78 100644 --- a/mcs/class/corlib/Makefile +++ b/mcs/class/corlib/Makefile @@ -27,7 +27,8 @@ endif RESOURCE_STRINGS = ../referencesource/mscorlib/mscorlib.txt RESX_RESOURCE_STRING = \ - ../../../external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx + ../../../external/corert/src/System.Private.CoreLib/src/Resources/Strings.resx \ + ../../../external/corefx/src/System.Collections.Concurrent/src/Resources/Strings.resx LIBRARY_COMPILE = $(BOOT_COMPILE) LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION) diff --git a/mcs/class/corlib/System.Reflection.Emit/PEFileKinds.cs b/mcs/class/corlib/System.Reflection.Emit/PEFileKinds.cs index adb9998e66e..762dad80fd4 100644 --- a/mcs/class/corlib/System.Reflection.Emit/PEFileKinds.cs +++ b/mcs/class/corlib/System.Reflection.Emit/PEFileKinds.cs @@ -22,7 +22,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if !FULL_AOT_RUNTIME || IOS_REFLECTION using System.Runtime.InteropServices; namespace System.Reflection.Emit { @@ -35,5 +34,3 @@ namespace System.Reflection.Emit { WindowApplication = 3 } } - -#endif diff --git a/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs b/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs index 960ecf6e7b8..3bd11264b1a 100644 --- a/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs +++ b/mcs/class/corlib/System.Threading/RegisteredWaitHandle.cs @@ -98,17 +98,16 @@ namespace System.Threading private void DoCallBack (object timedOut) { - if (_callback != null) { - try { - _callback (_state, (bool)timedOut); - } catch {} - } - - lock (this) - { - _callsInProcess--; - if (_unregistered && _callsInProcess == 0 && _finalEvent != null) - NativeEventCalls.SetEvent (_finalEvent.SafeWaitHandle); + try { + if (_callback != null) + _callback (_state, (bool)timedOut); + } finally { + lock (this) + { + _callsInProcess--; + if (_unregistered && _callsInProcess == 0 && _finalEvent != null) + NativeEventCalls.SetEvent (_finalEvent.SafeWaitHandle); + } } } diff --git a/mcs/class/corlib/System/Array.cs b/mcs/class/corlib/System/Array.cs index 8f6e0aa098e..d2565a3c209 100644 --- a/mcs/class/corlib/System/Array.cs +++ b/mcs/class/corlib/System/Array.cs @@ -1290,6 +1290,34 @@ namespace System } } + public static void Reverse<T>(T[] array) + { + if (array == null) + throw new ArgumentNullException (nameof (array)); + + Reverse (array, 0, array.Length); + } + + public static void Reverse<T>(T[] array, int index, int length) + { + if (array == null) + throw new ArgumentNullException (nameof (array)); + if (index < 0 || length < 0) + throw new ArgumentOutOfRangeException ((index < 0 ? nameof (index) : nameof (length))); + if (array.Length - index < length) + throw new ArgumentException (); + + int i = index; + int j = index + length - 1; + while (i < j) { + T temp = array [i]; + array [i] = array [j]; + array [j] = temp; + i++; + j--; + } + } + [ReliabilityContractAttribute (Consistency.MayCorruptInstance, Cer.MayFail)] public static void Sort (Array array) { @@ -3130,6 +3158,30 @@ namespace System return new ReadOnlyCollection<T> (array); } + public static void Fill<T> (T[] array, T value) + { + if (array == null) + throw new ArgumentNullException (nameof (array)); + + for (int i = 0; i < array.Length; i++) + array [i] = value; + } + + public static void Fill<T> (T[] array, T value, int startIndex, int count) + { + if (array == null) + throw new ArgumentNullException (nameof (array)); + + if (startIndex < 0 || startIndex > array.Length) + throw new ArgumentOutOfRangeException (nameof (startIndex)); + + if (count < 0 || startIndex > array.Length - count) + throw new ArgumentOutOfRangeException (nameof (count)); + + for (int i = startIndex; i < startIndex + count; i++) + array [i] = value; + } + public static T Find<T> (T [] array, Predicate<T> match) { if (array == null) diff --git a/mcs/class/corlib/corert/SR.cs b/mcs/class/corlib/corefx/SR.cs index 09ed641b025..06663603968 100644 --- a/mcs/class/corlib/corert/SR.cs +++ b/mcs/class/corlib/corefx/SR.cs @@ -194,6 +194,7 @@ partial class SR public const string Argument_OneOfCulturesNotSupported = "Culture name {0} or {1} is not supported."; public const string Argument_OnlyMscorlib = "Only mscorlib's assembly is valid."; public const string Argument_OutOfOrderDateTimes = "The DateStart property must come before the DateEnd property."; + public const string ArgumentOutOfRange_HugeArrayNotSupported = "Arrays larger than 2GB are not supported."; public const string ArgumentOutOfRange_Index = "Index was out of range. Must be non-negative and less than the size of the collection."; public const string ArgumentOutOfRange_NeedNonNegNum = "Non-negative number required."; public const string ArgumentOutOfRange_NeedNonNegNumRequired = "Non-negative number required."; @@ -649,4 +650,70 @@ partial class SR public const string IO_SeekAppendOverwrite = "Unable seek backward to overwrite data that previously existed in a file opened in Append mode."; public const string IO_FileTooLongOrHandleNotSync = "IO operation will not work. Most likely the file will become too long or the handle was not opened to support synchronous IO operations."; public const string IndexOutOfRange_IORaceCondition = "Probable I/O race condition detected while copying memory. The I/O package is not thread safe by default. In multithreaded applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods. This also applies to classes like StreamWriter and StreamReader."; + public const string Argument_StreamNotSeekable = "Stream was not seekable."; + public const string Arg_ResourceFileUnsupportedVersion = "The ResourceReader class does not know how to read this version of .resources files."; + public const string Resources_StreamNotValid = "Stream is not a valid resource file."; + public const string BadImageFormat_ResourcesHeaderCorrupted = "Corrupt .resources file. Unable to read resources from this file because of invalid header information. Try regenerating the .resources file."; + public const string Argument_StreamNotReadable = "Stream was not readable."; + public const string BadImageFormat_NegativeStringLength = "Corrupt .resources file. String length must be non-negative."; + public const string BadImageFormat_ResourcesNameInvalidOffset = "Corrupt .resources file. The Invalid offset into name section is ."; + public const string BadImageFormat_TypeMismatch = "Corrupt .resources file. The specified type doesn't match the available data in the stream."; + public const string BadImageFormat_ResourceNameCorrupted_NameIndex = "Corrupt .resources file. The resource name for name index that extends past the end of the stream is "; + public const string BadImageFormat_ResourcesDataInvalidOffset = "Corrupt .resources file. Invalid offset into data section is "; + public const string Format_Bad7BitInt32 = "Too many bytes in what should have been a 7 bit encoded Int32."; + public const string BadImageFormat_InvalidType = "Corrupt .resources file. The specified type doesn't exist."; + public const string ResourceReaderIsClosed = "ResourceReader is closed."; + public const string Arg_MissingManifestResourceException = "Unable to find manifest resource."; + public const string Serialization_MissingKeys = "The keys for this dictionary are missing."; + public const string Serialization_NullKey = "One of the serialized keys is null."; + public const string NotSupported_KeyCollectionSet = "Mutating a key collection derived from a dictionary is not allowed."; + public const string NotSupported_ValueCollectionSet = "Mutating a value collection derived from a dictionary is not allowed."; + public const string IO_IO_StreamTooLong = "Stream was too long."; + public const string UnauthorizedAccess_MemStreamBuffer = "MemoryStream's internal buffer cannot be accessed."; + public const string NotSupported_MemStreamNotExpandable = "Memory stream is not expandable."; + public const string IO_IO_SeekBeforeBegin = "An attempt was made to move the position before the beginning of the stream."; + public const string ArgumentNull_Stream = "Stream cannot be null."; + public const string IO_IO_InvalidStringLen_Len = "BinaryReader encountered an invalid string length of {0} characters."; + public const string ArgumentOutOfRange_BinaryReaderFillBuffer = "The number of bytes requested does not fit into BinaryReader's internal buffer."; + 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."; + public const string BlockingCollection_CantTakeAnyWhenAllDone = "All collections are marked as complete with regards to additions."; + public const string BlockingCollection_CantTakeWhenDone = "The collection argument is empty and has been marked as complete with regards to additions."; + public const string BlockingCollection_Completed = "The collection has been marked as complete with regards to additions."; + public const string BlockingCollection_CopyTo_IncorrectType = "The array argument is of the incorrect type."; + public const string BlockingCollection_CopyTo_MultiDim = "The array argument is multidimensional."; + public const string BlockingCollection_CopyTo_NonNegative = "The index argument must be greater than or equal zero."; + public const string Collection_CopyTo_TooManyElems = "The number of elements in the collection is greater than the available space from index to the end of the destination array."; + public const string BlockingCollection_ctor_BoundedCapacityRange = "The boundedCapacity argument must be positive."; + public const string BlockingCollection_ctor_CountMoreThanCapacity = "The collection argument contains more items than are allowed by the boundedCapacity."; + public const string BlockingCollection_Disposed = "The collection has been disposed."; + public const string BlockingCollection_Take_CollectionModified = "The underlying collection was modified from outside of the BlockingCollection<T>."; + public const string BlockingCollection_TimeoutInvalid = "The specified timeout must represent a value between -1 and {0}, inclusive."; + public const string BlockingCollection_ValidateCollectionsArray_DispElems = "The collections argument contains at least one disposed element."; + public const string BlockingCollection_ValidateCollectionsArray_LargeSize = "The collections length is greater than the supported range for 32 bit machine."; + public const string BlockingCollection_ValidateCollectionsArray_NullElems = "The collections argument contains at least one null element."; + public const string BlockingCollection_ValidateCollectionsArray_ZeroSize = "The collections argument is a zero-length array."; + public const string Common_OperationCanceled = "The operation was canceled."; + public const string ConcurrentBag_Ctor_ArgumentNullException = "The collection argument is null."; + public const string ConcurrentBag_CopyTo_ArgumentNullException = "The array argument is null."; + public const string Collection_CopyTo_ArgumentOutOfRangeException = "The index argument must be greater than or equal zero."; + public const string ConcurrentCollection_SyncRoot_NotSupported = "The SyncRoot property may not be used for the synchronization of concurrent collections."; + public const string ConcurrentDictionary_ArrayIncorrectType = "The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array."; + public const string ConcurrentDictionary_SourceContainsDuplicateKeys = "The source argument contains duplicate keys."; + public const string ConcurrentDictionary_ConcurrencyLevelMustBePositive = "The concurrencyLevel argument must be positive."; + public const string ConcurrentDictionary_CapacityMustNotBeNegative = "The capacity argument must be greater than or equal to zero."; + public const string ConcurrentDictionary_IndexIsNegative = "The index argument is less than zero."; + public const string ConcurrentDictionary_ArrayNotLargeEnough = "The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array."; + public const string ConcurrentDictionary_KeyAlreadyExisted = "The key already existed in the dictionary."; + public const string ConcurrentDictionary_ItemKeyIsNull = "TKey is a reference type and item.Key is null."; + public const string ConcurrentDictionary_TypeOfKeyIncorrect = "The key was of an incorrect type for this dictionary."; + public const string ConcurrentDictionary_TypeOfValueIncorrect = "The value was of an incorrect type for this dictionary."; + public const string ConcurrentStack_PushPopRange_CountOutOfRange = "The count argument must be greater than or equal to zero."; + public const string ConcurrentStack_PushPopRange_InvalidCount = "The sum of the startIndex and count arguments must be less than or equal to the collection's Count."; + public const string ConcurrentStack_PushPopRange_StartOutOfRange = "The startIndex argument must be greater than or equal to zero."; + public const string Partitioner_DynamicPartitionsNotSupported = "Dynamic partitions are not supported by this partitioner."; + 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."; } diff --git a/mcs/class/corlib/corert/Debug.cs b/mcs/class/corlib/corert/Debug.cs index 6a889367529..7a7b21675c7 100644 --- a/mcs/class/corlib/corert/Debug.cs +++ b/mcs/class/corlib/corert/Debug.cs @@ -9,5 +9,9 @@ namespace System.Diagnostics.Private public static void Assert (bool condition, string message) { } + + public static void Fail (string message) + { + } } } diff --git a/mcs/class/corlib/corlib.dll.sources b/mcs/class/corlib/corlib.dll.sources index d6faf256138..dd7ac01ff3f 100644 --- a/mcs/class/corlib/corlib.dll.sources +++ b/mcs/class/corlib/corlib.dll.sources @@ -1107,14 +1107,6 @@ ReferenceSources/Type.cs ../referencesource/mscorlib/system/collections/generic/keyvaluepair.cs ../referencesource/mscorlib/system/collections/generic/list.cs -../referencesource/mscorlib/system/collections/Concurrent/ConcurrentDictionary.cs -../referencesource/mscorlib/system/collections/Concurrent/ConcurrentQueue.cs -../referencesource/mscorlib/system/collections/Concurrent/ConcurrentStack.cs -../referencesource/mscorlib/system/collections/Concurrent/IProducerConsumerCollection.cs -../referencesource/mscorlib/system/collections/Concurrent/OrderablePartitioner.cs -../referencesource/mscorlib/system/collections/Concurrent/Partitioner.cs -../referencesource/mscorlib/system/collections/Concurrent/PartitionerStatic.cs - ../referencesource/mscorlib/system/diagnostics/assert.cs ../referencesource/mscorlib/system/diagnostics/assertfilter.cs ../referencesource/mscorlib/system/diagnostics/assertfilters.cs @@ -1646,7 +1638,6 @@ ReferenceSources/Type.cs ../referencesource/mscorlib/microsoft/win32/safehandles/win32safehandles.cs corert/Debug.cs -corert/SR.cs ../../../external/corert/src/Common/src/System/Numerics/Hashing/HashHelpers.cs @@ -1660,3 +1651,13 @@ corert/SR.cs ../../../external/corert/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ITuple.cs ../../../external/corert/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/TupleElementNamesAttribute.cs +corefx/SR.cs + +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/CDSCollectionETWBCLProvider.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentDictionary.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentQueue.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentStack.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/IProducerConsumerCollection.cs +../../../external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/OrderablePartitioner.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 diff --git a/mcs/class/referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs b/mcs/class/referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs index 62eb1dcc3f8..7fcf6f07ab3 100644 --- a/mcs/class/referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs +++ b/mcs/class/referencesource/System.Data/System/Data/CodeGen/StrongTypingException.cs @@ -13,6 +13,7 @@ namespace System.Data { using System.Data; using System.Runtime.Serialization; +#if !COREFX /// <devdoc> /// <para>DEV: The exception that is throwing from strong typed DataSet when user access to DBNull value.</para> /// </devdoc> @@ -39,7 +40,7 @@ namespace System.Data { HResult = HResults.StrongTyping; } } - +#endif /// <devdoc> /// <para>DEV: The exception that is throwing in generating strong typed DataSet when name conflict happens.</para> diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs b/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs index 1e5ea43e271..32bc1e964e2 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/AdapterUtil.cs @@ -55,6 +55,8 @@ namespace System.Data.Common { // The resource Framework.txt will ensure proper string text based on the appropriate // locale. + public const CompareOptions DefaultCompareOptions = CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth | CompareOptions.IgnoreCase; + static internal Task<T> CreatedTaskWithException<T>(Exception ex) { TaskCompletionSource<T> completion = new TaskCompletionSource<T>(); completion.SetException(ex); @@ -77,27 +79,9 @@ namespace System.Data.Common { } } - // NOTE: Initializing a Task in SQL CLR requires the "UNSAFE" permission set (http://msdn.microsoft.com/en-us/library/ms172338.aspx) - // Therefore we are lazily initializing these Tasks to avoid forcing customers to use the "UNSAFE" set when they are actually using no Async features (See Dev11 Bug #193253) - static private Task<bool> _trueTask = null; - static internal Task<bool> TrueTask { - get { - if (_trueTask == null) { - _trueTask = Task.FromResult<bool>(true); - } - return _trueTask; - } - } + static internal Task<bool> s_trueTask = Task.FromResult<bool>(true); - static private Task<bool> _falseTask = null; - static internal Task<bool> FalseTask { - get { - if (_falseTask == null) { - _falseTask = Task.FromResult<bool>(false); - } - return _falseTask; - } - } + static internal Task<bool> s_falseTask = Task.FromResult<bool>(true); [BidMethod] // this method accepts BID format as an argument, this attribute allows FXCopBid rule to validate calls to it static private void TraceException( diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/DBConnectionString.cs b/mcs/class/referencesource/System.Data/System/Data/Common/DBConnectionString.cs index ed7b7b4c5d1..e2e362e7a24 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/DBConnectionString.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/DBConnectionString.cs @@ -86,7 +86,7 @@ namespace System.Data.Common { _encryptedUsersConnectionString = connectionOptions.UsersConnectionString(false); _hasPassword = connectionOptions.HasPasswordKeyword; _parsetable = connectionOptions.Parsetable; - _keychain = connectionOptions.KeyChain; + _keychain = connectionOptions._keyChain; // we do not want to serialize out user password unless directed so by "persist security info=true" // otherwise all instances of user's password will be replaced with "*" diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs b/mcs/class/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs index 11257cc6dea..6f283876b38 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs @@ -107,7 +107,7 @@ namespace System.Data.Common { private readonly string _usersConnectionString; private readonly Hashtable _parsetable; - internal readonly NameValuePair KeyChain; + internal readonly NameValuePair _keyChain; internal readonly bool HasPasswordKeyword; internal readonly bool HasUserIdKeyword; @@ -143,7 +143,7 @@ namespace System.Data.Common { // first pass on parsing, initial syntax check if (0 < _usersConnectionString.Length) { - KeyChain = ParseInternal(_parsetable, _usersConnectionString, true, synonyms, UseOdbcRules); + _keyChain = ParseInternal(_parsetable, _usersConnectionString, true, synonyms, UseOdbcRules); HasPasswordKeyword = (_parsetable.ContainsKey(KEY.Password) || _parsetable.ContainsKey(SYNONYM.Pwd)); HasUserIdKeyword = (_parsetable.ContainsKey(KEY.User_ID) || _parsetable.ContainsKey(SYNONYM.UID)); } @@ -155,7 +155,7 @@ namespace System.Data.Common { HasUserIdKeyword = connectionOptions.HasUserIdKeyword; UseOdbcRules = connectionOptions.UseOdbcRules; _parsetable = connectionOptions._parsetable; - KeyChain = connectionOptions.KeyChain; + _keyChain = connectionOptions._keyChain; } @@ -201,7 +201,7 @@ namespace System.Data.Common { } public bool IsEmpty { - get { return (null == KeyChain); } + get { return (null == _keyChain); } } internal Hashtable Parsetable { @@ -439,7 +439,7 @@ namespace System.Data.Common { int copyPosition = 0; bool expanded = false; - for(NameValuePair current = KeyChain; null != current; current = current.Next) { + for(NameValuePair current = _keyChain; null != current; current = current.Next) { value = current.Value; // remove duplicate keyswords from connectionstring @@ -517,7 +517,7 @@ namespace System.Data.Common { int copyPosition = 0; StringBuilder builder = new StringBuilder(_usersConnectionString.Length); - for(NameValuePair current = KeyChain; null != current; current = current.Next) { + for(NameValuePair current = _keyChain; null != current; current = current.Next) { if ((current.Name == keyword) && (current.Value == this[keyword])) { // only replace the parse end-result value instead of all values // so that when duplicate-keywords occur other original values remain in place @@ -929,7 +929,7 @@ namespace System.Data.Common { int copyPosition = 0; NameValuePair head = null, tail = null, next = null; StringBuilder builder = new StringBuilder(_usersConnectionString.Length); - for(NameValuePair current = KeyChain; null != current; current = current.Next) { + for(NameValuePair current = _keyChain; null != current; current = current.Next) { if ((KEY.Password != current.Name) && (SYNONYM.Pwd != current.Name)) { builder.Append(_usersConnectionString, copyPosition, current.Length); if (fakePassword) { diff --git a/mcs/class/referencesource/System.Data/System/Data/Common/System.Data_BID.cs b/mcs/class/referencesource/System.Data/System/Data/Common/System.Data_BID.cs index c95844c82a8..9646eb88b49 100644 --- a/mcs/class/referencesource/System.Data/System/Data/Common/System.Data_BID.cs +++ b/mcs/class/referencesource/System.Data/System/Data/Common/System.Data_BID.cs @@ -262,7 +262,7 @@ internal static partial class Bid [BidMethod] [BidArgumentType(typeof(string))] // format string should have a string spec (%ls) for an Activity ID argument as last internal static void CorrelationTrace(string fmtPrintfW, System.Int32 a1) { - if ((modFlags & System.Data.Common.ActivityCorrelator.CorrelationTracePoints) != 0 + if ((modFlags & Bid.ApiGroup.Correlation) != 0 && (modFlags & Bid.ApiGroup.Trace) != 0 && modID != NoData) { System.Data.Common.ActivityCorrelator.ActivityId actId = System.Data.Common.ActivityCorrelator.Next(); NativeMethods.Trace(modID, UIntPtr.Zero, UIntPtr.Zero, fmtPrintfW, a1, actId.ToString()); @@ -273,7 +273,7 @@ internal static partial class Bid [BidArgumentType(typeof(string))] // format string should have a string spec (%ls) for an Activity ID argument as last internal static void CorrelationTrace(string fmtPrintfW) { - if ((modFlags & System.Data.Common.ActivityCorrelator.CorrelationTracePoints) != 0 + if ((modFlags & Bid.ApiGroup.Correlation) != 0 && (modFlags & Bid.ApiGroup.Trace) != 0 && modID != NoData) { System.Data.Common.ActivityCorrelator.ActivityId actId = System.Data.Common.ActivityCorrelator.Next(); NativeMethods.Trace(modID, UIntPtr.Zero, UIntPtr.Zero, fmtPrintfW, actId.ToString()); @@ -283,7 +283,7 @@ internal static partial class Bid [BidMethod] [BidArgumentType(typeof(string))] // format string should have a string spec (%ls) for an Activity ID argument as last internal static void CorrelationTrace(string fmtPrintfW, System.Int32 a1, System.Int32 a2) { - if ((modFlags & System.Data.Common.ActivityCorrelator.CorrelationTracePoints) != 0 + if ((modFlags & Bid.ApiGroup.Correlation) != 0 && (modFlags & Bid.ApiGroup.Trace) != 0 && modID != NoData) { System.Data.Common.ActivityCorrelator.ActivityId actId = System.Data.Common.ActivityCorrelator.Next(); NativeMethods.Trace(modID, UIntPtr.Zero, UIntPtr.Zero, fmtPrintfW, a1, a2, actId.ToString()); diff --git a/mcs/class/referencesource/System/compmod/system/collections/generic/stack.cs b/mcs/class/referencesource/System/compmod/system/collections/generic/stack.cs index eb8d46d665f..2a88477ebb7 100644 --- a/mcs/class/referencesource/System/compmod/system/collections/generic/stack.cs +++ b/mcs/class/referencesource/System/compmod/system/collections/generic/stack.cs @@ -227,6 +227,22 @@ namespace System.Collections.Generic { _array[_size] = default(T); // Free memory quicker. return item; } + +#if MONO + public bool TryPop(out T result) + { + if (_size == 0) + { + result = default(T); + return false; + } + + _version++; + result = _array[--_size]; + _array[_size] = default(T); // Free memory quicker. + return true; + } +#endif // Pushes an item to the top of the stack. // diff --git a/mcs/mcs/class.cs b/mcs/mcs/class.cs index e5d0b1f1735..fe79b444e36 100644 --- a/mcs/mcs/class.cs +++ b/mcs/mcs/class.cs @@ -1443,7 +1443,11 @@ namespace Mono.CSharp targs.Arguments = new TypeSpec[hoisted_tparams.Length]; for (int i = 0; i < hoisted_tparams.Length; ++i) { var tp = hoisted_tparams[i]; - var local_tp = new TypeParameter (tp, null, new MemberName (tp.Name, Location), null); + var tp_name = tp.Name; +#if DEBUG + tp_name += "_Proxy"; +#endif + var local_tp = new TypeParameter (tp, null, new MemberName (tp_name, Location), null); tparams.Add (local_tp); targs.Add (new SimpleName (tp.Name, Location)); @@ -1459,6 +1463,12 @@ namespace Mono.CSharp var mutator = new TypeParameterMutator (hoisted_tparams, tparams); return_type = mutator.Mutate (return_type); local_param_types = mutator.Mutate (local_param_types); + + var inflator = new TypeParameterInflator (this, null, hoisted_tparams, targs.Arguments); + for (int i = 0; i < hoisted_tparams.Length; ++i) { + var tp_spec = (TypeParameterSpec) targs.Arguments [i]; + tp_spec.InflateConstraints (inflator, tp_spec); + } } else { member_name = new MemberName (name); } @@ -1471,7 +1481,7 @@ namespace Mono.CSharp base_parameters[i].Resolve (this, i); } - var cloned_params = ParametersCompiled.CreateFullyResolved (base_parameters, method.Parameters.Types); + var cloned_params = ParametersCompiled.CreateFullyResolved (base_parameters, local_param_types); if (method.Parameters.HasArglist) { cloned_params.FixedParameters[0] = new Parameter (null, "__arglist", Parameter.Modifier.NONE, null, Location); cloned_params.Types[0] = Module.PredefinedTypes.RuntimeArgumentHandle.Resolve (); diff --git a/mcs/mcs/codegen.cs b/mcs/mcs/codegen.cs index d5ba75c1281..c580a8a7291 100644 --- a/mcs/mcs/codegen.cs +++ b/mcs/mcs/codegen.cs @@ -1070,7 +1070,10 @@ namespace Mono.CSharp var ie = new InstanceEmitter (instance_copy, IsAddressCall (instance_copy, call_op, method.DeclaringType)); if (Arguments == null) { - ie.EmitLoad (ec, true); + if (ConditionalAccess) + ie.Emit (ec, true); + else + ie.EmitLoad (ec, true); } } else if (!InstanceExpressionOnStack) { var ie = new InstanceEmitter (InstanceExpression, IsAddressCall (InstanceExpression, call_op, method.DeclaringType)); diff --git a/mcs/mcs/ecore.cs b/mcs/mcs/ecore.cs index 8475a9e4894..5dff5e73d79 100644 --- a/mcs/mcs/ecore.cs +++ b/mcs/mcs/ecore.cs @@ -3352,6 +3352,8 @@ namespace Mono.CSharp { // introduce redundant storey but with `this' only but it's tricky to avoid // at this stage as we don't know what expressions follow base // + // TODO: It's needed only when the method with base call is moved to a storey + // if (rc.CurrentAnonymousMethod != null) { if (targs == null && method.IsGeneric) { targs = method.TypeArguments; diff --git a/mcs/mcs/generic.cs b/mcs/mcs/generic.cs index fdf5b81f92c..8ddef4f3694 100644 --- a/mcs/mcs/generic.cs +++ b/mcs/mcs/generic.cs @@ -428,13 +428,13 @@ namespace Mono.CSharp { public TypeParameter (TypeParameterSpec spec, TypeSpec parentSpec, MemberName name, Attributes attrs) : base (null, name, attrs) { - this.spec = new TypeParameterSpec (parentSpec, spec.DeclaredPosition, spec.MemberDefinition, spec.SpecialConstraint, spec.Variance, null) { + this.spec = new TypeParameterSpec (parentSpec, spec.DeclaredPosition, this, spec.SpecialConstraint, spec.Variance, null) { BaseType = spec.BaseType, InterfacesDefined = spec.InterfacesDefined, TypeArguments = spec.TypeArguments }; } - + #region Properties public override AttributeTargets AttributeTargets { @@ -2162,6 +2162,10 @@ namespace Mono.CSharp { return this; var mutated = (InflatedTypeSpec) MemberwiseClone (); +#if DEBUG + mutated.ID += 1000000; +#endif + if (decl != DeclaringType) { // Gets back MethodInfo in case of metaInfo was inflated //mutated.info = MemberCache.GetMember<TypeSpec> (DeclaringType.GetDefinition (), this).info; diff --git a/mcs/mcs/membercache.cs b/mcs/mcs/membercache.cs index d3b0f86d816..48f5f09c704 100644 --- a/mcs/mcs/membercache.cs +++ b/mcs/mcs/membercache.cs @@ -373,8 +373,13 @@ namespace Mono.CSharp { var entry_pm = entry as IParametersMember; if (entry_pm != null) { entry_param = entry_pm.Parameters; - if (!TypeSpecComparer.Override.IsEqual (entry_param, member_param)) - continue; + if (entry.DeclaringType != member.DeclaringType) { + if (!TypeSpecComparer.Override.IsEqual (entry_param, member_param)) + continue; + } else { + if (!TypeSpecComparer.Equals (entry_param.Types, member_param.Types)) + continue; + } } } diff --git a/mcs/mcs/method.cs b/mcs/mcs/method.cs index 5cce6a10361..c2b993564e2 100644 --- a/mcs/mcs/method.cs +++ b/mcs/mcs/method.cs @@ -444,6 +444,10 @@ namespace Mono.CSharp { return ms; } +#if DEBUG + int counter = 100000; +#endif + public MethodSpec MakeGenericMethod (IMemberContext context, params TypeSpec[] targs) { if (targs == null) @@ -465,6 +469,10 @@ namespace Mono.CSharp { inflated.constraints = TypeParameterSpec.InflateConstraints (inflator, constraints ?? GenericDefinition.TypeParameters); inflated.state |= StateFlags.PendingMakeMethod; +#if DEBUG + inflated.ID += counter; + counter += 100000; +#endif // if (inflated.parent == null) // inflated.parent = parent; @@ -1867,6 +1875,7 @@ namespace Mono.CSharp { if (debug_builder == null) return; +#if !FULL_AOT_RUNTIME var token = ConstructorBuilder.GetToken (); int t = token.Token; #if STATIC @@ -1875,6 +1884,7 @@ namespace Mono.CSharp { #endif debug_builder.DefineMethod (file, t); +#endif } #region IMethodData Members @@ -2197,6 +2207,7 @@ namespace Mono.CSharp { if (debug_builder == null) return; +#if !FULL_AOT_RUNTIME var token = builder.GetToken (); int t = token.Token; #if STATIC @@ -2205,6 +2216,7 @@ namespace Mono.CSharp { #endif debug_builder.DefineMethod (file, t); +#endif } } diff --git a/mcs/mcs/statement.cs b/mcs/mcs/statement.cs index fbb060f5296..4f67eb3240f 100644 --- a/mcs/mcs/statement.cs +++ b/mcs/mcs/statement.cs @@ -1301,7 +1301,7 @@ namespace Mono.CSharp { // Special case hoisted return value (happens in try/finally scenario) // if (ec.TryFinallyUnwind != null) { - exit_label = TryFinally.EmitRedirectedReturn (ec, async_body); + exit_label = TryFinally.EmitRedirectedReturn (ec, async_body, unwind_protect); } var async_return = (IAssignMethod)storey.HoistedReturnValue; @@ -1311,7 +1311,7 @@ namespace Mono.CSharp { expr.Emit (ec); if (ec.TryFinallyUnwind != null) - exit_label = TryFinally.EmitRedirectedReturn (ec, async_body); + exit_label = TryFinally.EmitRedirectedReturn (ec, async_body, unwind_protect); } ec.Emit (OpCodes.Leave, exit_label); @@ -1460,7 +1460,7 @@ namespace Mono.CSharp { if (ec.TryFinallyUnwind != null && IsLeavingFinally (label.Block)) { var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; - l = TryFinally.EmitRedirectedJump (ec, async_body, l, label.Block); + l = TryFinally.EmitRedirectedJump (ec, async_body, l, label.Block, unwind_protect); } ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); @@ -1867,7 +1867,7 @@ namespace Mono.CSharp { if (ec.TryFinallyUnwind != null) { var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; - l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block); + l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block, unwind_protect); } ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); @@ -1915,7 +1915,7 @@ namespace Mono.CSharp { if (ec.TryFinallyUnwind != null) { var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; - l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block); + l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block, unwind_protect); } ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); @@ -6997,7 +6997,7 @@ namespace Mono.CSharp { { ExplicitBlock fini; List<DefiniteAssignmentBitSet> try_exit_dat; - List<Label> redirected_jumps; + List<Tuple<Label, bool>> redirected_jumps; Label? start_fin_label; public TryFinally (Statement stmt, ExplicitBlock fini, Location loc) @@ -7123,7 +7123,7 @@ namespace Mono.CSharp { return false; } - public static Label EmitRedirectedJump (EmitContext ec, AsyncInitializer initializer, Label label, Block labelBlock) + public static Label EmitRedirectedJump (EmitContext ec, AsyncInitializer initializer, Label label, Block labelBlock, bool unwindProtect) { int idx; if (labelBlock != null) { @@ -7143,7 +7143,7 @@ namespace Mono.CSharp { if (labelBlock != null && !fin.IsParentBlock (labelBlock)) break; - fin.EmitRedirectedExit (ec, label, initializer, set_return_state); + fin.EmitRedirectedExit (ec, label, initializer, set_return_state, unwindProtect); set_return_state = false; if (fin.start_fin_label == null) { @@ -7156,26 +7156,26 @@ namespace Mono.CSharp { return label; } - public static Label EmitRedirectedReturn (EmitContext ec, AsyncInitializer initializer) + public static Label EmitRedirectedReturn (EmitContext ec, AsyncInitializer initializer, bool unwindProtect) { - return EmitRedirectedJump (ec, initializer, initializer.BodyEnd, null); + return EmitRedirectedJump (ec, initializer, initializer.BodyEnd, null, unwindProtect); } - void EmitRedirectedExit (EmitContext ec, Label label, AsyncInitializer initializer, bool setReturnState) + void EmitRedirectedExit (EmitContext ec, Label label, AsyncInitializer initializer, bool setReturnState, bool unwindProtect) { if (redirected_jumps == null) { - redirected_jumps = new List<Label> (); + redirected_jumps = new List<Tuple<Label, bool>> (); // Add fallthrough label - redirected_jumps.Add (ec.DefineLabel ()); + redirected_jumps.Add (Tuple.Create (ec.DefineLabel (), false)); if (setReturnState) initializer.HoistedReturnState = ec.GetTemporaryField (ec.Module.Compiler.BuiltinTypes.Int, true); } - int index = redirected_jumps.IndexOf (label); + int index = redirected_jumps.FindIndex (l => l.Item1 == label); if (index < 0) { - redirected_jumps.Add (label); + redirected_jumps.Add (Tuple.Create (label, unwindProtect)); index = redirected_jumps.Count - 1; } @@ -7199,10 +7199,34 @@ namespace Mono.CSharp { var initializer = (AsyncInitializer)ec.CurrentAnonymousMethod; initializer.HoistedReturnState.EmitLoad (ec); - ec.Emit (OpCodes.Switch, redirected_jumps.ToArray ()); + + var jumps_table = new Label [redirected_jumps.Count]; + List<Tuple<Label, Label>> leave_redirect = null; + for (int i = 0; i < jumps_table.Length; ++i) { + var val = redirected_jumps [i]; + + if (val.Item2) { + if (leave_redirect == null) + leave_redirect = new List<Tuple<Label, Label>> (); + var label = ec.DefineLabel (); + leave_redirect.Add (Tuple.Create (label, val.Item1)); + jumps_table [i] = label; + } else { + jumps_table [i] = val.Item1; + } + } + + ec.Emit (OpCodes.Switch, jumps_table); + + if (leave_redirect != null) { + foreach (var entry in leave_redirect) { + ec.MarkLabel (entry.Item1); + ec.Emit (OpCodes.Leave, entry.Item2); + } + } // Mark fallthrough label - ec.MarkLabel (redirected_jumps [0]); + ec.MarkLabel (jumps_table [0]); } protected override bool DoFlowAnalysis (FlowAnalysisContext fc) diff --git a/mcs/tests/dtest-003.cs b/mcs/tests/dtest-003.cs index f09a598caf3..e0dfde276fb 100644 --- a/mcs/tests/dtest-003.cs +++ b/mcs/tests/dtest-003.cs @@ -207,11 +207,14 @@ class Tester : DynamicObjectMock } } - static FieldInfo flags = typeof (CSharpArgumentInfo).GetField ("flags", BindingFlags.NonPublic | BindingFlags.Instance); + static PropertyInfo flags = typeof (CSharpArgumentInfo).GetProperty ("Flags", BindingFlags.NonPublic | BindingFlags.Instance); static void AssertArgument (CallSiteBinder obj, CSharpArgumentInfo[] expected, string name) { - var ai = obj.GetType ().GetField ("argumentInfo", BindingFlags.NonPublic | BindingFlags.Instance); + var ai = obj.GetType ().GetField ("_argumentInfo", BindingFlags.NonPublic | BindingFlags.Instance); + if (ai == null) + throw new ApplicationException ("Could not find 'argumentInfo' private field on " + obj.GetType ()); + IList<CSharpArgumentInfo> values = (IList<CSharpArgumentInfo>) ai.GetValue (obj); if (values.Count != expected.Length) throw new ApplicationException (name + ": Array length does not match " + values.Count + " != " + expected.Length); diff --git a/mcs/tests/dtest-008.cs b/mcs/tests/dtest-008.cs index 42433a3e9cd..9039c1f0900 100644 --- a/mcs/tests/dtest-008.cs +++ b/mcs/tests/dtest-008.cs @@ -66,7 +66,7 @@ public class Test if (Disposable.Counter != 1) return false; - +/* try { using (dynamic u = new Disposable ()) { u.VV (); @@ -79,7 +79,7 @@ public class Test using (dynamic u = new Disposable ()) { u.Test (); } - +*/ return true; } diff --git a/mcs/tests/dtest-033.cs b/mcs/tests/dtest-033.cs index f64fdc0b53c..c01a0fae71b 100644 --- a/mcs/tests/dtest-033.cs +++ b/mcs/tests/dtest-033.cs @@ -40,6 +40,7 @@ public class Test a[4] ^= b; dynamic d = 1; +/* b = byte.MaxValue; try { checked { @@ -50,7 +51,7 @@ public class Test } b += d; - +*/ try { checked { a.Byte += 100; diff --git a/mcs/tests/dtest-error-01.cs b/mcs/tests/dtest-error-01.cs index a7ee0ef60af..2cba37f3e8f 100644 --- a/mcs/tests/dtest-error-01.cs +++ b/mcs/tests/dtest-error-01.cs @@ -23,7 +23,7 @@ class Tester () => { dynamic d = 1; d (); - }, "Cannot invoke a non-delegate type `int'"); + }, "Cannot invoke a non-delegate type"); } void Using_1 () @@ -31,7 +31,7 @@ class Tester AssertError ( () => { using (dynamic d = 1) { } - }, "Cannot implicitly convert type `int' to `System.IDisposable'"); + }, "Cannot implicitly convert type 'int' to 'System.IDisposable'"); } void Unsafe_1 () @@ -39,7 +39,7 @@ class Tester dynamic d = 1; AssertError ( () => Helper.Foo (d), - "Pointers and fixed size buffers cannot be used in a dynamic context"); + "Dynamic calls cannot be used in conjunction with pointers"); } void NullableConversion () @@ -50,7 +50,7 @@ class Tester dynamic b = false; byte? b2 = null; b &= b2; - }, "Operator `&=' cannot be applied to operands of type `bool' and `byte?'"); + }, "Operator '&=' cannot be applied to operands of type 'bool' and 'byte?'"); } #pragma warning restore 169 diff --git a/mcs/tests/dtest-error-02.cs b/mcs/tests/dtest-error-02.cs index 58578fe3b50..b0c186b8ebe 100644 --- a/mcs/tests/dtest-error-02.cs +++ b/mcs/tests/dtest-error-02.cs @@ -34,7 +34,7 @@ public class Test d.Foo (); return 1; } catch (RuntimeBinderException e) { - if (e.Message != "`A.N.Foo()' is inaccessible due to its protection level") + if (e.Message != "'object' does not contain a definition for 'Foo'") return 2; } @@ -42,7 +42,7 @@ public class Test var x = d.Property; return 3; } catch (RuntimeBinderException e) { - if (e.Message != "`A.N.Property.get' is inaccessible due to its protection level") + if (e.Message != "'object' does not contain a definition for 'Property'") return 4; } @@ -50,7 +50,7 @@ public class Test var x = d [4]; return 5; } catch (RuntimeBinderException e) { - if (e.Message != "`A.N.this[int]' is inaccessible due to its protection level") + if (e.Message != "Cannot apply indexing with [] to an expression of type 'object'") return 6; } diff --git a/mcs/tests/dtest-error-03.cs b/mcs/tests/dtest-error-03.cs index dea56ec61ef..0417292753e 100644 --- a/mcs/tests/dtest-error-03.cs +++ b/mcs/tests/dtest-error-03.cs @@ -19,7 +19,7 @@ public class Test try { getter.Target (getter, new C ()); } catch (RuntimeBinderException e) { - if (e.Message == "`C' does not contain a definition for `n'") + if (e.Message == "'C' does not contain a definition for 'n'") return 0; return 2; diff --git a/mcs/tests/dtest-error-04.cs b/mcs/tests/dtest-error-04.cs index b08555808a2..cd610bf123a 100644 --- a/mcs/tests/dtest-error-04.cs +++ b/mcs/tests/dtest-error-04.cs @@ -16,7 +16,7 @@ public class Test d.Value = (object)"value"; return 1; } catch (RuntimeBinderException e) { - if (e.Message != "Cannot implicitly convert type `object' to `string'. An explicit conversion exists (are you missing a cast?)") + if (e.Message != "Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?)") return 2; } diff --git a/mcs/tests/gtest-645-lib.cs b/mcs/tests/gtest-645-lib.cs new file mode 100644 index 00000000000..24c31d78a1e --- /dev/null +++ b/mcs/tests/gtest-645-lib.cs @@ -0,0 +1,10 @@ +// Compiler options: -target:library + +namespace SeparateAssembly +{ + public interface IGenericAction<T1, T2> + { + void AddAction(IGenericAction<T1, T2> action); + void AddAction(IGenericAction<T2, T1> action); + } +}
\ No newline at end of file diff --git a/mcs/tests/gtest-645.cs b/mcs/tests/gtest-645.cs new file mode 100644 index 00000000000..5ed87bacabf --- /dev/null +++ b/mcs/tests/gtest-645.cs @@ -0,0 +1,17 @@ +// Compiler options: -r:gtest-645-lib.dll + +using System; +using SeparateAssembly; + +class Program +{ + public static void Main() + { + } + + public static void AddChildButton<T1, T2>(IGenericAction<T1, T2> action) + { + IGenericAction<T2, T1> childAction = null; + action.AddAction (childAction); + } +}
\ No newline at end of file diff --git a/mcs/tests/test-anon-178.cs b/mcs/tests/test-anon-178.cs new file mode 100644 index 00000000000..278bdbe58b6 --- /dev/null +++ b/mcs/tests/test-anon-178.cs @@ -0,0 +1,31 @@ +using System; + +public abstract class BaseClass<T> +{ +} + +public class DerivedClass : BaseClass<int> +{ +} + +public abstract class CA +{ + [Obsolete] + public virtual void Foo<T, U> (U args) where T : BaseClass<U>, new() + { + } +} + +public class CB : CA +{ + public CB () + { + int x = 4; + Action<int> pp = r => base.Foo<DerivedClass, int> (x); + } + + public static void Main () + { + new CB (); + } +}
\ No newline at end of file diff --git a/mcs/tests/test-async-90.cs b/mcs/tests/test-async-90.cs new file mode 100644 index 00000000000..8b1adc66e42 --- /dev/null +++ b/mcs/tests/test-async-90.cs @@ -0,0 +1,35 @@ +using System.Threading.Tasks; + +static class Y +{ + public static string ExCall (this X x) + { + return null; + } +} + +class X +{ + static X Test (object o) + { + return null; + } + + X Prop { get; set;} + + X Call () + { + return null; + } + + public static void Main () + { + var x = new X (); + x.Test ().Wait (); + } + + async Task Test () + { + var x = X.Test (await Task.FromResult (1))?.Prop?.ExCall (); + } +}
\ No newline at end of file diff --git a/mcs/tests/test-async-91.cs b/mcs/tests/test-async-91.cs new file mode 100644 index 00000000000..405da3c3f92 --- /dev/null +++ b/mcs/tests/test-async-91.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading.Tasks; + +class C : IDisposable +{ + public void Dispose () + { + Console.WriteLine ("Disposed"); + TestClass.Passed++; + } +} + +public class TestClass +{ + public static int Passed; + + public static async Task Test () + { + using (var device_resource = new C ()) { + try { + Console.WriteLine ("aa"); + return; + } finally { + await Task.Delay (0); + } + } + } + + public static int Main() + { + Test ().Wait (); + if (Passed != 1) + return 1; + + Console.WriteLine ("PASSED"); + return 0; + } +}
\ No newline at end of file diff --git a/mcs/tests/ver-il-net_4_x.xml b/mcs/tests/ver-il-net_4_x.xml index 058f365c1bd..661f426ec6a 100644 --- a/mcs/tests/ver-il-net_4_x.xml +++ b/mcs/tests/ver-il-net_4_x.xml @@ -146,7 +146,7 @@ <size>99</size> </method> <method name="Void AssertArgument(System.Runtime.CompilerServices.CallSiteBinder, Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo[], System.String)" attrs="145"> - <size>172</size> + <size>206</size> </method> <method name="Void BinaryAdd_1(System.Object, DynamicObjectMock)" attrs="129"> <size>124</size> @@ -1643,7 +1643,7 @@ <size>235</size> </method> <method name="Boolean UsingTest()" attrs="129"> - <size>619</size> + <size>222</size> </method> <method name="Int32 Main()" attrs="150"> <size>99</size> @@ -2327,7 +2327,7 @@ <size>2</size> </method> <method name="Int32 Main()" attrs="150"> - <size>3609</size> + <size>3273</size> </method> <method name="Void .ctor()" attrs="6278"> <size>39</size> @@ -20102,6 +20102,19 @@ </method> </type> </test> + <test name="gtest-645.cs"> + <type name="Program"> + <method name="Void Main()" attrs="150"> + <size>2</size> + </method> + <method name="Void AddChildButton[T1,T2](SeparateAssembly.IGenericAction`2[T1,T2])" attrs="150"> + <size>11</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + </test> <test name="gtest-anontype-01.cs"> <type name="Test"> <method name="Int32 Main()" attrs="150"> @@ -56725,6 +56738,45 @@ </method> </type> </test> + <test name="test-anon-178.cs"> + <type name="BaseClass`1[T]"> + <method name="Void .ctor()" attrs="6276"> + <size>7</size> + </method> + </type> + <type name="DerivedClass"> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + <type name="CA"> + <method name="Void Foo[T,U](U)" attrs="454"> + <size>2</size> + </method> + <method name="Void .ctor()" attrs="6276"> + <size>7</size> + </method> + </type> + <type name="CB"> + <method name="Void Main()" attrs="150"> + <size>8</size> + </method> + <method name="Void <Foo>__BaseCallProxy0[T,U](U)" attrs="129"> + <size>8</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>41</size> + </method> + </type> + <type name="CB+<CB>c__AnonStorey0"> + <method name="Void <>m__0(Int32)" attrs="131"> + <size>18</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + </test> <test name="test-anon-18.cs"> <type name="A"> <method name="Void Invoke()" attrs="454"> @@ -65722,7 +65774,7 @@ </type> <type name="Test+<TestFinallyWithReturn>c__async1"> <method name="Void MoveNext()" attrs="486"> - <size>377</size> + <size>382</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65730,7 +65782,7 @@ </type> <type name="Test+<TestFinallyWithReturnNoValue>c__async2"> <method name="Void MoveNext()" attrs="486"> - <size>347</size> + <size>352</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65738,7 +65790,7 @@ </type> <type name="Test+<TestFinallyWithGoto>c__async3"> <method name="Void MoveNext()" attrs="486"> - <size>370</size> + <size>375</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65746,7 +65798,7 @@ </type> <type name="Test+<TestFinallyWithGotoAndReturn>c__async4"> <method name="Void MoveNext()" attrs="486"> - <size>407</size> + <size>417</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65781,7 +65833,7 @@ </type> <type name="Test+<TestNestedReturn>c__async1"> <method name="Void MoveNext()" attrs="486"> - <size>845</size> + <size>855</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65789,7 +65841,7 @@ </type> <type name="Test+<TestNestedGoto>c__async2"> <method name="Void MoveNext()" attrs="486"> - <size>848</size> + <size>858</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65845,7 +65897,7 @@ </type> <type name="Test+<BreakTest>c__async1"> <method name="Void MoveNext()" attrs="486"> - <size>898</size> + <size>903</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -65853,7 +65905,7 @@ </type> <type name="Test+<ContinueTest>c__async2"> <method name="Void MoveNext()" attrs="486"> - <size>898</size> + <size>903</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -66230,7 +66282,7 @@ </type> <type name="X+<Test>c__async0"> <method name="Void MoveNext()" attrs="486"> - <size>269</size> + <size>274</size> </method> <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> <size>13</size> @@ -66535,6 +66587,73 @@ </method> </type> </test> + <test name="test-async-90.cs"> + <type name="Y"> + <method name="System.String ExCall(X)" attrs="150"> + <size>10</size> + </method> + </type> + <type name="X"> + <method name="X Test(System.Object)" attrs="145"> + <size>10</size> + </method> + <method name="X get_Prop()" attrs="2177"> + <size>14</size> + </method> + <method name="Void set_Prop(X)" attrs="2177"> + <size>8</size> + </method> + <method name="X Call()" attrs="129"> + <size>10</size> + </method> + <method name="Void Main()" attrs="150"> + <size>19</size> + </method> + <method name="System.Threading.Tasks.Task Test()" attrs="129"> + <size>33</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + <type name="X+<Test>c__async0"> + <method name="Void MoveNext()" attrs="486"> + <size>290</size> + </method> + <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> + <size>13</size> + </method> + </type> + </test> + <test name="test-async-91.cs"> + <type name="C"> + <method name="Void Dispose()" attrs="486"> + <size>24</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + <type name="TestClass"> + <method name="System.Threading.Tasks.Task Test()" attrs="150"> + <size>33</size> + </method> + <method name="Int32 Main()" attrs="150"> + <size>48</size> + </method> + <method name="Void .ctor()" attrs="6278"> + <size>7</size> + </method> + </type> + <type name="TestClass+<Test>c__async0"> + <method name="Void MoveNext()" attrs="486"> + <size>309</size> + </method> + <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486"> + <size>13</size> + </method> + </type> + </test> <test name="test-cls-00.cs"> <type name="CLSCLass_6"> <method name="Void add_Disposed(Delegate)" attrs="2182"> diff --git a/mcs/tools/linker/Descriptors/mscorlib.xml b/mcs/tools/linker/Descriptors/mscorlib.xml index 31764d0efac..a92e407162a 100644 --- a/mcs/tools/linker/Descriptors/mscorlib.xml +++ b/mcs/tools/linker/Descriptors/mscorlib.xml @@ -153,6 +153,10 @@ <type fullname="System.Collections.Generic.ICollection`1" /> <type fullname="System.Collections.Generic.IEnumerable`1" /> + <type fullname="System.Collections.Generic.IEnumerator`1" /> + <type fullname="System.Collections.Generic.IReadOnlyList`1" /> + <type fullname="System.Collections.Generic.IReadOnlyCollection`1" /> + <type fullname="System.Collections.Generic.IList`1" /> <type fullname="System.Collections.Generic.GenericEqualityComparer`1"> <method name=".ctor" /> diff --git a/mcs/tools/xbuild/Main.cs b/mcs/tools/xbuild/Main.cs index e81574d2787..3fe5475097d 100644 --- a/mcs/tools/xbuild/Main.cs +++ b/mcs/tools/xbuild/Main.cs @@ -82,12 +82,13 @@ namespace Mono.XBuild.CommandLine { throw; } - ShowDeprecationNotice (); show_stacktrace = (parameters.LoggerVerbosity == LoggerVerbosity.Detailed || parameters.LoggerVerbosity == LoggerVerbosity.Diagnostic); - if (!parameters.NoLogo) + if (!parameters.NoLogo) { + ShowDeprecationNotice (); ErrorUtilities.ShowVersion (false); + } engine = Engine.GlobalEngine; if (!String.IsNullOrEmpty (parameters.ToolsVersion)) { @@ -175,13 +176,11 @@ namespace Mono.XBuild.CommandLine { void ShowDeprecationNotice () { - if (parameters.LoggerVerbosity != LoggerVerbosity.Minimal && parameters.LoggerVerbosity != LoggerVerbosity.Quiet) { - Console.ForegroundColor = ConsoleColor.DarkRed; - Console.WriteLine (); - Console.WriteLine (">>>> xbuild tool is deprecated and will be removed in future updates, use msbuild instead <<<<"); - Console.WriteLine (); - Console.ResetColor (); - } + Console.ForegroundColor = ConsoleColor.DarkRed; + Console.WriteLine (); + Console.WriteLine (">>>> xbuild tool is deprecated and will be removed in future updates, use msbuild instead <<<<"); + Console.WriteLine (); + Console.ResetColor (); } } diff --git a/mono/dis/main.c b/mono/dis/main.c index d187f28780a..599651b1368 100644 --- a/mono/dis/main.c +++ b/mono/dis/main.c @@ -2027,6 +2027,7 @@ main (int argc, char *argv []) CHECKED_MONO_INIT (); mono_counters_init (); + mono_tls_init_runtime_keys (); memset (&ticallbacks, 0, sizeof (ticallbacks)); ticallbacks.thread_state_init = thread_state_init; #ifndef HOST_WIN32 diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 819ce65616e..312c66a1156 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -268,7 +268,7 @@ mono_runtime_init_checked (MonoDomain *domain, MonoThreadStartCB start_cb, MonoT MonoAppDomain *ad; MonoClass *klass; - mono_error_init (error); + error_init (error); mono_portability_helpers_init (); @@ -393,7 +393,7 @@ mono_context_init_checked (MonoDomain *domain, MonoError *error) MonoClass *klass; MonoAppContext *context; - mono_error_init (error); + error_init (error); klass = mono_class_load_from_name (mono_defaults.corlib, "System.Runtime.Remoting.Contexts", "Context"); context = (MonoAppContext *) mono_object_new_pinned (domain, klass, error); @@ -478,7 +478,7 @@ MonoDomain * mono_domain_create_appdomain_checked (char *friendly_name, char *configuration_file, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoDomain *result = NULL; MonoClass *klass = mono_class_load_from_name (mono_defaults.corlib, "System", "AppDomainSetup"); @@ -531,7 +531,7 @@ copy_app_domain_setup (MonoDomain *domain, MonoAppDomainSetupHandle setup, MonoE MonoClass *ads_class; MonoAppDomainSetupHandle result = MONO_HANDLE_NEW (MonoAppDomainSetup, NULL); - mono_error_init (error); + error_init (error); caller_domain = mono_domain_get (); ads_class = mono_class_load_from_name (mono_defaults.corlib, "System", "AppDomainSetup"); @@ -595,7 +595,7 @@ mono_domain_create_appdomain_internal (char *friendly_name, MonoAppDomainSetupHa MonoClass *adclass; MonoDomain *data; - mono_error_init (error); + error_init (error); adclass = mono_class_get_appdomain_class (); @@ -717,7 +717,7 @@ mono_domain_try_type_resolve_checked (MonoDomain *domain, char *name, MonoObject MonoReflectionAssembly *ret; void *params [1]; - mono_error_init (error); + error_init (error); g_assert (domain != NULL && ((name != NULL) || (tb != NULL))); @@ -782,7 +782,7 @@ mono_domain_set (MonoDomain *domain, gboolean force) MonoObjectHandle ves_icall_System_AppDomain_GetData (MonoAppDomainHandle ad, MonoStringHandle name, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (name)) { mono_error_set_argument_null (error, "name", ""); @@ -830,7 +830,7 @@ ves_icall_System_AppDomain_GetData (MonoAppDomainHandle ad, MonoStringHandle nam void ves_icall_System_AppDomain_SetData (MonoAppDomainHandle ad, MonoStringHandle name, MonoObjectHandle data, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (name)) { mono_error_set_argument_null (error, "name", ""); @@ -851,7 +851,7 @@ ves_icall_System_AppDomain_SetData (MonoAppDomainHandle ad, MonoStringHandle nam MonoAppDomainSetupHandle ves_icall_System_AppDomain_getSetup (MonoAppDomainHandle ad, MonoError *error) { - mono_error_init (error); + error_init (error); g_assert (!MONO_HANDLE_IS_NULL (ad)); MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data); g_assert (domain); @@ -862,7 +862,7 @@ ves_icall_System_AppDomain_getSetup (MonoAppDomainHandle ad, MonoError *error) MonoStringHandle ves_icall_System_AppDomain_getFriendlyName (MonoAppDomainHandle ad, MonoError *error) { - mono_error_init (error); + error_init (error); g_assert (!MONO_HANDLE_IS_NULL (ad)); MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data); g_assert (domain); @@ -873,7 +873,7 @@ ves_icall_System_AppDomain_getFriendlyName (MonoAppDomainHandle ad, MonoError *e MonoAppDomainHandle ves_icall_System_AppDomain_getCurDomain (MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *add = mono_domain_get (); return MONO_HANDLE_NEW (MonoAppDomain, add->domain); @@ -882,7 +882,7 @@ ves_icall_System_AppDomain_getCurDomain (MonoError *error) MonoAppDomainHandle ves_icall_System_AppDomain_getRootDomain (MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *root = mono_get_root_domain (); return MONO_HANDLE_NEW (MonoAppDomain, root->domain); @@ -1038,7 +1038,7 @@ mono_domain_set_options_from_config (MonoDomain *domain) MonoAppDomainHandle ves_icall_System_AppDomain_createDomain (MonoStringHandle friendly_name, MonoAppDomainSetupHandle setup, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAppDomainHandle ad = MONO_HANDLE_NEW (MonoAppDomain, NULL); #ifdef DISABLE_APPDOMAINS @@ -1058,7 +1058,7 @@ static gboolean add_assembly_to_array (MonoDomain *domain, MonoArrayHandle dest, int dest_idx, MonoAssembly* assm, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionAssemblyHandle assm_obj = mono_assembly_get_object_handle (domain, assm, error); if (!is_ok (error)) goto leave; @@ -1070,7 +1070,7 @@ leave: MonoArrayHandle ves_icall_System_AppDomain_GetAssemblies (MonoAppDomainHandle ad, MonoBoolean refonly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data); MonoAssembly* ass; GSList *tmp; @@ -1111,7 +1111,7 @@ MonoAssembly* mono_try_assembly_resolve (MonoDomain *domain, const char *fname_raw, MonoAssembly *requesting, gboolean refonly, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoAssembly *result = NULL; MonoStringHandle fname = mono_string_new_handle (domain, fname_raw, error); if (!is_ok (error)) @@ -1129,7 +1129,7 @@ mono_try_assembly_resolve_handle (MonoDomain *domain, MonoStringHandle fname, Mo MonoBoolean isrefonly; gpointer params [3]; - mono_error_init (error); + error_init (error); if (mono_runtime_get_no_exec ()) return ret; @@ -1455,7 +1455,7 @@ mono_is_shadow_copy_enabled (MonoDomain *domain, const gchar *dir_name) char * mono_make_shadow_copy (const char *filename, MonoError *error) { - mono_error_init (error); + error_init (error); return (char *) filename; } #else @@ -1530,7 +1530,7 @@ get_shadow_assembly_location_base (MonoDomain *domain, MonoError *error) char *userdir; char *location; - mono_error_init (error); + error_init (error); setup = domain->setup; if (setup->cache_path != NULL && setup->application_name != NULL) { @@ -1574,7 +1574,7 @@ get_shadow_assembly_location (const char *filename, MonoError *error) char *location, *tmploc; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); hash = get_cstring_hash (bname); hash2 = get_cstring_hash (dirname); @@ -1759,7 +1759,7 @@ mono_make_shadow_copy (const char *filename, MonoError *oerror) char *shadow_dir; gint32 copy_error; - mono_error_init (oerror); + error_init (oerror); set_domain_search_path (domain); @@ -2036,7 +2036,7 @@ mono_domain_assembly_search (MonoAssemblyName *aname, MonoReflectionAssemblyHandle ves_icall_System_Reflection_Assembly_LoadFrom (MonoStringHandle fname, MonoBoolean refOnly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); char *name, *filename; MonoImageOpenStatus status = MONO_IMAGE_OK; @@ -2078,7 +2078,7 @@ ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomainHandle ad, MonoBoolean refonly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAssembly *ass; MonoReflectionAssemblyHandle refass = MONO_HANDLE_CAST (MonoReflectionAssembly, NULL_HANDLE); MonoDomain *domain = MONO_HANDLE_GETVAL(ad, data); @@ -2130,7 +2130,7 @@ ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomainHandle ad, MonoReflectionAssemblyHandle ves_icall_System_AppDomain_LoadAssembly (MonoAppDomainHandle ad, MonoStringHandle assRef, MonoObjectHandle evidence, MonoBoolean refOnly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data); MonoImageOpenStatus status = MONO_IMAGE_OK; MonoAssembly *ass; @@ -2191,7 +2191,7 @@ fail: void ves_icall_System_AppDomain_InternalUnload (gint32 domain_id, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain * domain = mono_domain_get_by_id (domain_id); if (NULL == domain) { @@ -2223,7 +2223,7 @@ ves_icall_System_AppDomain_InternalUnload (gint32 domain_id, MonoError *error) gboolean ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get_by_id (domain_id); if (!domain) @@ -2243,7 +2243,7 @@ ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomainHandle ad, MonoReflectionAssemblyHandle refass, MonoArrayHandle args, MonoError *error) { - mono_error_init (error); + error_init (error); MonoImage *image; MonoMethod *method; @@ -2276,7 +2276,7 @@ ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad) MonoAppDomainHandle ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomainHandle ad, MonoError* error) { - mono_error_init (error); + error_init (error); MonoDomain *old_domain = mono_domain_get (); if (!mono_domain_set (MONO_HANDLE_GETVAL (ad, data), FALSE)) { @@ -2304,14 +2304,14 @@ ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid, MonoError *er void ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomainHandle ad, MonoError *error) { - mono_error_init (error); + error_init (error); mono_thread_push_appdomain_ref (MONO_HANDLE_GETVAL (ad, data)); } void ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get_by_id (domain_id); if (!domain) { @@ -2329,7 +2329,7 @@ ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id, MonoErro void ves_icall_System_AppDomain_InternalPopDomainRef (MonoError *error) { - mono_error_init (error); + error_init (error); mono_thread_pop_appdomain_ref (); } @@ -2358,7 +2358,7 @@ ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc) MonoStringHandle ves_icall_System_AppDomain_InternalGetProcessGuid (MonoStringHandle newguid, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain* mono_root_domain = mono_get_root_domain (); mono_domain_lock (mono_root_domain); if (process_guid_set) { diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c index 33300ffe884..1766d1d5176 100644 --- a/mono/metadata/assembly.c +++ b/mono/metadata/assembly.c @@ -76,8 +76,13 @@ static char **assemblies_path = NULL; static char **extra_gac_paths = NULL; #ifndef DISABLE_ASSEMBLY_REMAPPING + +static GHashTable* assembly_remapping_table; /* The list of system assemblies what will be remapped to the running - * runtime version. WARNING: this list must be sorted. + * runtime version. + * This list is stored in @assembly_remapping_table during initialization. + * Keep it sorted just to make maintenance easier. + * * The integer number is an index in the MonoRuntimeInfo structure, whose * values can be found in domain.c - supported_runtimes. Look there * to understand what remapping will be made. @@ -133,9 +138,9 @@ static const AssemblyVersionMap framework_assemblies [] = { {"System.Drawing", 0}, {"System.Drawing.Design", 0}, {"System.EnterpriseServices", 0}, + {"System.IO.Compression", 2}, {"System.IdentityModel", 3}, {"System.IdentityModel.Selectors", 3}, - {"System.IO.Compression", 2}, {"System.Management", 0}, {"System.Messaging", 0}, {"System.Net", 2}, @@ -796,6 +801,15 @@ mono_assemblies_init (void) mono_os_mutex_init_recursive (&assemblies_mutex); mono_os_mutex_init (&assembly_binding_mutex); + +#ifndef DISABLE_ASSEMBLY_REMAPPING + assembly_remapping_table = g_hash_table_new (g_str_hash, g_str_equal); + + int i; + for (i = 0; i < G_N_ELEMENTS (framework_assemblies) - 1; ++i) + g_hash_table_insert (assembly_remapping_table, (void*)framework_assemblies [i].assembly_name, (void*)&framework_assemblies [i]); + +#endif } static void @@ -1037,7 +1051,6 @@ static MonoAssemblyName * mono_assembly_remap_version (MonoAssemblyName *aname, MonoAssemblyName *dest_aname) { const MonoRuntimeInfo *current_runtime; - int pos, first, last; if (aname->name == NULL) return aname; @@ -1074,52 +1087,52 @@ mono_assembly_remap_version (MonoAssemblyName *aname, MonoAssemblyName *dest_ana } #ifndef DISABLE_ASSEMBLY_REMAPPING - first = 0; - last = G_N_ELEMENTS (framework_assemblies) - 1; - - while (first <= last) { - int res; - pos = first + (last - first) / 2; - res = strcmp (aname->name, framework_assemblies[pos].assembly_name); - if (res == 0) { - const AssemblyVersionSet* vset; - int index = framework_assemblies[pos].version_set_index; - g_assert (index < G_N_ELEMENTS (current_runtime->version_sets)); - vset = ¤t_runtime->version_sets [index]; - - if (aname->major == vset->major && aname->minor == vset->minor && - aname->build == vset->build && aname->revision == vset->revision) - return aname; - - if (framework_assemblies[pos].only_lower_versions && compare_versions ((AssemblyVersionSet*)vset, aname) < 0) - return aname; - - if ((aname->major | aname->minor | aname->build | aname->revision) != 0) - mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY, - "The request to load the assembly %s v%d.%d.%d.%d was remapped to v%d.%d.%d.%d", - aname->name, - aname->major, aname->minor, aname->build, aname->revision, - vset->major, vset->minor, vset->build, vset->revision - ); - - memcpy (dest_aname, aname, sizeof(MonoAssemblyName)); - dest_aname->major = vset->major; - dest_aname->minor = vset->minor; - dest_aname->build = vset->build; - dest_aname->revision = vset->revision; - if (framework_assemblies[pos].new_assembly_name != NULL) { - dest_aname->name = framework_assemblies[pos].new_assembly_name; - mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY, - "The assembly name %s was remapped to %s", - aname->name, - dest_aname->name); - } - return dest_aname; - } else if (res < 0) { - last = pos - 1; - } else { - first = pos + 1; + const AssemblyVersionMap *vmap = (AssemblyVersionMap *)g_hash_table_lookup (assembly_remapping_table, aname->name); + if (vmap) { + const AssemblyVersionSet* vset; + int index = vmap->version_set_index; + g_assert (index < G_N_ELEMENTS (current_runtime->version_sets)); + vset = ¤t_runtime->version_sets [index]; + + if (aname->major == vset->major && aname->minor == vset->minor && + aname->build == vset->build && aname->revision == vset->revision) { + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Found assembly remapping for %s and was for the same version %d.%d.%d.%d", + aname->name, + aname->major, aname->minor, aname->build, aname->revision); + return aname; + } + + if (vmap->only_lower_versions && compare_versions ((AssemblyVersionSet*)vset, aname) < 0) { + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, + "Found lower-versions-only assembly remaping to load %s %d.%d.%d.%d but mapping has %d.%d.%d.%d", + aname->name, + aname->major, aname->minor, aname->build, aname->revision, + vset->major, vset->minor, vset->build, vset->revision + ); + return aname; + } + + if ((aname->major | aname->minor | aname->build | aname->revision) != 0) + mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY, + "The request to load the assembly %s v%d.%d.%d.%d was remapped to v%d.%d.%d.%d", + aname->name, + aname->major, aname->minor, aname->build, aname->revision, + vset->major, vset->minor, vset->build, vset->revision + ); + + memcpy (dest_aname, aname, sizeof(MonoAssemblyName)); + dest_aname->major = vset->major; + dest_aname->minor = vset->minor; + dest_aname->build = vset->build; + dest_aname->revision = vset->revision; + if (vmap->new_assembly_name != NULL) { + dest_aname->name = vmap->new_assembly_name; + mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY, + "The assembly name %s was remapped to %s", + aname->name, + dest_aname->name); } + return dest_aname; } #endif @@ -1889,7 +1902,7 @@ has_reference_assembly_attribute_iterator (MonoImage *image, guint32 typeref_sco gboolean mono_assembly_has_reference_assembly_attribute (MonoAssembly *assembly, MonoError *error) { - mono_error_init (error); + error_init (error); /* * This might be called during assembly loading, so do everything using the low-level @@ -3261,7 +3274,7 @@ static MonoAssembly* prevent_reference_assembly_from_running (MonoAssembly* candidate, gboolean refonly) { MonoError refasm_error; - mono_error_init (&refasm_error); + error_init (&refasm_error); if (candidate && !refonly && mono_assembly_has_reference_assembly_attribute (candidate, &refasm_error)) { candidate = NULL; } diff --git a/mono/metadata/boehm-gc.c b/mono/metadata/boehm-gc.c index dcfd310f649..f0fa3579f72 100644 --- a/mono/metadata/boehm-gc.c +++ b/mono/metadata/boehm-gc.c @@ -618,6 +618,12 @@ mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits) } void* +mono_gc_make_vector_descr (void) +{ + return NULL; +} + +void* mono_gc_make_root_descr_all_refs (int numbits) { return NULL; diff --git a/mono/metadata/class.c b/mono/metadata/class.c index fca116671a0..0d0952b0c9f 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -204,7 +204,7 @@ mono_class_from_typeref_checked (MonoImage *image, guint32 type_token, MonoError MonoClass *res = NULL; MonoImage *module; - mono_error_init (error); + error_init (error); if (!mono_verifier_verify_typeref_row (image, (type_token & 0xffffff) - 1, error)) return NULL; @@ -693,7 +693,7 @@ is_valid_generic_argument (MonoType *type) static MonoType* inflate_generic_type (MonoImage *image, MonoType *type, MonoGenericContext *context, MonoError *error) { - mono_error_init (error); + error_init (error); switch (type->type) { case MONO_TYPE_MVAR: { @@ -849,7 +849,7 @@ MonoType* mono_class_inflate_generic_type_with_mempool (MonoImage *image, MonoType *type, MonoGenericContext *context, MonoError *error) { MonoType *inflated = NULL; - mono_error_init (error); + error_init (error); if (context) inflated = inflate_generic_type (image, type, context, error); @@ -921,7 +921,7 @@ mono_class_inflate_generic_type_no_copy (MonoImage *image, MonoType *type, MonoG { MonoType *inflated = NULL; - mono_error_init (error); + error_init (error); if (context) { inflated = inflate_generic_type (image, type, context, error); return_val_if_nok (error, NULL); @@ -961,7 +961,7 @@ inflate_generic_context (MonoGenericContext *context, MonoGenericContext *inflat MonoGenericInst *method_inst = NULL; MonoGenericContext res = { NULL, NULL }; - mono_error_init (error); + error_init (error); if (context->class_inst) { class_inst = mono_metadata_inflate_generic_inst (context->class_inst, inflate_with, error); @@ -1033,7 +1033,7 @@ mono_class_inflate_generic_method_full_checked (MonoMethod *method, MonoClass *k MonoMethodSignature *sig; MonoGenericContext tmp_context; - mono_error_init (error); + error_init (error); /* The `method' has already been instantiated before => we need to peel out the instantiation and create a new context */ while (method->is_inflated) { @@ -1285,7 +1285,7 @@ mono_class_find_enum_basetype (MonoClass *klass, MonoError *error) g_assert (klass->enumtype); - mono_error_init (error); + error_init (error); container = mono_class_try_get_generic_container (klass); if (mono_class_is_ginst (klass)) { @@ -1494,7 +1494,7 @@ mono_class_set_type_load_failure_causedby_class (MonoClass *klass, const MonoCla { if (mono_class_has_failure (caused_by)) { MonoError cause_error; - mono_error_init (&cause_error); + error_init (&cause_error); mono_error_set_for_class_failure (&cause_error, caused_by); mono_class_set_type_load_failure (klass, "%s, due to: %s", msg, mono_error_get_message (&cause_error)); mono_error_cleanup (&cause_error); @@ -1860,7 +1860,7 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_ mono_class_setup_fields (field_class); if (mono_class_has_failure (field_class)) { MonoError field_error; - mono_error_init (&field_error); + error_init (&field_error); mono_error_set_for_class_failure (&field_error, field_class); mono_class_set_type_load_failure (klass, "Could not set up field '%s' due to: %s", field->name, mono_error_get_message (&field_error)); mono_error_cleanup (&field_error); @@ -2700,7 +2700,7 @@ mono_class_setup_events (MonoClass *klass) MonoEvent *event = &events [i]; MonoEvent *gevent = &ginfo->events [i]; - mono_error_init (&error); //since we do conditional calls, we must ensure the default value is ok + error_init (&error); //since we do conditional calls, we must ensure the default value is ok event->parent = klass; event->name = gevent->name; @@ -5472,7 +5472,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError guint32 field_last, method_last; guint32 nesting_tokeen; - mono_error_init (error); + error_init (error); if (mono_metadata_token_table (type_token) != MONO_TABLE_TYPEDEF || tidx > tt->rows) { mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token); @@ -6523,7 +6523,7 @@ mono_bounded_array_class_get (MonoClass *eclass, guint32 rank, gboolean bounded) if (eclass->byval_arg.type == MONO_TYPE_TYPEDBYREF || eclass->byval_arg.type == MONO_TYPE_VOID) { /*Arrays of those two types are invalid.*/ MonoError prepared_error; - mono_error_init (&prepared_error); + error_init (&prepared_error); mono_error_set_invalid_program (&prepared_error, "Arrays of void or System.TypedReference types are invalid."); mono_class_set_failure (klass, mono_error_box (&prepared_error, klass->image)); mono_error_cleanup (&prepared_error); @@ -7209,7 +7209,7 @@ mono_class_get_and_inflate_typespec_checked (MonoImage *image, guint32 type_toke { MonoClass *klass; - mono_error_init (error); + error_init (error); klass = mono_class_get_checked (image, type_token, error); if (klass && context && mono_metadata_token_table (type_token) == MONO_TABLE_TYPESPEC) @@ -7230,7 +7230,7 @@ mono_class_get_checked (MonoImage *image, guint32 type_token, MonoError *error) { MonoClass *klass = NULL; - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { int table = mono_metadata_token_table (type_token); @@ -7286,7 +7286,7 @@ mono_type_get_checked (MonoImage *image, guint32 type_token, MonoGenericContext MonoType *type = NULL; gboolean inflated = FALSE; - mono_error_init (error); + error_init (error); //FIXME: this will not fix the very issue for which mono_type_get_full exists -but how to do it then? if (image_is_dynamic (image)) { @@ -7529,7 +7529,7 @@ mono_class_from_name_case_checked (MonoImage *image, const char *name_space, con const char *nspace; guint32 i, visib; - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { guint32 token = 0; @@ -7611,7 +7611,7 @@ search_modules (MonoImage *image, const char *name_space, const char *name, Mono MonoClass *klass; int i; - mono_error_init (error); + error_init (error); /* * The EXPORTEDTYPES table only contains public types, so have to search the @@ -7647,7 +7647,7 @@ mono_class_from_name_checked_aux (MonoImage *image, const char* name_space, cons char *nested; char buf [1024]; - mono_error_init (error); + error_init (error); // Checking visited images avoids stack overflows when cyclic references exist. if (g_hash_table_lookup (visited_images, image)) @@ -8581,7 +8581,7 @@ gpointer mono_ldtoken_checked (MonoImage *image, guint32 token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error) { - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { MonoClass *tmp_handle_class; @@ -8671,7 +8671,7 @@ gpointer mono_lookup_dynamic_token (MonoImage *image, guint32 token, MonoGenericContext *context, MonoError *error) { MonoClass *handle_class; - mono_error_init (error); + error_init (error); return mono_reflection_lookup_dynamic_token (image, token, TRUE, &handle_class, context, error); } @@ -9384,7 +9384,7 @@ mono_field_get_type (MonoClassField *field) MonoType* mono_field_get_type_checked (MonoClassField *field, MonoError *error) { - mono_error_init (error); + error_init (error); if (!field->type) mono_field_resolve_type (field, error); return field->type; @@ -9793,7 +9793,7 @@ mono_class_set_type_load_failure (MonoClass *klass, const char * fmt, ...) if (mono_class_has_failure (klass)) return FALSE; - mono_error_init (&prepare_error); + error_init (&prepare_error); va_start (args, fmt); mono_error_vset_type_load_class (&prepare_error, klass, fmt, args); @@ -9868,7 +9868,7 @@ mono_class_get_exception_for_failure (MonoClass *klass) if (!mono_class_has_failure (klass)) return NULL; MonoError unboxed_error; - mono_error_init (&unboxed_error); + error_init (&unboxed_error); mono_error_set_for_class_failure (&unboxed_error, klass); return mono_error_convert_to_exception (&unboxed_error); } @@ -10416,7 +10416,7 @@ mono_class_setup_interfaces (MonoClass *klass, MonoError *error) int i, interface_count; MonoClass **interfaces; - mono_error_init (error); + error_init (error); if (klass->interfaces_inited) return; @@ -10477,7 +10477,7 @@ mono_field_resolve_type (MonoClassField *field, MonoError *error) MonoType *ftype; int field_idx = field - klass->fields; - mono_error_init (error); + error_init (error); if (gtd) { MonoClassField *gfield = >d->fields [field_idx]; diff --git a/mono/metadata/cominterop.c b/mono/metadata/cominterop.c index b587e25fa41..b830214e883 100644 --- a/mono/metadata/cominterop.c +++ b/mono/metadata/cominterop.c @@ -517,7 +517,7 @@ cominterop_get_interface_checked (MonoComObject* obj, MonoClass* ic, MonoError * g_assert (ic); g_assert (MONO_CLASS_IS_INTERFACE (ic)); - mono_error_init (error); + error_init (error); mono_cominterop_lock (); if (obj->itf_hash) @@ -1522,7 +1522,7 @@ static gboolean cominterop_can_support_dispatch (MonoClass* klass) static void* cominterop_get_idispatch_for_object (MonoObject* object, MonoError *error) { - mono_error_init (error); + error_init (error); if (!object) return NULL; @@ -1942,7 +1942,7 @@ cominterop_get_ccw_checked (MonoObject* object, MonoClass* itf, MonoError *error GList *ccw_list, *ccw_list_item; MonoCustomAttrInfo *cinfo = NULL; - mono_error_init (error); + error_init (error); if (!object) return NULL; @@ -2446,7 +2446,7 @@ static const IID MONO_IID_IMarshal = {0x3, 0x0, 0x0, {0xC0, 0x0, 0x0, 0x0, 0x0, static int cominterop_ccw_getfreethreadedmarshaler (MonoCCW* ccw, MonoObject* object, gpointer* ppv, MonoError *error) { - mono_error_init (error); + error_init (error); #ifdef HOST_WIN32 if (!ccw->free_marshaler) { int ret = 0; @@ -2817,7 +2817,7 @@ mono_string_from_bstr_checked (gpointer bstr, MonoError *error) { MonoString * res = NULL; - mono_error_init (error); + error_init (error); if (!bstr) return NULL; @@ -3586,7 +3586,7 @@ MonoString * mono_string_from_bstr_checked (gpointer bstr, MonoError *error) { MonoString *res = NULL; - mono_error_init (error); + error_init (error); if (!bstr) return NULL; #ifdef HOST_WIN32 diff --git a/mono/metadata/console-win32-uwp.c b/mono/metadata/console-win32-uwp.c index 938ef80b171..542bc95ed22 100644 --- a/mono/metadata/console-win32-uwp.c +++ b/mono/metadata/console-win32-uwp.c @@ -16,7 +16,7 @@ MonoBoolean ves_icall_System_ConsoleDriver_Isatty (HANDLE handle) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("Console"); @@ -32,7 +32,7 @@ MonoBoolean ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean want_echo) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("Console"); @@ -48,7 +48,7 @@ MonoBoolean ves_icall_System_ConsoleDriver_SetBreak (MonoBoolean want_break) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("Console"); @@ -64,7 +64,7 @@ gint32 ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("Console"); @@ -80,7 +80,7 @@ MonoBoolean ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardown, MonoArray **control_chars, int **size) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("Console"); diff --git a/mono/metadata/custom-attrs.c b/mono/metadata/custom-attrs.c index 864b8463039..889315f0653 100644 --- a/mono/metadata/custom-attrs.c +++ b/mono/metadata/custom-attrs.c @@ -187,7 +187,7 @@ load_cattr_enum_type (MonoImage *image, const char *p, const char **end, MonoErr MonoType *t; int slen = mono_metadata_decode_value (p, &p); - mono_error_init (error); + error_init (error); n = (char *)g_memdup (p, slen + 1); n [slen] = 0; @@ -205,7 +205,7 @@ load_cattr_value (MonoImage *image, MonoType *t, const char *p, const char **end int slen, type = t->type; MonoClass *tklass = t->data.klass; - mono_error_init (error); + error_init (error); handle_enum: switch (type) { @@ -447,7 +447,7 @@ handle_type: static MonoObject* load_cattr_value_boxed (MonoDomain *domain, MonoImage *image, MonoType *t, const char* p, const char** end, MonoError *error) { - mono_error_init (error); + error_init (error); gboolean is_ref = type_is_reference (t); @@ -473,7 +473,7 @@ create_cattr_typed_arg (MonoType *t, MonoObject *val, MonoError *error) MonoObject *retval; void *params [2], *unboxed; - mono_error_init (error); + error_init (error); if (!ctor) ctor = mono_class_get_method_from_name (mono_class_get_custom_attribute_typed_argument_class (), ".ctor", 2); @@ -499,7 +499,7 @@ create_cattr_named_arg (void *minfo, MonoObject *typedarg, MonoError *error) MonoObject *retval; void *unboxed, *params [2]; - mono_error_init (error); + error_init (error); if (!ctor) ctor = mono_class_get_method_from_name (mono_class_get_custom_attribute_named_argument_class (), ".ctor", 2); @@ -578,7 +578,7 @@ create_custom_attr (MonoImage *image, MonoMethod *method, const guchar *data, gu void **params = NULL; MonoMethodSignature *sig; - mono_error_init (error); + error_init (error); mono_class_init (method->klass); @@ -759,7 +759,7 @@ mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *meth *named_args = NULL; *named_arg_info = NULL; - mono_error_init (error); + error_init (error); if (!mono_verifier_verify_cattr_content (image, method, data, len, NULL)) { mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Binary format of the specified custom attribute was invalid."); @@ -888,7 +888,7 @@ reflection_resolve_custom_attribute_data (MonoReflectionMethod *ref_method, Mono CattrNamedArg *arginfo = NULL; int i; - mono_error_init (error); + error_init (error); *ctor_args = NULL; *named_args = NULL; @@ -970,7 +970,7 @@ create_custom_attr_data_handle (MonoImage *image, MonoCustomAttrEntry *cattr, Mo MonoDomain *domain; void *params [4]; - mono_error_init (error); + error_init (error); g_assert (image->assembly); @@ -1015,7 +1015,7 @@ mono_custom_attrs_construct_by_type (MonoCustomAttrInfo *cinfo, MonoClass *attr_ MonoObject *attr; int i, n; - mono_error_init (error); + error_init (error); for (i = 0; i < cinfo->num_attrs; ++i) { MonoCustomAttrEntry *centry = &cinfo->attrs[i]; @@ -1072,7 +1072,7 @@ mono_custom_attrs_data_construct (MonoCustomAttrInfo *cinfo, MonoError *error) MonoObject *attr; int i; - mono_error_init (error); + error_init (error); result = mono_array_new_checked (mono_domain_get (), mono_defaults.customattribute_data_class, cinfo->num_attrs, error); return_val_if_nok (error, NULL); for (i = 0; i < cinfo->num_attrs; ++i) { @@ -1112,7 +1112,7 @@ mono_custom_attrs_from_index_checked (MonoImage *image, guint32 idx, gboolean ig const char *data; MonoCustomAttrEntry* attr; - mono_error_init (error); + error_init (error); ca = &image->tables [MONO_TABLE_CUSTOMATTRIBUTE]; @@ -1152,7 +1152,7 @@ mono_custom_attrs_from_index_checked (MonoImage *image, guint32 idx, gboolean ig g_warning ("Can't find custom attr constructor image: %s mtoken: 0x%08x due to: %s", image->name, mtoken, mono_error_get_message (error)); if (ignore_missing) { mono_error_cleanup (error); - mono_error_init (error); + error_init (error); } else { g_list_free (list); g_free (ainfo); @@ -1190,7 +1190,7 @@ mono_custom_attrs_from_method_checked (MonoMethod *method, MonoError *error) { guint32 idx; - mono_error_init (error); + error_init (error); /* * An instantiated method has the same cattrs as the generic method definition. @@ -1228,7 +1228,7 @@ mono_custom_attrs_from_class_checked (MonoClass *klass, MonoError *error) { guint32 idx; - mono_error_init (error); + error_init (error); if (mono_class_is_ginst (klass)) klass = mono_class_get_generic_class (klass)->container_class; @@ -1262,7 +1262,7 @@ mono_custom_attrs_from_assembly_checked (MonoAssembly *assembly, gboolean ignore { guint32 idx; - mono_error_init (error); + error_init (error); if (image_is_dynamic (assembly->image)) return lookup_custom_attr (assembly->image, assembly); @@ -1346,7 +1346,7 @@ MonoCustomAttrInfo* mono_custom_attrs_from_field_checked (MonoClass *klass, MonoClassField *field, MonoError *error) { guint32 idx; - mono_error_init (error); + error_init (error); if (image_is_dynamic (klass->image)) { field = mono_metadata_get_corresponding_field_from_generic_type_definition (field); @@ -1395,7 +1395,7 @@ mono_custom_attrs_from_param_checked (MonoMethod *method, guint32 param, MonoErr MonoImage *image; MonoReflectionMethodAux *aux; - mono_error_init (error); + error_init (error); /* * An instantiated method has the same cattrs as the generic method definition. @@ -1486,7 +1486,7 @@ mono_custom_attrs_get_attr_checked (MonoCustomAttrInfo *ainfo, MonoClass *attr_k g_assert (attr_klass != NULL); - mono_error_init (error); + error_init (error); for (i = 0; i < ainfo->num_attrs; ++i) { centry = &ainfo->attrs[i]; @@ -1538,7 +1538,7 @@ mono_reflection_get_custom_attrs_info_checked (MonoObject *obj, MonoError *error MonoClass *klass; MonoCustomAttrInfo *cinfo = NULL; - mono_error_init (error); + error_init (error); klass = obj->vtable->klass; if (klass == mono_defaults.runtimetype_class) { @@ -1650,7 +1650,7 @@ mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass MonoArray *result; MonoCustomAttrInfo *cinfo; - mono_error_init (error); + error_init (error); cinfo = mono_reflection_get_custom_attrs_info_checked (obj, error); return_val_if_nok (error, NULL); @@ -1716,7 +1716,7 @@ mono_reflection_get_custom_attrs_data_checked (MonoObject *obj, MonoError *error MonoArray *result; MonoCustomAttrInfo *cinfo; - mono_error_init (error); + error_init (error); cinfo = mono_reflection_get_custom_attrs_info_checked (obj, error); return_val_if_nok (error, NULL); diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index 810d4119791..0785369e0c6 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -494,6 +494,8 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * mono_counters_register ("Max code space allocated in a domain", MONO_COUNTER_INT|MONO_COUNTER_JIT, &max_domain_code_alloc); mono_counters_register ("Total code space allocated", MONO_COUNTER_INT|MONO_COUNTER_JIT, &total_domain_code_alloc); + mono_counters_register ("Max HashTable Chain Length", MONO_COUNTER_INT|MONO_COUNTER_METADATA, &mono_g_hash_table_max_chain_length); + mono_gc_base_init (); mono_thread_info_attach (&dummy); diff --git a/mono/metadata/dynamic-image.c b/mono/metadata/dynamic-image.c index 8ee2e59993a..eb91e637d4b 100644 --- a/mono/metadata/dynamic-image.c +++ b/mono/metadata/dynamic-image.c @@ -256,7 +256,7 @@ mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean MonoObject *obj; MonoClass *klass; - mono_error_init (error); + error_init (error); obj = lookup_dyn_token (assembly, token); if (!obj) { @@ -277,7 +277,7 @@ mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean gpointer mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error) { - mono_error_init (error); + error_init (error); return NULL; } #endif /* DISABLE_REFLECTION_EMIT */ diff --git a/mono/metadata/dynamic-stream.c b/mono/metadata/dynamic-stream.c index 6cf6370e040..3b62211ef3e 100644 --- a/mono/metadata/dynamic-stream.c +++ b/mono/metadata/dynamic-stream.c @@ -76,7 +76,7 @@ mono_dynstream_insert_mstring (MonoDynamicStream *sh, MonoString *str, MonoError { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); char *name = mono_string_to_utf8_checked (str, error); return_val_if_nok (error, -1); guint32 idx; diff --git a/mono/metadata/exception.c b/mono/metadata/exception.c index baaa2af993a..e6158463a5a 100644 --- a/mono/metadata/exception.c +++ b/mono/metadata/exception.c @@ -208,7 +208,7 @@ mono_exception_from_name_two_strings_checked (MonoImage *image, const char *name { MonoClass *klass; - mono_error_init (error); + error_init (error); klass = mono_class_load_from_name (image, name_space, name); return create_exception_two_strings (klass, a1, a2, error); @@ -269,7 +269,7 @@ mono_exception_from_token_two_strings_checked (MonoImage *image, guint32 token, { MonoClass *klass; - mono_error_init (error); + error_init (error); klass = mono_class_get_checked (image, token, error); mono_error_assert_ok (error); /* FIXME handle the error. */ @@ -867,7 +867,7 @@ mono_get_exception_reflection_type_load_checked (MonoArrayHandle types, MonoArra MonoMethod *method; gpointer iter; - mono_error_init (error); + error_init (error); klass = mono_class_load_from_name (mono_get_corlib (), "System.Reflection", "ReflectionTypeLoadException"); @@ -1017,7 +1017,7 @@ ves_icall_Mono_Runtime_GetNativeStackTrace (MonoExceptionHandle exc, MonoError * { char *trace; MonoStringHandle res; - mono_error_init (error); + error_init (error); if (!exc) { mono_error_set_argument_null (error, "exception", ""); diff --git a/mono/metadata/gc-internals.h b/mono/metadata/gc-internals.h index 38aa44de6ca..f71f0bc9f4a 100644 --- a/mono/metadata/gc-internals.h +++ b/mono/metadata/gc-internals.h @@ -168,8 +168,6 @@ void mono_gc_wbarrier_set_root (gpointer ptr, MonoObject *value); mono_gc_wbarrier_set_root (&((s)->fieldname), (MonoObject*)value); \ } while (0) -void mono_gc_finalize_threadpool_threads (void); - /* fast allocation support */ typedef enum { diff --git a/mono/metadata/gc.c b/mono/metadata/gc.c index bf53c0f126b..7402096d704 100644 --- a/mono/metadata/gc.c +++ b/mono/metadata/gc.c @@ -68,7 +68,6 @@ static MonoCoopMutex finalizer_mutex; static MonoCoopMutex reference_queue_mutex; static GSList *domains_to_finalize; -static MonoMList *threads_to_finalize; static gboolean finalizer_thread_exited; /* Uses finalizer_mutex */ @@ -157,18 +156,6 @@ coop_cond_timedwait_alertable (MonoCoopCond *cond, MonoCoopMutex *mutex, guint32 return res; } -static gboolean -add_thread_to_finalize (MonoInternalThread *thread, MonoError *error) -{ - mono_error_init (error); - mono_finalizer_lock (); - if (!threads_to_finalize) - MONO_GC_REGISTER_ROOT_SINGLE (threads_to_finalize, MONO_ROOT_SOURCE_FINALIZER_QUEUE, "finalizable threads list"); - threads_to_finalize = mono_mlist_append_checked (threads_to_finalize, (MonoObject*)thread, error); - mono_finalizer_unlock (); - return is_ok (error); -} - /* * actually, we might want to queue the finalize requests in a separate thread, * but we need to be careful about the execution domain of the thread... @@ -241,15 +228,6 @@ mono_gc_run_finalize (void *obj, void *data) if (mono_gc_is_finalizer_internal_thread (t)) /* Avoid finalizing ourselves */ return; - - if (t->threadpool_thread && finalizing_root_domain) { - /* Don't finalize threadpool threads when - shutting down - they're finalized when the - threadpool shuts down. */ - if (!add_thread_to_finalize (t, &error)) - goto unhandled_error; - return; - } } if (o->vtable->klass->image == mono_defaults.corlib && !strcmp (o->vtable->klass->name, "DynamicMethod") && finalizing_root_domain) { @@ -344,22 +322,6 @@ unhandled_error: mono_domain_set_internal (caller_domain); } -void -mono_gc_finalize_threadpool_threads (void) -{ - while (threads_to_finalize) { - MonoInternalThread *thread = (MonoInternalThread*) mono_mlist_get_data (threads_to_finalize); - - /* Force finalization of the thread. */ - thread->threadpool_thread = FALSE; - mono_object_register_finalizer ((MonoObject*)thread); - - mono_gc_run_finalize (thread, NULL); - - threads_to_finalize = mono_mlist_next (threads_to_finalize); - } -} - gpointer mono_gc_out_of_memory (size_t size) { @@ -555,11 +517,6 @@ mono_domain_finalize (MonoDomain *domain, guint32 timeout) goto done; } - if (domain == mono_get_root_domain ()) { - mono_threadpool_cleanup (); - mono_gc_finalize_threadpool_threads (); - } - done: if (InterlockedDecrement (&req->ref) == 0) { mono_coop_sem_destroy (&req->done); diff --git a/mono/metadata/icall-windows-uwp.c b/mono/metadata/icall-windows-uwp.c index f43e22f5d39..7867984e28f 100644 --- a/mono/metadata/icall-windows-uwp.c +++ b/mono/metadata/icall-windows-uwp.c @@ -30,7 +30,7 @@ MonoArray * mono_icall_get_logical_drives (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetLogicalDriveStrings"); @@ -46,7 +46,7 @@ void mono_icall_broadcast_setting_change (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("SendMessageTimeout"); @@ -62,7 +62,7 @@ guint32 mono_icall_drive_info_get_drive_type (MonoString *root_path_name) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetDriveType"); @@ -76,7 +76,7 @@ gint32 mono_icall_wait_for_input_idle (gpointer handle, gint32 milliseconds) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("WaitForInputIdle"); diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index 4b56f405345..6f76a3250a9 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -130,7 +130,7 @@ is_generic_parameter (MonoType *type) static void mono_class_init_checked (MonoClass *klass, MonoError *error) { - mono_error_init (error); + error_init (error); if (!mono_class_init (klass)) mono_error_set_for_class_failure (error, klass); @@ -232,7 +232,7 @@ ves_icall_System_Array_SetValueImpl (MonoArray *arr, MonoObject *value, guint32 gint64 i64 = 0; gdouble r64 = 0; - mono_error_init (&error); + error_init (&error); if (value) vc = value->vtable->klass; @@ -844,7 +844,7 @@ ves_icall_System_Array_SetGenericValueImpl (MonoArray *arr, guint32 pos, gpointe ICALL_EXPORT void ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray (MonoArrayHandle array, MonoClassField *field_handle, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass = mono_handle_class (array); guint32 size = mono_array_element_size (klass); @@ -1216,7 +1216,7 @@ ves_icall_System_ValueType_Equals (MonoObject *this_obj, MonoObject *that, MonoA ICALL_EXPORT MonoReflectionTypeHandle ves_icall_System_Object_GetType (MonoObjectHandle obj, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (obj); MonoClass *klass = mono_handle_class (obj); #ifndef DISABLE_REMOTING @@ -1313,7 +1313,7 @@ type_from_parsed_name (MonoTypeNameParse *info, MonoBoolean ignoreCase, MonoAsse gboolean type_resolve = FALSE; MonoImage *rootimage = NULL; - mono_error_init (error); + error_init (error); /* * We must compute the calling assembly as type loading must happen under a metadata context. @@ -1402,7 +1402,7 @@ ves_icall_System_Type_internal_from_name (MonoStringHandle name, MonoBoolean ignoreCase, MonoError *error) { - mono_error_init (error); + error_init (error); MonoTypeNameParse info; gboolean parsedOk; MonoAssembly *caller_assembly; @@ -1460,7 +1460,7 @@ leave: ICALL_EXPORT MonoReflectionTypeHandle ves_icall_System_Type_internal_from_handle (MonoType *handle, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); return mono_type_get_object_handle (domain, handle, error); @@ -1518,7 +1518,7 @@ typedef enum { ICALL_EXPORT guint32 ves_icall_type_GetTypeCodeInternal (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); int t = type->type; @@ -1612,7 +1612,7 @@ mono_type_get_underlying_type_ignore_byref (MonoType *type) ICALL_EXPORT guint32 ves_icall_RuntimeTypeHandle_type_is_assignable_from (MonoReflectionTypeHandle ref_type, MonoReflectionTypeHandle ref_c, MonoError *error) { - mono_error_init (error); + error_init (error); g_assert (!MONO_HANDLE_IS_NULL (ref_type)); @@ -1652,7 +1652,7 @@ ves_icall_RuntimeTypeHandle_type_is_assignable_from (MonoReflectionTypeHandle re ICALL_EXPORT guint32 ves_icall_RuntimeTypeHandle_IsInstanceOfType (MonoReflectionTypeHandle ref_type, MonoObjectHandle obj, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); mono_class_init_checked (klass, error); @@ -1665,7 +1665,7 @@ ves_icall_RuntimeTypeHandle_IsInstanceOfType (MonoReflectionTypeHandle ref_type, ICALL_EXPORT guint32 ves_icall_RuntimeTypeHandle_GetAttributes (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); return mono_class_get_flags (klass); @@ -1674,7 +1674,7 @@ ves_icall_RuntimeTypeHandle_GetAttributes (MonoReflectionTypeHandle ref_type, Mo ICALL_EXPORT MonoReflectionMarshalAsAttributeHandle ves_icall_System_Reflection_FieldInfo_get_marshal_info (MonoReflectionFieldHandle field_h, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (field_h); MonoClassField *field = MONO_HANDLE_GETVAL (field_h, field); MonoClass *klass = field->parent; @@ -1710,7 +1710,7 @@ ves_icall_System_Reflection_FieldInfo_internal_from_handle_type (MonoClassField g_assert (handle); - mono_error_init (error); + error_init (error); if (!type) { klass = handle->parent; @@ -1734,7 +1734,7 @@ ves_icall_System_Reflection_EventInfo_internal_from_handle_type (MonoEvent *hand g_assert (handle); - mono_error_init (error); + error_init (error); if (!type) { klass = handle->parent; @@ -1754,7 +1754,7 @@ ves_icall_System_Reflection_EventInfo_internal_from_handle_type (MonoEvent *hand ICALL_EXPORT MonoReflectionPropertyHandle ves_icall_System_Reflection_PropertyInfo_internal_from_handle_type (MonoProperty *handle, MonoType *type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass; g_assert (handle); @@ -1776,7 +1776,7 @@ ves_icall_System_Reflection_PropertyInfo_internal_from_handle_type (MonoProperty ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_FieldInfo_GetTypeModifiers (MonoReflectionFieldHandle field_h, MonoBoolean optional, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClassField *field = MONO_HANDLE_GETVAL (field_h, field); MonoType *type = mono_field_get_type_checked (field, error); @@ -1838,7 +1838,7 @@ ves_icall_get_method_info (MonoMethod *method, MonoMethodInfo *info) ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_MonoMethodInfo_get_parameter_info (MonoMethod *method, MonoReflectionMethodHandle member, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoReflectionTypeHandle reftype = MONO_HANDLE_NEW (MonoReflectionType, NULL); @@ -1852,7 +1852,7 @@ ves_icall_System_Reflection_MonoMethodInfo_get_parameter_info (MonoMethod *metho ICALL_EXPORT MonoReflectionMarshalAsAttributeHandle ves_icall_System_MonoMethodInfo_get_retval_marshal (MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoReflectionMarshalAsAttributeHandle res = MONO_HANDLE_NEW (MonoReflectionMarshalAsAttribute, NULL); @@ -1886,7 +1886,7 @@ ves_icall_MonoField_GetFieldOffset (MonoReflectionField *field) ICALL_EXPORT MonoReflectionTypeHandle ves_icall_MonoField_GetParentType (MonoReflectionFieldHandle field, MonoBoolean declaring, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (field); MonoClass *parent; @@ -2152,7 +2152,7 @@ ves_icall_MonoField_GetRawConstantValue (MonoReflectionField *rfield) ICALL_EXPORT MonoReflectionTypeHandle ves_icall_MonoField_ResolveType (MonoReflectionFieldHandle ref_field, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_field); MonoClassField *field = MONO_HANDLE_GETVAL (ref_field, field); MonoType *type = mono_field_get_type_checked (field, error); @@ -2377,7 +2377,7 @@ get_interfaces_hash (gconstpointer v1) ICALL_EXPORT MonoArrayHandle ves_icall_RuntimeType_GetInterfaces (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -2437,7 +2437,7 @@ static gboolean set_interface_map_data_method_object (MonoDomain *domain, MonoMethod *method, MonoClass *iclass, int ioffset, MonoClass *klass, MonoArrayHandle targets, MonoArrayHandle methods, int i, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionMethodHandle member = mono_method_get_object_handle (domain, method, iclass, error); if (!is_ok (error)) goto leave; @@ -2457,7 +2457,7 @@ leave: ICALL_EXPORT void ves_icall_RuntimeType_GetInterfaceMapData (MonoReflectionTypeHandle ref_type, MonoReflectionTypeHandle ref_iface, MonoArrayHandleOut targets, MonoArrayHandleOut methods, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); MonoType *iface = MONO_HANDLE_GETVAL (ref_iface, type); @@ -2498,7 +2498,7 @@ ves_icall_RuntimeType_GetInterfaceMapData (MonoReflectionTypeHandle ref_type, Mo ICALL_EXPORT void ves_icall_RuntimeType_GetPacking (MonoReflectionTypeHandle ref_type, guint32 *packing, guint32 *size, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -2518,7 +2518,7 @@ ves_icall_RuntimeType_GetPacking (MonoReflectionTypeHandle ref_type, guint32 *pa ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeTypeHandle_GetElementType (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); @@ -2547,7 +2547,7 @@ ves_icall_RuntimeTypeHandle_GetElementType (MonoReflectionTypeHandle ref_type, M ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeTypeHandle_GetBaseType (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); @@ -2565,7 +2565,7 @@ ves_icall_RuntimeTypeHandle_GetBaseType (MonoReflectionTypeHandle ref_type, Mono ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_IsPointer (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); return type->type == MONO_TYPE_PTR; } @@ -2573,7 +2573,7 @@ ves_icall_RuntimeTypeHandle_IsPointer (MonoReflectionTypeHandle ref_type, MonoEr ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_IsPrimitive (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); return (!type->byref && (((type->type >= MONO_TYPE_BOOLEAN) && (type->type <= MONO_TYPE_R8)) || (type->type == MONO_TYPE_I) || (type->type == MONO_TYPE_U))); } @@ -2581,7 +2581,7 @@ ves_icall_RuntimeTypeHandle_IsPrimitive (MonoReflectionTypeHandle ref_type, Mono ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_IsByRef (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); return type->byref; } @@ -2589,7 +2589,7 @@ ves_icall_RuntimeTypeHandle_IsByRef (MonoReflectionTypeHandle ref_type, MonoErro ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_IsComObject (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); mono_class_init_checked (klass, error); @@ -2602,14 +2602,14 @@ ves_icall_RuntimeTypeHandle_IsComObject (MonoReflectionTypeHandle ref_type, Mono ICALL_EXPORT guint32 ves_icall_reflection_get_token (MonoObjectHandle obj, MonoError *error) { - mono_error_init (error); + error_init (error); return mono_reflection_get_token_checked (obj, error); } ICALL_EXPORT MonoReflectionModuleHandle ves_icall_RuntimeTypeHandle_GetModule (MonoReflectionTypeHandle type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (type); MonoType *t = MONO_HANDLE_GETVAL (type, type); MonoClass *klass = mono_class_from_mono_type (t); @@ -2619,7 +2619,7 @@ ves_icall_RuntimeTypeHandle_GetModule (MonoReflectionTypeHandle type, MonoError ICALL_EXPORT MonoReflectionAssemblyHandle ves_icall_RuntimeTypeHandle_GetAssembly (MonoReflectionTypeHandle type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoType *t = MONO_HANDLE_GETVAL (type, type); MonoClass *klass = mono_class_from_mono_type (t); @@ -2629,7 +2629,7 @@ ves_icall_RuntimeTypeHandle_GetAssembly (MonoReflectionTypeHandle type, MonoErro ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeType_get_DeclaringType (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass; @@ -2689,7 +2689,7 @@ ves_icall_RuntimeType_get_Namespace (MonoReflectionTypeHandle type, MonoError *e ICALL_EXPORT gint32 ves_icall_RuntimeTypeHandle_GetArrayRank (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); if (type->type != MONO_TYPE_ARRAY && type->type != MONO_TYPE_SZARRAY) { @@ -2712,7 +2712,7 @@ static gboolean set_type_object_in_array (MonoDomain *domain, MonoType *type, MonoArrayHandle dest, int i, MonoError *error) { HANDLE_FUNCTION_ENTER(); - mono_error_init (error); + error_init (error); MonoReflectionTypeHandle rt = mono_type_get_object_handle (domain, type, error); if (!is_ok (error)) goto leave; @@ -2726,7 +2726,7 @@ leave: ICALL_EXPORT MonoArrayHandle ves_icall_RuntimeType_GetGenericArguments (MonoReflectionTypeHandle ref_type, MonoBoolean runtimeTypeArray, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); @@ -2763,7 +2763,7 @@ leave: ICALL_EXPORT gboolean ves_icall_RuntimeTypeHandle_IsGenericTypeDefinition (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); if (!IS_MONOTYPE (MONO_HANDLE_RAW(ref_type))) return FALSE; @@ -2779,7 +2779,7 @@ ves_icall_RuntimeTypeHandle_IsGenericTypeDefinition (MonoReflectionTypeHandle re ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeTypeHandle_GetGenericTypeDefinition_impl (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoReflectionTypeHandle ret = MONO_HANDLE_NEW (MonoReflectionType, NULL); @@ -2815,7 +2815,7 @@ leave: ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeType_MakeGenericType (MonoReflectionTypeHandle reftype, MonoArrayHandle type_array, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (reftype); g_assert (IS_MONOTYPE_HANDLE (reftype)); @@ -2853,7 +2853,7 @@ ves_icall_RuntimeType_MakeGenericType (MonoReflectionTypeHandle reftype, MonoArr ICALL_EXPORT gboolean ves_icall_RuntimeTypeHandle_HasInstantiation (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass; if (!IS_MONOTYPE (MONO_HANDLE_RAW (ref_type))) @@ -2870,7 +2870,7 @@ ves_icall_RuntimeTypeHandle_HasInstantiation (MonoReflectionTypeHandle ref_type, ICALL_EXPORT gint32 ves_icall_RuntimeType_GetGenericParameterPosition (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); if (!IS_MONOTYPE_HANDLE (ref_type)) return -1; MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); @@ -2883,7 +2883,7 @@ ves_icall_RuntimeType_GetGenericParameterPosition (MonoReflectionTypeHandle ref_ ICALL_EXPORT MonoGenericParamInfo * ves_icall_RuntimeTypeHandle_GetGenericParameterInfo (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); return mono_generic_param_info (type->data.generic_param); } @@ -2900,7 +2900,7 @@ ves_icall_RuntimeType_GetCorrespondingInflatedMethod (MonoReflectionTypeHandle r MonoReflectionMethodHandle generic, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -2928,7 +2928,7 @@ ves_icall_RuntimeType_GetCorrespondingInflatedMethod (MonoReflectionTypeHandle r ICALL_EXPORT MonoReflectionMethodHandle ves_icall_RuntimeType_get_DeclaringMethod (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoReflectionMethodHandle ret = MONO_HANDLE_NEW (MonoReflectionMethod, NULL); @@ -2952,7 +2952,7 @@ leave: ICALL_EXPORT MonoBoolean ves_icall_System_RuntimeType_IsTypeExportedToWindowsRuntime (MonoError *error) { - mono_error_init (error); + error_init (error); mono_error_set_not_implemented (error, "%s", ""); return FALSE; } @@ -2960,7 +2960,7 @@ ves_icall_System_RuntimeType_IsTypeExportedToWindowsRuntime (MonoError *error) ICALL_EXPORT MonoBoolean ves_icall_System_RuntimeType_IsWindowsRuntimeObjectType (MonoError *error) { - mono_error_init (error); + error_init (error); mono_error_set_not_implemented (error, "%s", ""); return FALSE; } @@ -2980,7 +2980,7 @@ ves_icall_MonoMethod_GetPInvoke (MonoReflectionMethodHandle ref_method, int* fla const char *import = NULL; const char *scope = NULL; - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { MonoReflectionMethodAux *method_aux = @@ -3015,7 +3015,7 @@ ves_icall_MonoMethod_GetPInvoke (MonoReflectionMethodHandle ref_method, int* fla ICALL_EXPORT MonoReflectionMethodHandle ves_icall_MonoMethod_GetGenericMethodDefinition (MonoReflectionMethodHandle ref_method, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *method = MONO_HANDLE_GETVAL (ref_method, method); if (method->is_generic) @@ -3076,7 +3076,7 @@ static gboolean set_array_generic_argument_handle_inflated (MonoDomain *domain, MonoGenericInst *inst, int i, MonoArrayHandle arr, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionTypeHandle rt = mono_type_get_object_handle (domain, inst->type_argv [i], error); if (!is_ok (error)) goto leave; @@ -3089,7 +3089,7 @@ static gboolean set_array_generic_argument_handle_gparam (MonoDomain *domain, MonoGenericContainer *container, int i, MonoArrayHandle arr, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoGenericParam *param = mono_generic_container_get_param (container, i); MonoClass *pklass = mono_class_from_generic_parameter_internal (param); MonoReflectionTypeHandle rt = mono_type_get_object_handle (domain, &pklass->byval_arg, error); @@ -3103,7 +3103,7 @@ leave: ICALL_EXPORT MonoArrayHandle ves_icall_MonoMethod_GetGenericArguments (MonoReflectionMethodHandle ref_method, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_method); MonoMethod *method = MONO_HANDLE_GETVAL (ref_method, method); @@ -3665,7 +3665,7 @@ ves_icall_System_Enum_get_hashcode (MonoObject *eobj) static void get_enum_field (MonoDomain *domain, MonoArrayHandle names, MonoArrayHandle values, int base_type, MonoClassField *field, guint* j, guint64 *previous_value, gboolean *sorted, MonoError *error) { - mono_error_init (error); + error_init (error); HANDLE_FUNCTION_ENTER(); guint64 field_value; const char *p; @@ -3709,7 +3709,7 @@ ves_icall_System_Enum_GetEnumValuesAndNames (MonoReflectionTypeHandle type, Mono guint64 previous_value = 0; gboolean sorted = TRUE; - mono_error_init (error); + error_init (error); mono_class_init_checked (enumc, error); return_val_if_nok (error, FALSE); @@ -3759,7 +3759,7 @@ enum { ICALL_EXPORT GPtrArray* ves_icall_RuntimeType_GetFields_native (MonoReflectionTypeHandle ref_type, char *utf8_name, guint32 bflags, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); if (type->byref) { @@ -3855,7 +3855,7 @@ mono_class_get_methods_by_name (MonoClass *klass, const char *name, guint32 bfla array = g_ptr_array_new (); startklass = klass; - mono_error_init (error); + error_init (error); if (name != NULL) compare_func = (ignore_case) ? mono_utf8_strcasecmp : strcmp; @@ -3952,7 +3952,7 @@ loader_error: ICALL_EXPORT GPtrArray* ves_icall_RuntimeType_GetMethodsByName_native (MonoReflectionTypeHandle ref_type, const char *mname, guint32 bflags, MonoBoolean ignore_case, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -3966,7 +3966,7 @@ ves_icall_RuntimeType_GetMethodsByName_native (MonoReflectionTypeHandle ref_type ICALL_EXPORT GPtrArray* ves_icall_RuntimeType_GetConstructors_native (MonoReflectionTypeHandle ref_type, guint32 bflags, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); if (type->byref) { return g_ptr_array_new (); @@ -4083,7 +4083,7 @@ property_accessor_nonpublic (MonoMethod* accessor, gboolean start_klass) ICALL_EXPORT GPtrArray* ves_icall_RuntimeType_GetPropertiesByName_native (MonoReflectionTypeHandle ref_type, gchar *propname, guint32 bflags, MonoBoolean ignore_case, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); @@ -4189,7 +4189,7 @@ event_equal (MonoEvent *event1, MonoEvent *event2) ICALL_EXPORT GPtrArray* ves_icall_RuntimeType_GetEvents_native (MonoReflectionTypeHandle ref_type, char *utf8_name, guint32 bflags, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); if (type->byref) { @@ -4281,7 +4281,7 @@ failure: ICALL_EXPORT GPtrArray * ves_icall_RuntimeType_GetNestedTypes_native (MonoReflectionTypeHandle ref_type, char *str, guint32 bflags, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); if (type->byref) { @@ -4331,7 +4331,7 @@ static MonoType* get_type_from_module_builder_module (MonoArrayHandle modules, int i, MonoTypeNameParse *info, MonoBoolean ignoreCase, gboolean *type_resolve, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *type = NULL; MonoReflectionModuleBuilderHandle mb = MONO_HANDLE_NEW (MonoReflectionModuleBuilder, NULL); MONO_HANDLE_ARRAY_GETREF (mb, modules, i); @@ -4344,7 +4344,7 @@ static MonoType* get_type_from_module_builder_loaded_modules (MonoArrayHandle loaded_modules, int i, MonoTypeNameParse *info, MonoBoolean ignoreCase, gboolean *type_resolve, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *type = NULL; MonoReflectionModuleHandle mod = MONO_HANDLE_NEW (MonoReflectionModule, NULL); MONO_HANDLE_ARRAY_GETREF (mod, loaded_modules, i); @@ -4356,7 +4356,7 @@ get_type_from_module_builder_loaded_modules (MonoArrayHandle loaded_modules, int ICALL_EXPORT MonoReflectionTypeHandle ves_icall_System_Reflection_Assembly_InternalGetType (MonoReflectionAssemblyHandle assembly_h, MonoReflectionModuleHandle module, MonoStringHandle name, MonoBoolean throwOnError, MonoBoolean ignoreCase, MonoError *error) { - mono_error_init (error); + error_init (error); MonoTypeNameParse info; gboolean type_resolve; @@ -4522,7 +4522,7 @@ replace_shadow_path (MonoDomain *domain, gchar *dirname, gchar **filename) ICALL_EXPORT MonoStringHandle ves_icall_System_Reflection_Assembly_get_code_base (MonoReflectionAssemblyHandle assembly, MonoBoolean escaped, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly); MonoAssembly *mass = MONO_HANDLE_GETVAL (assembly, assembly); gchar *absolute; @@ -4564,7 +4564,7 @@ ves_icall_System_Reflection_Assembly_get_code_base (MonoReflectionAssemblyHandle ICALL_EXPORT MonoBoolean ves_icall_System_Reflection_Assembly_get_global_assembly_cache (MonoReflectionAssemblyHandle assembly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAssembly *mass = MONO_HANDLE_GETVAL (assembly,assembly); return mass->in_gac; @@ -4602,7 +4602,7 @@ ves_icall_System_Reflection_Assembly_get_location (MonoReflectionAssemblyHandle ICALL_EXPORT MonoBoolean ves_icall_System_Reflection_Assembly_get_ReflectionOnly (MonoReflectionAssemblyHandle assembly_h, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); return assembly->ref_only; } @@ -4619,7 +4619,7 @@ ves_icall_System_Reflection_Assembly_InternalImageRuntimeVersion (MonoReflection ICALL_EXPORT MonoReflectionMethodHandle ves_icall_System_Reflection_Assembly_get_EntryPoint (MonoReflectionAssemblyHandle assembly_h, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly_h); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoMethod *method; @@ -4641,7 +4641,7 @@ leave: ICALL_EXPORT MonoReflectionModuleHandle ves_icall_System_Reflection_Assembly_GetManifestModuleInternal (MonoReflectionAssemblyHandle assembly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly); MonoAssembly *a = MONO_HANDLE_GETVAL (assembly, assembly); return mono_module_get_object_handle (domain, a->image, error); @@ -4651,7 +4651,7 @@ static gboolean add_manifest_resource_name_to_array (MonoDomain *domain, MonoImage *image, MonoTableInfo *table, int i, MonoArrayHandle dest, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); const char *val = mono_metadata_string_heap (image, mono_metadata_decode_row_col (table, i, MONO_MANIFEST_NAME)); MonoStringHandle str = mono_string_new_handle (domain, val, error); if (!is_ok (error)) @@ -4664,7 +4664,7 @@ leave: ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_Assembly_GetManifestResourceNames (MonoReflectionAssemblyHandle assembly_h, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly_h); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoTableInfo *table = &assembly->image->tables [MONO_TABLE_MANIFESTRESOURCE]; @@ -4696,7 +4696,7 @@ ves_icall_System_Reflection_Assembly_GetAotId (MonoError *error) static MonoAssemblyName* create_referenced_assembly_name (MonoDomain *domain, MonoImage *image, MonoTableInfo *t, int i, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAssemblyName *aname = g_new0 (MonoAssemblyName, 1); mono_assembly_get_assemblyref (image, i, aname); @@ -4719,7 +4719,7 @@ create_referenced_assembly_name (MonoDomain *domain, MonoImage *image, MonoTable ICALL_EXPORT GPtrArray* ves_icall_System_Reflection_Assembly_InternalGetReferencedAssemblies (MonoReflectionAssemblyHandle assembly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly); MonoAssembly *ass = MONO_HANDLE_GETVAL(assembly, assembly); MonoImage *image = ass->image; @@ -4758,7 +4758,7 @@ g_concat_dir_and_file (const char *dir, const char *file) ICALL_EXPORT void * ves_icall_System_Reflection_Assembly_GetManifestResourceInternal (MonoReflectionAssemblyHandle assembly_h, MonoStringHandle name, gint32 *size, MonoReflectionModuleHandleOut ref_module, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly_h); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoTableInfo *table = &assembly->image->tables [MONO_TABLE_MANIFESTRESOURCE]; @@ -4887,7 +4887,7 @@ leave: ICALL_EXPORT gboolean ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal (MonoReflectionAssemblyHandle assembly_h, MonoStringHandle name, MonoManifestResourceInfoHandle info_h, MonoError *error) { - mono_error_init (error); + error_init (error); return get_manifest_resource_info_internal (assembly_h, name, info_h, error); } @@ -4895,7 +4895,7 @@ static gboolean add_filename_to_files_array (MonoDomain *domain, MonoAssembly * assembly, MonoTableInfo *table, int i, MonoArrayHandle dest, int dest_idx, MonoError *error) { HANDLE_FUNCTION_ENTER(); - mono_error_init (error); + error_init (error); const char *val = mono_metadata_string_heap (assembly->image, mono_metadata_decode_row_col (table, i, MONO_FILE_NAME)); char *n = g_concat_dir_and_file (assembly->basedir, val); MonoStringHandle str = mono_string_new_handle (domain, n, error); @@ -4910,7 +4910,7 @@ leave: ICALL_EXPORT MonoObjectHandle ves_icall_System_Reflection_Assembly_GetFilesInternal (MonoReflectionAssemblyHandle assembly_h, MonoStringHandle name, MonoBoolean resource_modules, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly_h); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoTableInfo *table = &assembly->image->tables [MONO_TABLE_FILE]; @@ -4965,7 +4965,7 @@ static gboolean add_module_to_modules_array (MonoDomain *domain, MonoArrayHandle dest, int *dest_idx, MonoImage* module, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); if (module) { MonoReflectionModuleHandle rm = mono_module_get_object_handle (domain, module, error); if (!is_ok (error)) @@ -4983,7 +4983,7 @@ static gboolean add_file_to_modules_array (MonoDomain *domain, MonoArrayHandle dest, int dest_idx, MonoImage *image, MonoTableInfo *table, int table_idx, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); guint32 cols [MONO_FILE_SIZE]; mono_metadata_decode_row (table, table_idx, cols, MONO_FILE_SIZE); @@ -5014,7 +5014,7 @@ leave: ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_Assembly_GetModulesInternal (MonoReflectionAssemblyHandle assembly_h, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get(); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoClass *klass; @@ -5067,7 +5067,7 @@ fail: ICALL_EXPORT MonoReflectionMethodHandle ves_icall_GetCurrentMethod (MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *m = mono_method_get_last_managed (); @@ -5124,7 +5124,7 @@ mono_method_get_equivalent_method (MonoMethod *method, MonoClass *klass) ICALL_EXPORT MonoReflectionMethodHandle ves_icall_System_Reflection_MethodBase_GetMethodFromHandleInternalType_native (MonoMethod *method, MonoType *type, MonoBoolean generic_check, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass; if (type && generic_check) { klass = mono_class_from_mono_type (type); @@ -5146,14 +5146,14 @@ ves_icall_System_Reflection_MethodBase_GetMethodFromHandleInternalType_native (M ICALL_EXPORT MonoReflectionMethodBodyHandle ves_icall_System_Reflection_MethodBase_GetMethodBodyInternal (MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); return mono_method_body_get_object_handle (mono_domain_get (), method, error); } ICALL_EXPORT MonoReflectionAssemblyHandle ves_icall_System_Reflection_Assembly_GetExecutingAssembly (MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *dest = NULL; mono_stack_walk_no_il (get_executing, &dest); @@ -5165,7 +5165,7 @@ ves_icall_System_Reflection_Assembly_GetExecutingAssembly (MonoError *error) ICALL_EXPORT MonoReflectionAssemblyHandle ves_icall_System_Reflection_Assembly_GetEntryAssembly (MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain* domain = mono_domain_get (); @@ -5178,7 +5178,7 @@ ves_icall_System_Reflection_Assembly_GetEntryAssembly (MonoError *error) ICALL_EXPORT MonoReflectionAssemblyHandle ves_icall_System_Reflection_Assembly_GetCallingAssembly (MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *m; MonoMethod *dest; @@ -5230,7 +5230,7 @@ ves_icall_System_RuntimeType_getFullName (MonoReflectionTypeHandle object, gbool ICALL_EXPORT int vell_icall_RuntimeType_get_core_clr_security_level (MonoReflectionTypeHandle rfield, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (rfield, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -5250,7 +5250,7 @@ ves_icall_MonoField_get_core_clr_security_level (MonoReflectionField *rfield) ICALL_EXPORT int ves_icall_MonoMethod_get_core_clr_security_level (MonoReflectionMethodHandle rfield, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *method = MONO_HANDLE_GETVAL (rfield, method); return mono_security_core_clr_method_level (method, TRUE); } @@ -5258,7 +5258,7 @@ ves_icall_MonoMethod_get_core_clr_security_level (MonoReflectionMethodHandle rfi ICALL_EXPORT MonoStringHandle ves_icall_System_Reflection_Assembly_get_fullName (MonoReflectionAssemblyHandle assembly, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (assembly); MonoAssembly *mass = MONO_HANDLE_GETVAL (assembly, assembly); gchar *name; @@ -5285,7 +5285,7 @@ ves_icall_System_Reflection_Assembly_InternalGetAssemblyName (MonoStringHandle f MonoImage *image; char *dirname; - mono_error_init (error); + error_init (error); filename = mono_string_handle_to_utf8 (fname, error); return_if_nok (error); @@ -5337,7 +5337,7 @@ ICALL_EXPORT MonoBoolean ves_icall_System_Reflection_Assembly_LoadPermissions (MonoReflectionAssemblyHandle assembly_h, char **minimum, guint32 *minLength, char **optional, guint32 *optLength, char **refused, guint32 *refLength, MonoError *error) { - mono_error_init (error); + error_init (error); MonoAssembly *assembly = MONO_HANDLE_GETVAL (assembly_h, assembly); MonoBoolean result = FALSE; MonoDeclSecurityEntry entry; @@ -5382,7 +5382,7 @@ mono_module_type_is_visible (MonoTableInfo *tdef, MonoImage *image, int type) static void image_get_type (MonoDomain *domain, MonoImage *image, MonoTableInfo *tdef, int table_idx, int count, MonoArrayHandle res, MonoArrayHandle exceptions, MonoBoolean exportedOnly, MonoError *error) { - mono_error_init (error); + error_init (error); HANDLE_FUNCTION_ENTER (); MonoError klass_error; MonoClass *klass = mono_class_get_checked (image, table_idx | MONO_TOKEN_TYPE_DEF, &klass_error); @@ -5405,7 +5405,7 @@ mono_module_get_types (MonoDomain *domain, MonoImage *image, MonoArrayHandleOut MonoTableInfo *tdef = &image->tables [MONO_TABLE_TYPEDEF]; int i, count; - mono_error_init (error); + error_init (error); /* we start the count from 1 because we skip the special type <Module> */ if (exportedOnly) { @@ -5437,7 +5437,7 @@ static void append_module_types (MonoDomain *domain, MonoArrayHandleOut res, MonoArrayHandleOut exceptions, MonoImage *image, MonoBoolean exportedOnly, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoArrayHandle ex2 = MONO_HANDLE_NEW (MonoArray, NULL); MonoArrayHandle res2 = mono_module_get_types (domain, image, ex2, exportedOnly, error); if (!is_ok (error)) @@ -5475,7 +5475,7 @@ set_class_failure_in_array (MonoArrayHandle exl, int i, MonoClass *klass) { HANDLE_FUNCTION_ENTER (); MonoError unboxed_error; - mono_error_init (&unboxed_error); + error_init (&unboxed_error); mono_error_set_for_class_failure (&unboxed_error, klass); MonoExceptionHandle exc = MONO_HANDLE_NEW (MonoException, mono_error_convert_to_exception (&unboxed_error)); @@ -5668,7 +5668,7 @@ ves_icall_System_Reflection_Module_GetMDStreamVersion (MonoImage *image, MonoErr ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_Module_InternalGetTypes (MonoReflectionModuleHandle module, MonoError *error) { - mono_error_init (error); + error_init (error); MonoImage *image = MONO_HANDLE_GETVAL (module, image); MonoDomain *domain = MONO_HANDLE_DOMAIN (module); @@ -5760,7 +5760,7 @@ static MonoType* module_resolve_type_token (MonoImage *image, guint32 token, MonoArrayHandle type_args, MonoArrayHandle method_args, MonoResolveTokenError *resolve_error, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *result = NULL; MonoClass *klass; int table = mono_metadata_token_table (token); @@ -5821,7 +5821,7 @@ static MonoMethod* module_resolve_method_token (MonoImage *image, guint32 token, MonoArrayHandle type_args, MonoArrayHandle method_args, MonoResolveTokenError *resolve_error, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoMethod *method = NULL; int table = mono_metadata_token_table (token); int index = mono_metadata_token_index (token); @@ -5920,7 +5920,7 @@ module_resolve_field_token (MonoImage *image, guint32 token, MonoArrayHandle typ MonoGenericContext context; MonoClassField *field = NULL; - mono_error_init (error); + error_init (error); *resolve_error = ResolveTokenError_Other; /* Validate token */ @@ -5976,7 +5976,7 @@ ves_icall_System_Reflection_Module_ResolveMemberToken (MonoImage *image, guint32 { int table = mono_metadata_token_table (token); - mono_error_init (merror); + error_init (merror); *error = ResolveTokenError_Other; switch (table) { @@ -6034,7 +6034,7 @@ ves_icall_System_Reflection_Module_ResolveMemberToken (MonoImage *image, guint32 ICALL_EXPORT MonoArrayHandle ves_icall_System_Reflection_Module_ResolveSignature (MonoImage *image, guint32 token, MonoResolveTokenError *resolve_error, MonoError *error) { - mono_error_init (error); + error_init (error); int table = mono_metadata_token_table (token); int idx = mono_metadata_token_index (token); MonoTableInfo *tables = image->tables; @@ -6071,7 +6071,7 @@ ves_icall_System_Reflection_Module_ResolveSignature (MonoImage *image, guint32 t ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_IsArray (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoBoolean res = !type->byref && (type->type == MONO_TYPE_ARRAY || type->type == MONO_TYPE_SZARRAY); @@ -6084,7 +6084,7 @@ check_for_invalid_type (MonoClass *klass, MonoError *error) { char *name; - mono_error_init (error); + error_init (error); if (klass->byval_arg.type != MONO_TYPE_TYPEDBYREF) return; @@ -6095,7 +6095,7 @@ check_for_invalid_type (MonoClass *klass, MonoError *error) ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeType_make_array_type (MonoReflectionTypeHandle ref_type, int rank, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -6116,7 +6116,7 @@ ves_icall_RuntimeType_make_array_type (MonoReflectionTypeHandle ref_type, int ra ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeType_make_byref_type (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -6135,7 +6135,7 @@ ves_icall_RuntimeType_make_byref_type (MonoReflectionTypeHandle ref_type, MonoEr ICALL_EXPORT MonoReflectionTypeHandle ves_icall_RuntimeType_MakePointerType (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -6344,7 +6344,7 @@ ves_icall_System_Buffer_BlockCopyInternal (MonoArray *src, gint32 src_offset, Mo ICALL_EXPORT MonoObjectHandle ves_icall_Remoting_RealProxy_GetTransparentProxy (MonoObjectHandle this_obj, MonoStringHandle class_name, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (this_obj); MonoRealProxyHandle rp = MONO_HANDLE_CAST (MonoRealProxy, this_obj); @@ -7180,7 +7180,7 @@ ves_icall_System_Web_Util_ICalls_get_machine_install_dir (void) ICALL_EXPORT gboolean ves_icall_get_resources_ptr (MonoReflectionAssemblyHandle assembly, gpointer *result, gint32 *size, MonoError *error) { - mono_error_init (error); + error_init (error); MonoPEResourceDataEntry *entry; MonoImage *image; @@ -7245,7 +7245,7 @@ ves_icall_System_Diagnostics_DefaultTraceListener_WriteWindowsDebugString (MonoS ICALL_EXPORT MonoObjectHandle ves_icall_System_Activator_CreateInstanceInternal (MonoReflectionTypeHandle ref_type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (ref_type); MonoType *type = MONO_HANDLE_GETVAL (ref_type, type); MonoClass *klass = mono_class_from_mono_type (type); @@ -7264,7 +7264,7 @@ ves_icall_System_Activator_CreateInstanceInternal (MonoReflectionTypeHandle ref_ ICALL_EXPORT MonoReflectionMethodHandle ves_icall_MonoMethod_get_base_method (MonoReflectionMethodHandle m, gboolean definition, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *method = MONO_HANDLE_GETVAL (m, method); MonoMethod *base = mono_method_get_base_method (method, definition, error); @@ -7278,7 +7278,7 @@ ves_icall_MonoMethod_get_base_method (MonoReflectionMethodHandle m, gboolean def ICALL_EXPORT MonoStringHandle ves_icall_MonoMethod_get_name (MonoReflectionMethodHandle m, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *method = MONO_HANDLE_GETVAL (m, method); MonoStringHandle s = mono_string_new_handle (MONO_HANDLE_DOMAIN (m), method->name, error); @@ -7456,7 +7456,7 @@ prelink_method (MonoMethod *method, MonoError *error) { const char *exc_class, *exc_arg; - mono_error_init (error); + error_init (error); if (!(method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL)) return; mono_lookup_pinvoke_call (method, &exc_class, &exc_arg); @@ -7517,7 +7517,7 @@ static gboolean add_modifier_to_array (MonoDomain *domain, MonoImage *image, MonoCustomMod *modifier, MonoArrayHandle dest, int dest_idx, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoClass *klass = mono_class_get_checked (image, modifier->token, error); if (!is_ok (error)) goto leave; @@ -7541,7 +7541,7 @@ type_array_from_modifiers (MonoImage *image, MonoType *type, int optional, MonoE int i, count = 0; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); for (i = 0; i < type->num_mods; ++i) { if ((optional && !type->modifiers [i].required) || (!optional && type->modifiers [i].required)) count++; @@ -7568,7 +7568,7 @@ fail: ICALL_EXPORT MonoArrayHandle ves_icall_ParameterInfo_GetTypeModifiers (MonoReflectionParameterHandle param, MonoBoolean optional, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionTypeHandle rt = MONO_HANDLE_NEW (MonoReflectionType, NULL); MONO_HANDLE_GET (rt, param, ClassImpl); MonoType *type = MONO_HANDLE_GETVAL (rt, type); @@ -7622,7 +7622,7 @@ get_property_type (MonoProperty *prop) ICALL_EXPORT MonoArrayHandle ves_icall_MonoPropertyInfo_GetTypeModifiers (MonoReflectionPropertyHandle property, MonoBoolean optional, MonoError *error) { - mono_error_init (error); + error_init (error); MonoProperty *prop = MONO_HANDLE_GETVAL (property, property); MonoClass *klass = MONO_HANDLE_GETVAL (property, klass); MonoType *type = get_property_type (prop); @@ -7747,7 +7747,7 @@ ves_icall_Mono_Runtime_GetDisplayName (MonoError *error) char *info; MonoStringHandle display_name; - mono_error_init (error); + error_init (error); info = mono_get_runtime_callbacks ()->get_runtime_build_info (); display_name = mono_string_new_handle (mono_domain_get (), info, error); g_free (info); @@ -8542,7 +8542,7 @@ mono_create_icall_signature (const char *sigstr) res = mono_metadata_signature_alloc (corlib, len - 1); res->pinvoke = 1; -#ifdef HOST_WIN32 +#ifdef TARGET_WIN32 /* * Under windows, the default pinvoke calling convention is STDCALL but * we need CDECL. diff --git a/mono/metadata/image.c b/mono/metadata/image.c index c9b9081966c..f494a57f147 100644 --- a/mono/metadata/image.c +++ b/mono/metadata/image.c @@ -691,7 +691,7 @@ mono_image_load_module_checked (MonoImage *image, int idx, MonoError *error) GList *list_iter, *valid_modules = NULL; MonoImageOpenStatus status; - mono_error_init (error); + error_init (error); if ((image->module_count == 0) || (idx > image->module_count || idx <= 0)) return NULL; @@ -2347,7 +2347,7 @@ mono_image_load_file_for_image_checked (MonoImage *image, int fileidx, MonoError const char *fname; guint32 fname_id; - mono_error_init (error); + error_init (error); if (fileidx < 1 || fileidx > t->rows) return NULL; diff --git a/mono/metadata/loader.c b/mono/metadata/loader.c index 0309ce8404e..a2d671c6839 100644 --- a/mono/metadata/loader.c +++ b/mono/metadata/loader.c @@ -185,7 +185,7 @@ field_from_memberref (MonoImage *image, guint32 token, MonoClass **retklass, const char *ptr; guint32 idx = mono_metadata_token_index (token); - mono_error_init (error); + error_init (error); mono_metadata_decode_row (&tables [MONO_TABLE_MEMBERREF], idx-1, cols, MONO_MEMBERREF_SIZE); nindex = cols [MONO_MEMBERREF_CLASS] >> MONO_MEMBERREF_PARENT_BITS; @@ -274,7 +274,7 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk guint32 type; MonoClassField *field; - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { MonoClassField *result; @@ -360,7 +360,7 @@ find_method_in_class (MonoClass *klass, const char *name, const char *qname, con int i; /* Search directly in the metadata to avoid calling setup_methods () */ - mono_error_init (error); + error_init (error); /* FIXME: !mono_class_is_ginst (from_class) condition causes test failures. */ if (klass->type_token && !image_is_dynamic (klass->image) && !klass->methods && !klass->rank && klass == from_class && !mono_class_is_ginst (from_class)) { @@ -448,7 +448,7 @@ find_method (MonoClass *in_class, MonoClass *ic, const char* name, MonoMethodSig MonoMethod *result = NULL; MonoClass *initial_class = in_class; - mono_error_init (error); + error_init (error); is_interface = MONO_CLASS_IS_INTERFACE (in_class); if (ic) { @@ -530,7 +530,7 @@ inflate_generic_signature_checked (MonoImage *image, MonoMethodSignature *sig, M gboolean is_open; int i; - mono_error_init (error); + error_init (error); if (!context) return sig; @@ -608,7 +608,7 @@ inflate_generic_header (MonoMethodHeader *header, MonoGenericContext *context, M res->is_transient = TRUE; - mono_error_init (error); + error_init (error); for (int i = 0; i < header->num_locals; ++i) { res->locals [i] = mono_class_inflate_generic_type_checked (header->locals [i], context, error); @@ -655,7 +655,7 @@ mono_method_get_signature_checked (MonoMethod *method, MonoImage *image, guint32 MonoMethodSignature *sig; const char *ptr; - mono_error_init (error); + error_init (error); /* !table is for wrappers: we should really assign their own token to them */ if (!table || table == MONO_TABLE_METHOD) @@ -776,7 +776,7 @@ method_from_memberref (MonoImage *image, guint32 idx, MonoGenericContext *typesp MonoMethodSignature *sig; const char *ptr; - mono_error_init (error); + error_init (error); mono_metadata_decode_row (&tables [MONO_TABLE_MEMBERREF], idx-1, cols, 3); nindex = cols [MONO_MEMBERREF_CLASS] >> MONO_MEMBERREF_PARENT_BITS; @@ -905,7 +905,7 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i guint32 cols [MONO_METHODSPEC_SIZE]; guint32 token, nindex, param_count; - mono_error_init (error); + error_init (error); mono_metadata_decode_row (&tables [MONO_TABLE_METHODSPEC], idx - 1, cols, MONO_METHODSPEC_SIZE); token = cols [MONO_METHODSPEC_METHOD]; @@ -1594,7 +1594,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, const char *sig = NULL; guint32 cols [MONO_TYPEDEF_SIZE]; - mono_error_init (error); + error_init (error); if (image_is_dynamic (image)) { MonoClass *handle_class; @@ -1735,7 +1735,7 @@ mono_get_method_checked (MonoImage *image, guint32 token, MonoClass *klass, Mono /* We do everything inside the lock to prevent creation races */ - mono_error_init (error); + error_init (error); mono_image_lock (image); @@ -1791,7 +1791,7 @@ get_method_constrained (MonoImage *image, MonoMethod *method, MonoClass *constra MonoGenericContext *method_context = NULL; MonoMethodSignature *sig, *original_sig; - mono_error_init (error); + error_init (error); mono_class_init (constrained_class); original_sig = sig = mono_method_signature_checked (method, error); @@ -1873,7 +1873,7 @@ mono_get_method_constrained (MonoImage *image, guint32 token, MonoClass *constra MonoMethod * mono_get_method_constrained_checked (MonoImage *image, guint32 token, MonoClass *constrained_class, MonoGenericContext *context, MonoMethod **cil_method, MonoError *error) { - mono_error_init (error); + error_init (error); *cil_method = mono_get_method_from_token (image, token, NULL, context, NULL, error); if (!*cil_method) @@ -2345,7 +2345,7 @@ mono_method_signature_checked (MonoMethod *m, MonoError *error) /* We need memory barriers below because of the double-checked locking pattern */ - mono_error_init (error); + error_init (error); if (m->signature) return m->signature; @@ -2436,7 +2436,7 @@ mono_method_signature_checked (MonoMethod *m, MonoError *error) } if (m->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) { signature->pinvoke = 1; -#ifdef HOST_WIN32 +#ifdef TARGET_WIN32 /* * On Windows the default pinvoke calling convention is STDCALL but * we need CDECL since this is actually an icall. @@ -2534,7 +2534,7 @@ mono_method_get_header_checked (MonoMethod *method, MonoError *error) gpointer loc; MonoGenericContainer *container; - mono_error_init (error); + error_init (error); img = method->klass->image; if ((method->flags & METHOD_ATTRIBUTE_ABSTRACT) || (method->iflags & METHOD_IMPL_ATTRIBUTE_RUNTIME) || (method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) || (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL)) { diff --git a/mono/metadata/locales.c b/mono/metadata/locales.c index 2adb0d60650..113fe1f2136 100644 --- a/mono/metadata/locales.c +++ b/mono/metadata/locales.c @@ -97,7 +97,7 @@ create_group_sizes_array (const gint *gs, gint ml, MonoError *error) MonoArray *ret; int i, len = 0; - mono_error_init (error); + error_init (error); for (i = 0; i < ml; i++) { if (gs [i] == -1) @@ -122,7 +122,7 @@ create_names_array_idx (const guint16 *names, int ml, MonoError *error) MonoDomain *domain; int i; - mono_error_init (error); + error_init (error); if (names == NULL) return NULL; @@ -145,7 +145,7 @@ create_names_array_idx_dynamic (const guint16 *names, int ml, MonoError *error) MonoDomain *domain; int i, len = 0; - mono_error_init (error); + error_init (error); if (names == NULL) return NULL; @@ -329,7 +329,7 @@ construct_culture (MonoCultureInfo *this_obj, const CultureInfoEntry *ci, MonoEr { MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); this_obj->lcid = ci->lcid; MONO_OBJECT_SETREF (this_obj, name, mono_string_new (domain, idx2string (ci->name))); diff --git a/mono/metadata/marshal.c b/mono/metadata/marshal.c index 6020bf50eb4..1545e1e19ba 100644 --- a/mono/metadata/marshal.c +++ b/mono/metadata/marshal.c @@ -242,6 +242,14 @@ register_icall (gpointer func, const char *name, const char *sigstr, gboolean no mono_register_jit_icall (func, name, sig, no_wrapper); } +static void +register_icall_no_wrapper (gpointer func, const char *name, const char *sigstr) +{ + MonoMethodSignature *sig = mono_create_icall_signature (sigstr); + + mono_register_jit_icall (func, name, sig, TRUE); +} + MonoMethodSignature* mono_signature_no_pinvoke (MonoMethod *method) { @@ -335,7 +343,7 @@ mono_marshal_init (void) register_icall (mono_string_to_byvalstr, "mono_string_to_byvalstr", "void ptr ptr int32", FALSE); register_icall (mono_string_to_byvalwstr, "mono_string_to_byvalwstr", "void ptr ptr int32", FALSE); register_icall (g_free, "g_free", "void ptr", FALSE); - register_icall (mono_object_isinst_icall, "mono_object_isinst_icall", "object object ptr", FALSE); + register_icall_no_wrapper (mono_object_isinst_icall, "mono_object_isinst_icall", "object object ptr"); register_icall (mono_struct_delete_old, "mono_struct_delete_old", "void ptr ptr", FALSE); register_icall (mono_delegate_begin_invoke, "mono_delegate_begin_invoke", "object object ptr", FALSE); register_icall (mono_delegate_end_invoke, "mono_delegate_end_invoke", "object object ptr", FALSE); @@ -426,7 +434,9 @@ mono_delegate_to_ftnptr (MonoDelegate *delegate) target_handle = mono_gchandle_new_weakref (delegate->target, FALSE); } - wrapper = mono_marshal_get_managed_wrapper (method, klass, target_handle); + wrapper = mono_marshal_get_managed_wrapper (method, klass, target_handle, &error); + if (!is_ok (&error)) + goto fail; delegate->delegate_trampoline = mono_compile_method_checked (wrapper, &error); if (!is_ok (&error)) @@ -8659,9 +8669,8 @@ mono_marshal_set_callconv_from_modopt (MonoMethod *method, MonoMethodSignature * * If target_handle==0, the wrapper info will be a WrapperInfo structure. */ MonoMethod * -mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, uint32_t target_handle) +mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, uint32_t target_handle, MonoError *error) { - MonoError error; MonoMethodSignature *sig, *csig, *invoke_sig; MonoMethodBuilder *mb; MonoMethod *res, *invoke; @@ -8672,7 +8681,12 @@ mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, EmitMarshalContext m; g_assert (method != NULL); - g_assert (!(method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL)); + error_init (error); + + if (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) { + mono_error_set_invalid_program (error, "Failed because method (%s) marked PInvokeCallback (managed method) and extern (unmanaged) simultaneously.", mono_method_full_name (method, TRUE)); + return NULL; + } /* * FIXME: Should cache the method+delegate type pair, since the same method @@ -8726,8 +8740,8 @@ mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, * contents of the attribute without constructing it, as that might not be * possible when running in cross-compiling mode. */ - cinfo = mono_custom_attrs_from_class_checked (delegate_klass, &error); - mono_error_assert_ok (&error); + cinfo = mono_custom_attrs_from_class_checked (delegate_klass, error); + mono_error_assert_ok (error); attr = NULL; if (cinfo) { for (i = 0; i < cinfo->num_attrs; ++i) { @@ -9696,7 +9710,8 @@ get_virtual_stelemref_wrapper (int kind) mono_mb_emit_byte (mb, CEE_RET); break; - case STELEMREF_COMPLEX: + case STELEMREF_COMPLEX: { + int b_fast; /* <ldelema (bound check)> if (!value) @@ -9712,6 +9727,7 @@ get_virtual_stelemref_wrapper (int kind) */ aklass = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg); + vklass = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg); array_slot_addr = mono_mb_add_local (mb, &mono_defaults.object_class->this_arg); #if 0 @@ -9740,6 +9756,13 @@ get_virtual_stelemref_wrapper (int kind) /* aklass = array->vtable->klass->element_class */ load_array_class (mb, aklass); + /* vklass = value->vtable->klass */ + load_value_class (mb, vklass); + + /* fastpath */ + mono_mb_emit_ldloc (mb, vklass); + mono_mb_emit_ldloc (mb, aklass); + b_fast = mono_mb_emit_branch (mb, CEE_BEQ); /*if (mono_object_isinst (value, aklass)) */ mono_mb_emit_ldarg (mb, 2); @@ -9749,6 +9772,7 @@ get_virtual_stelemref_wrapper (int kind) /* do_store: */ mono_mb_patch_branch (mb, b1); + mono_mb_patch_branch (mb, b_fast); mono_mb_emit_ldloc (mb, array_slot_addr); mono_mb_emit_ldarg (mb, 2); mono_mb_emit_byte (mb, CEE_STIND_REF); @@ -9759,7 +9783,7 @@ get_virtual_stelemref_wrapper (int kind) mono_mb_emit_exception (mb, "ArrayTypeMismatchException", NULL); break; - + } case STELEMREF_SEALED_CLASS: /* <ldelema (bound check)> @@ -9782,7 +9806,6 @@ get_virtual_stelemref_wrapper (int kind) vklass = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg); array_slot_addr = mono_mb_add_local (mb, &mono_defaults.object_class->this_arg); - /* ldelema (implicit bound check) */ load_array_element_address (mb); mono_mb_emit_stloc (mb, array_slot_addr); @@ -9814,7 +9837,9 @@ get_virtual_stelemref_wrapper (int kind) mono_mb_emit_exception (mb, "ArrayTypeMismatchException", NULL); break; - case STELEMREF_CLASS: + case STELEMREF_CLASS: { + int b_fast; + /* the method: <ldelema (bound check)> @@ -9855,6 +9880,11 @@ get_virtual_stelemref_wrapper (int kind) /* vklass = value->vtable->klass */ load_value_class (mb, vklass); + /* fastpath */ + mono_mb_emit_ldloc (mb, vklass); + mono_mb_emit_ldloc (mb, aklass); + b_fast = mono_mb_emit_branch (mb, CEE_BEQ); + /*if (mono_object_isinst (value, aklass)) */ mono_mb_emit_ldarg (mb, 2); mono_mb_emit_ldloc (mb, aklass); @@ -9892,6 +9922,7 @@ get_virtual_stelemref_wrapper (int kind) /* do_store: */ mono_mb_patch_branch (mb, b1); + mono_mb_patch_branch (mb, b_fast); mono_mb_emit_ldloc (mb, array_slot_addr); mono_mb_emit_ldarg (mb, 2); mono_mb_emit_byte (mb, CEE_STIND_REF); @@ -9904,7 +9935,7 @@ get_virtual_stelemref_wrapper (int kind) mono_mb_emit_exception (mb, "ArrayTypeMismatchException", NULL); break; - + } case STELEMREF_INTERFACE: /*Mono *klass; MonoVTable *vt; @@ -10550,7 +10581,7 @@ mono_marshal_alloc (gulong size, MonoError *error) { gpointer res; - mono_error_init (error); + error_init (error); res = mono_marshal_alloc_co_task_mem (size); if (!res) @@ -10733,7 +10764,7 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi_len (char *ptr, { MonoError error; MonoString *result = NULL; - mono_error_init (&error); + error_init (&error); if (ptr == NULL) mono_error_set_argument_null (&error, "ptr", ""); else @@ -10772,7 +10803,7 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni_len (guint16 *pt MonoString *res = NULL; MonoDomain *domain = mono_domain_get (); - mono_error_init (&error); + error_init (&error); if (ptr == NULL) { res = NULL; @@ -10853,7 +10884,7 @@ ptr_to_structure (gpointer src, MonoObject *dst, MonoError *error) MonoMethod *method; gpointer pa [2]; - mono_error_init (error); + error_init (error); method = mono_marshal_get_ptr_to_struct (dst->vtable->klass); @@ -12081,7 +12112,7 @@ mono_icall_start (HandleStackMark *stackmark, MonoError *error) MonoThreadInfo *info = mono_thread_info_current (); mono_stack_mark_init (info, stackmark); - mono_error_init (error); + error_init (error); return info; } @@ -12089,5 +12120,6 @@ static void mono_icall_end (MonoThreadInfo *info, HandleStackMark *stackmark, MonoError *error) { mono_stack_mark_pop (info, stackmark); - mono_error_set_pending_exception (error); + if (G_UNLIKELY (!is_ok (error))) + mono_error_set_pending_exception (error); } diff --git a/mono/metadata/marshal.h b/mono/metadata/marshal.h index e00661b1b59..4b1c185f876 100644 --- a/mono/metadata/marshal.h +++ b/mono/metadata/marshal.h @@ -330,7 +330,7 @@ MonoMethodSignature* mono_marshal_get_string_ctor_signature (MonoMethod *method); MonoMethod * -mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, uint32_t this_loc); +mono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, uint32_t this_loc, MonoError *exernal_error); gpointer mono_marshal_get_vtfixup_ftnptr (MonoImage *image, guint32 token, guint16 type); diff --git a/mono/metadata/metadata-verify.c b/mono/metadata/metadata-verify.c index 9b4ca91bc75..554f5157d96 100644 --- a/mono/metadata/metadata-verify.c +++ b/mono/metadata/metadata-verify.c @@ -4055,7 +4055,7 @@ mono_verifier_verify_method_signature (MonoImage *image, guint32 offset, MonoErr { VerifyContext ctx; - mono_error_init (error); + error_init (error); if (!mono_verifier_is_enabled_for_image (image)) return TRUE; @@ -4245,7 +4245,7 @@ mono_verifier_verify_typeref_row (MonoImage *image, guint32 row, MonoError *erro MonoTableInfo *table = &image->tables [MONO_TABLE_TYPEREF]; guint32 data [MONO_TYPEREF_SIZE]; - mono_error_init (error); + error_init (error); if (!mono_verifier_is_enabled_for_image (image)) return TRUE; @@ -4288,7 +4288,7 @@ mono_verifier_verify_methodimpl_row (MonoImage *image, guint32 row, MonoError *e MonoTableInfo *table = &image->tables [MONO_TABLE_METHODIMPL]; guint32 data [MONO_METHODIMPL_SIZE]; - mono_error_init (error); + error_init (error); if (!mono_verifier_is_enabled_for_image (image)) return TRUE; @@ -4371,7 +4371,7 @@ mono_verifier_verify_method_header (MonoImage *image, guint32 offset, GSList **e gboolean mono_verifier_verify_method_signature (MonoImage *image, guint32 offset, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } @@ -4421,14 +4421,14 @@ mono_verifier_is_sig_compatible (MonoImage *image, MonoMethod *method, MonoMetho gboolean mono_verifier_verify_typeref_row (MonoImage *image, guint32 row, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } gboolean mono_verifier_verify_methodimpl_row (MonoImage *image, guint32 row, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } diff --git a/mono/metadata/metadata.c b/mono/metadata/metadata.c index 3d76585b5cf..545b917177b 100644 --- a/mono/metadata/metadata.c +++ b/mono/metadata/metadata.c @@ -1701,7 +1701,7 @@ mono_metadata_parse_type_internal (MonoImage *m, MonoGenericContainer *container int count = 0; // Number of mod arguments gboolean found; - mono_error_init (error); + error_init (error); /* * According to the spec, custom modifiers should come before the byref @@ -1944,7 +1944,7 @@ MonoMethodSignature* mono_metadata_parse_signature_checked (MonoImage *image, guint32 token, MonoError *error) { - mono_error_init (error); + error_init (error); MonoTableInfo *tables = image->tables; guint32 idx = mono_metadata_token_index (token); guint32 sig; @@ -2121,7 +2121,7 @@ mono_metadata_parse_method_signature_full (MonoImage *m, MonoGenericContainer *c guint32 gen_param_count = 0; gboolean is_open = FALSE; - mono_error_init (error); + error_init (error); if (*ptr & 0x10) gen_param_count = 1; @@ -3135,7 +3135,7 @@ mono_metadata_inflate_generic_inst (MonoGenericInst *ginst, MonoGenericContext * MonoGenericInst *nginst = NULL; int i, count = 0; - mono_error_init (error); + error_init (error); if (!ginst->is_open) return ginst; @@ -3167,7 +3167,7 @@ mono_metadata_parse_generic_inst (MonoImage *m, MonoGenericContainer *container, MonoGenericInst *ginst; int i; - mono_error_init (error); + error_init (error); type_argv = g_new0 (MonoType*, count); for (i = 0; i < count; i++) { @@ -3198,7 +3198,7 @@ do_mono_metadata_parse_generic_class (MonoType *type, MonoImage *m, MonoGenericC MonoType *gtype; int count; - mono_error_init (error); + error_init (error); // XXX how about transient? gtype = mono_metadata_parse_type_checked (m, NULL, 0, FALSE, ptr, &ptr, error); @@ -3294,7 +3294,7 @@ mono_metadata_parse_generic_param (MonoImage *m, MonoGenericContainer *generic_c if (rptr) *rptr = ptr; - mono_error_init (error); + error_init (error); generic_container = select_container (generic_container, type); if (!generic_container) { @@ -3368,7 +3368,7 @@ mono_metadata_get_shared_type (MonoType *type) static gboolean compare_type_literals (MonoImage *image, int class_type, int type_type, MonoError *error) { - mono_error_init (error); + error_init (error); /* byval_arg.type can be zero if we're decoding a type that references a class been loading. * See mcs/test/gtest-440. and #650936. @@ -3418,7 +3418,7 @@ compare_type_literals (MonoImage *image, int class_type, int type_type, MonoErro static gboolean verify_var_type_and_container (MonoImage *image, int var_type, MonoGenericContainer *container, MonoError *error) { - mono_error_init (error); + error_init (error); if (var_type == MONO_TYPE_MVAR) { if (!container->is_method) { //MVAR and a method container mono_error_set_bad_image (error, image, "MVAR parsed in a context without a method container"); @@ -3459,7 +3459,7 @@ static gboolean do_mono_metadata_parse_type (MonoType *type, MonoImage *m, MonoGenericContainer *container, gboolean transient, const char *ptr, const char **rptr, MonoError *error) { - mono_error_init (error); + error_init (error); type->type = (MonoTypeEnum)mono_metadata_decode_value (ptr, &ptr); @@ -3628,7 +3628,7 @@ parse_section_data (MonoImage *m, int *num_clauses, const unsigned char *ptr, Mo guint32 sect_data_len; MonoExceptionClause* clauses = NULL; - mono_error_init (error); + error_init (error); while (1) { /* align on 32-bit boundary */ @@ -3796,7 +3796,7 @@ mono_metadata_parse_mh_full (MonoImage *m, MonoGenericContainer *container, cons MonoTableInfo *t = &m->tables [MONO_TABLE_STANDALONESIG]; guint32 cols [MONO_STAND_ALONE_SIGNATURE_SIZE]; - mono_error_init (error); + error_init (error); if (!ptr) { mono_error_set_bad_image (error, m, "Method header with null pointer"); @@ -4334,7 +4334,7 @@ mono_metadata_interfaces_from_typedef_full (MonoImage *meta, guint32 index, Mono *interfaces = NULL; *count = 0; - mono_error_init (error); + error_init (error); if (!tdef->base) return TRUE; @@ -5690,7 +5690,7 @@ mono_type_create_from_typespec_checked (MonoImage *image, guint32 type_spec, Mon const char *ptr; MonoType *type, *type2; - mono_error_init (error); + error_init (error); mono_image_lock (image); type = (MonoType *)g_hash_table_lookup (image->typespec_cache, GUINT_TO_POINTER (type_spec)); @@ -6068,7 +6068,7 @@ method_from_method_def_or_ref (MonoImage *m, guint32 tok, MonoGenericContext *co MonoMethod *result = NULL; guint32 idx = tok >> MONO_METHODDEFORREF_BITS; - mono_error_init (error); + error_init (error); switch (tok & MONO_METHODDEFORREF_MASK) { case MONO_METHODDEFORREF_METHODDEF: @@ -6211,7 +6211,7 @@ get_constraints (MonoImage *image, int owner, MonoClass ***constraints, MonoGene GSList *cons = NULL, *tmp; MonoGenericContext *context = &container->context; - mono_error_init (error); + error_init (error); *constraints = NULL; found = 0; @@ -6303,7 +6303,7 @@ mono_metadata_load_generic_param_constraints_checked (MonoImage *image, guint32 { guint32 start_row, i, owner; - mono_error_init (error); + error_init (error); if (! (start_row = mono_metadata_get_generic_param_row (image, token, &owner))) return TRUE; @@ -6714,7 +6714,8 @@ mono_signature_explicit_this (MonoMethodSignature *sig) guint mono_aligned_addr_hash (gconstpointer ptr) { - return GPOINTER_TO_UINT (ptr) >> 3; + /* Same hashing we use for objects */ + return (GPOINTER_TO_UINT (ptr) >> 3) * 2654435761u; } /* diff --git a/mono/metadata/mono-basic-block.c b/mono/metadata/mono-basic-block.c index 5ccb938df9b..1241ea2c134 100644 --- a/mono/metadata/mono-basic-block.c +++ b/mono/metadata/mono-basic-block.c @@ -240,7 +240,7 @@ bb_split (MonoSimpleBasicBlock *first, MonoSimpleBasicBlock *hint, MonoSimpleBas { MonoSimpleBasicBlock *res, *bb = first; - mono_error_init (error); + error_init (error); if (bb_idx_is_contained (hint, target)) { first = hint; @@ -338,7 +338,7 @@ bb_formation_il_pass (const unsigned char *start, const unsigned char *end, Mono MonoSimpleBasicBlock *branch, *next, *current; const MonoOpcode *opcode; - mono_error_init (error); + error_init (error); current = bb; @@ -469,7 +469,7 @@ bb_formation_eh_pass (MonoMethodHeader *header, MonoSimpleBasicBlock *bb, MonoSi int i; int end = header->code_size; - mono_error_init (error); + error_init (error); /*We must split at all points to verify for targets in the middle of an instruction*/ for (i = 0; i < header->num_clauses; ++i) { @@ -527,7 +527,7 @@ mono_basic_block_split (MonoMethod *method, MonoError *error, MonoMethodHeader * MonoSimpleBasicBlock *bb, *root; const unsigned char *start, *end; - mono_error_init (error); + error_init (error); start = header->code; end = start + header->code_size; diff --git a/mono/metadata/mono-hash.c b/mono/metadata/mono-hash.c index 00f7afab0cc..9c6cdb44101 100644 --- a/mono/metadata/mono-hash.c +++ b/mono/metadata/mono-hash.c @@ -34,6 +34,8 @@ #include <mono/utils/checked-build.h> #include <mono/utils/mono-threads-coop.h> +int mono_g_hash_table_max_chain_length; + #ifdef HAVE_BOEHM_GC #define mg_new0(type,n) ((type *) GC_MALLOC(sizeof(type) * (n))) #define mg_new(type,n) ((type *) GC_MALLOC(sizeof(type) * (n))) @@ -44,49 +46,20 @@ #define mg_free(x) g_free(x) #endif -typedef struct _Slot Slot; - -struct _Slot { - MonoObject *key; - MonoObject *value; - Slot *next; -}; - -static gpointer KEYMARKER_REMOVED = &KEYMARKER_REMOVED; - struct _MonoGHashTable { GHashFunc hash_func; GEqualFunc key_equal_func; - Slot **table; + MonoObject **keys; + MonoObject **values; int table_size; int in_use; - int threshold; - int last_rehash; GDestroyNotify value_destroy_func, key_destroy_func; MonoGHashGCType gc_type; MonoGCRootSource source; const char *msg; }; -#ifdef HAVE_SGEN_GC -static MonoGCDescriptor table_hash_descr = MONO_GC_DESCRIPTOR_NULL; - -static void mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func, void *gc_data); -#endif - -static Slot* -new_slot (MonoGHashTable *hash) -{ - return mg_new (Slot, 1); -} - -static void -free_slot (MonoGHashTable *hash, Slot *slot) -{ - mg_free (slot); -} - #if UNUSED static gboolean test_prime (int x) @@ -107,7 +80,7 @@ static int calc_prime (int x) { int i; - + for (i = (x & (~1))-1; i< G_MAXINT32; i += 2) { if (test_prime (i)) return i; @@ -116,15 +89,67 @@ calc_prime (int x) } #endif +#define HASH_TABLE_MAX_LOAD_FACTOR 0.7f +/* We didn't really do compaction before, keep it lenient for now */ +#define HASH_TABLE_MIN_LOAD_FACTOR 0.05f +/* We triple the table size at rehash time, similar with previous implementation */ +#define HASH_TABLE_RESIZE_RATIO 3 + +static inline void mono_g_hash_table_key_store (MonoGHashTable *hash, int slot, MonoObject* key) +{ + MonoObject **key_addr = &hash->keys [slot]; + if (hash->gc_type & MONO_HASH_KEY_GC) + mono_gc_wbarrier_generic_store (key_addr, key); + else + *key_addr = key; +} + +static inline void mono_g_hash_table_value_store (MonoGHashTable *hash, int slot, MonoObject* value) +{ + MonoObject **value_addr = &hash->values [slot]; + if (hash->gc_type & MONO_HASH_VALUE_GC) + mono_gc_wbarrier_generic_store (value_addr, value); + else + *value_addr = value; +} + +/* Returns position of key or of an empty slot for it */ +static inline int mono_g_hash_table_find_slot (MonoGHashTable *hash, const MonoObject *key) +{ + guint start = ((*hash->hash_func) (key)) % hash->table_size; + guint i = start; + + if (hash->key_equal_func) { + GEqualFunc equal = hash->key_equal_func; + + while (hash->keys [i] && !(*equal) (hash->keys [i], key)) { + i++; + if (i == hash->table_size) + i = 0; + } + } else { + while (hash->keys [i] && hash->keys [i] != key) { + i++; + if (i == hash->table_size) + i = 0; + } + } + + if (i > start && (i - start) > mono_g_hash_table_max_chain_length) + mono_g_hash_table_max_chain_length = i - start; + else if (i < start && (hash->table_size - (start - i)) > mono_g_hash_table_max_chain_length) + mono_g_hash_table_max_chain_length = hash->table_size - (start - i); + return i; +} + + MonoGHashTable * mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, const char *msg) { MonoGHashTable *hash; - if (hash_func == NULL) + if (!hash_func) hash_func = g_direct_hash; - if (key_equal_func == NULL) - key_equal_func = g_direct_equal; #ifdef HAVE_SGEN_GC hash = mg_new0 (MonoGHashTable, 1); @@ -136,8 +161,8 @@ mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, Mono hash->key_equal_func = key_equal_func; hash->table_size = g_spaced_primes_closest (1); - hash->table = mg_new0 (Slot *, hash->table_size); - hash->last_rehash = hash->table_size; + hash->keys = mg_new0 (MonoObject*, hash->table_size); + hash->values = mg_new0 (MonoObject*, hash->table_size); hash->gc_type = type; hash->source = source; @@ -147,13 +172,10 @@ mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, Mono g_error ("wrong type for gc hashtable"); #ifdef HAVE_SGEN_GC - /* - * We use a user defined marking function to avoid having to register a GC root for - * each hash node. - */ - if (!table_hash_descr) - table_hash_descr = mono_gc_make_root_descr_user (mono_g_hash_mark); - mono_gc_register_root_wbarrier ((char*)hash, sizeof (MonoGHashTable), table_hash_descr, source, msg); + if (hash->gc_type & MONO_HASH_KEY_GC) + mono_gc_register_root_wbarrier ((char*)hash->keys, sizeof (MonoObject*) * hash->table_size, mono_gc_make_vector_descr (), hash->source, hash->msg); + if (hash->gc_type & MONO_HASH_VALUE_GC) + mono_gc_register_root_wbarrier ((char*)hash->values, sizeof (MonoObject*) * hash->table_size, mono_gc_make_vector_descr (), hash->source, hash->msg); #endif return hash; @@ -162,7 +184,8 @@ mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, Mono typedef struct { MonoGHashTable *hash; int new_size; - Slot **table; + MonoObject **keys; + MonoObject **values; } RehashData; static void* @@ -171,28 +194,24 @@ do_rehash (void *_data) RehashData *data = (RehashData *)_data; MonoGHashTable *hash = data->hash; int current_size, i; - Slot **table; + MonoObject **old_keys; + MonoObject **old_values; - /* printf ("Resizing diff=%d slots=%d\n", hash->in_use - hash->last_rehash, hash->table_size); */ - hash->last_rehash = hash->table_size; current_size = hash->table_size; hash->table_size = data->new_size; - /* printf ("New size: %d\n", hash->table_size); */ - table = hash->table; - hash->table = data->table; - - for (i = 0; i < current_size; i++){ - Slot *s, *next; - - for (s = table [i]; s != NULL; s = next){ - guint hashcode = ((*hash->hash_func) (s->key)) % hash->table_size; - next = s->next; - - s->next = hash->table [hashcode]; - hash->table [hashcode] = s; + old_keys = hash->keys; + old_values = hash->values; + hash->keys = data->keys; + hash->values = data->values; + + for (i = 0; i < current_size; i++) { + if (old_keys [i]) { + int slot = mono_g_hash_table_find_slot (hash, old_keys [i]); + mono_g_hash_table_key_store (hash, slot, old_keys [i]); + mono_g_hash_table_value_store (hash, slot, old_values [i]); } } - return table; + return NULL; } static void @@ -200,35 +219,48 @@ rehash (MonoGHashTable *hash) { MONO_REQ_GC_UNSAFE_MODE; //we must run in unsafe mode to make rehash safe - int diff = ABS (hash->last_rehash - hash->in_use); RehashData data; - void *old_table G_GNUC_UNUSED; /* unused on Boehm */ - - /* These are the factors to play with to change the rehashing strategy */ - /* I played with them with a large range, and could not really get */ - /* something that was too good, maybe the tests are not that great */ - if (!(diff * 0.75 > hash->table_size * 2)) - return; + void *old_keys G_GNUC_UNUSED = hash->keys; /* unused on Boehm */ + void *old_values G_GNUC_UNUSED = hash->values; /* unused on Boehm */ data.hash = hash; - data.new_size = g_spaced_primes_closest (hash->in_use); - data.table = mg_new0 (Slot *, data.new_size); + /* + * Rehash to a size that can fit the current elements. Rehash relative to in_use + * to allow also for compaction. + */ + data.new_size = g_spaced_primes_closest (hash->in_use / HASH_TABLE_MAX_LOAD_FACTOR * HASH_TABLE_RESIZE_RATIO); + data.keys = mg_new0 (MonoObject*, data.new_size); + data.values = mg_new0 (MonoObject*, data.new_size); + +#ifdef HAVE_SGEN_GC + if (hash->gc_type & MONO_HASH_KEY_GC) + mono_gc_register_root_wbarrier ((char*)data.keys, sizeof (MonoObject*) * data.new_size, mono_gc_make_vector_descr (), hash->source, hash->msg); + if (hash->gc_type & MONO_HASH_VALUE_GC) + mono_gc_register_root_wbarrier ((char*)data.values, sizeof (MonoObject*) * data.new_size, mono_gc_make_vector_descr (), hash->source, hash->msg); +#endif if (!mono_threads_is_coop_enabled ()) { - old_table = mono_gc_invoke_with_gc_lock (do_rehash, &data); + mono_gc_invoke_with_gc_lock (do_rehash, &data); } else { /* We cannot be preempted */ - old_table = do_rehash (&data); + do_rehash (&data); } - mg_free (old_table); +#ifdef HAVE_SGEN_GC + if (hash->gc_type & MONO_HASH_KEY_GC) + mono_gc_deregister_root ((char*)old_keys); + if (hash->gc_type & MONO_HASH_VALUE_GC) + mono_gc_deregister_root ((char*)old_values); +#endif + mg_free (old_keys); + mg_free (old_values); } guint mono_g_hash_table_size (MonoGHashTable *hash) { g_return_val_if_fail (hash != NULL, 0); - + return hash->in_use; } @@ -236,7 +268,7 @@ gpointer mono_g_hash_table_lookup (MonoGHashTable *hash, gconstpointer key) { gpointer orig_key, value; - + if (mono_g_hash_table_lookup_extended (hash, key, &orig_key, &value)) return value; else @@ -246,22 +278,18 @@ mono_g_hash_table_lookup (MonoGHashTable *hash, gconstpointer key) gboolean mono_g_hash_table_lookup_extended (MonoGHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value) { - GEqualFunc equal; - Slot *s; - guint hashcode; - + int slot; + g_return_val_if_fail (hash != NULL, FALSE); - equal = hash->key_equal_func; - - hashcode = ((*hash->hash_func) (key)) % hash->table_size; - - for (s = hash->table [hashcode]; s != NULL; s = s->next){ - if ((*equal)(s->key, key)){ - *orig_key = s->key; - *value = s->value; - return TRUE; - } + + slot = mono_g_hash_table_find_slot (hash, key); + + if (hash->keys [slot]) { + *orig_key = hash->keys [slot]; + *value = hash->values [slot]; + return TRUE; } + return FALSE; } @@ -269,15 +297,13 @@ void mono_g_hash_table_foreach (MonoGHashTable *hash, GHFunc func, gpointer user_data) { int i; - + g_return_if_fail (hash != NULL); g_return_if_fail (func != NULL); - for (i = 0; i < hash->table_size; i++){ - Slot *s; - - for (s = hash->table [i]; s != NULL; s = s->next) - (*func)(s->key, s->value, user_data); + for (i = 0; i < hash->table_size; i++) { + if (hash->keys [i]) + (*func)(hash->keys [i], hash->values [i], user_data); } } @@ -285,16 +311,13 @@ gpointer mono_g_hash_table_find (MonoGHashTable *hash, GHRFunc predicate, gpointer user_data) { int i; - + g_return_val_if_fail (hash != NULL, NULL); g_return_val_if_fail (predicate != NULL, NULL); - for (i = 0; i < hash->table_size; i++){ - Slot *s; - - for (s = hash->table [i]; s != NULL; s = s->next) - if ((*predicate)(s->key, s->value, user_data)) - return s->value; + for (i = 0; i < hash->table_size; i++) { + if (hash->keys [i] && (*predicate)(hash->keys [i], hash->values [i], user_data)) + return hash->values [i]; } return NULL; } @@ -302,32 +325,53 @@ mono_g_hash_table_find (MonoGHashTable *hash, GHRFunc predicate, gpointer user_d gboolean mono_g_hash_table_remove (MonoGHashTable *hash, gconstpointer key) { - GEqualFunc equal; - Slot *s, *last; - guint hashcode; - + int slot, last_clear_slot; + g_return_val_if_fail (hash != NULL, FALSE); - equal = hash->key_equal_func; - - hashcode = ((*hash->hash_func)(key)) % hash->table_size; - last = NULL; - for (s = hash->table [hashcode]; s != NULL; s = s->next){ - if ((*equal)(s->key, key)){ - if (hash->key_destroy_func != NULL) - (*hash->key_destroy_func)(s->key); - if (hash->value_destroy_func != NULL) - (*hash->value_destroy_func)(s->value); - if (last == NULL) - hash->table [hashcode] = s->next; - else - last->next = s->next; - free_slot (hash, s); - hash->in_use--; - return TRUE; + slot = mono_g_hash_table_find_slot (hash, key); + + if (!hash->keys [slot]) + return FALSE; + + if (hash->key_destroy_func) + (*hash->key_destroy_func)(hash->keys [slot]); + hash->keys [slot] = NULL; + if (hash->value_destroy_func) + (*hash->value_destroy_func)(hash->values [slot]); + hash->values [slot] = NULL; + hash->in_use--; + + /* + * When we insert in the hashtable, if the required position is occupied we + * consecutively try out following positions. In order to be able to find + * if a key exists or not in the array (without traversing the entire hash) + * we maintain the constraint that there can be no free slots between two + * entries that are hashed to the same position. This means that, at search + * time, when we encounter a free slot we can stop looking for collissions. + * Similarly, at remove time, we need to shift all following slots to their + * normal slot, until we reach an empty slot. + */ + last_clear_slot = slot; + slot = (slot + 1) % hash->table_size; + while (hash->keys [slot]) { + guint hashcode = ((*hash->hash_func)(hash->keys [slot])) % hash->table_size; + /* + * We try to move the current element to last_clear_slot, but only if + * it brings it closer to its normal position (hashcode) + */ + if ((last_clear_slot < slot && (hashcode > slot || hashcode <= last_clear_slot)) || + (last_clear_slot > slot && (hashcode > slot && hashcode <= last_clear_slot))) { + mono_g_hash_table_key_store (hash, last_clear_slot, hash->keys [slot]); + mono_g_hash_table_value_store (hash, last_clear_slot, hash->values [slot]); + hash->keys [slot] = NULL; + hash->values [slot] = NULL; + last_clear_slot = slot; } - last = s; + slot++; + if (slot == hash->table_size) + slot = 0; } - return FALSE; + return TRUE; } guint @@ -335,40 +379,19 @@ mono_g_hash_table_foreach_remove (MonoGHashTable *hash, GHRFunc func, gpointer u { int i; int count = 0; - + g_return_val_if_fail (hash != NULL, 0); g_return_val_if_fail (func != NULL, 0); - for (i = 0; i < hash->table_size; i++){ - Slot *s, *last; - - last = NULL; - for (s = hash->table [i]; s != NULL; ){ - if ((*func)(s->key, s->value, user_data)){ - Slot *n; - - if (hash->key_destroy_func != NULL) - (*hash->key_destroy_func)(s->key); - if (hash->value_destroy_func != NULL) - (*hash->value_destroy_func)(s->value); - if (last == NULL){ - hash->table [i] = s->next; - n = s->next; - } else { - last->next = s->next; - n = last->next; - } - free_slot (hash, s); - hash->in_use--; - count++; - s = n; - } else { - last = s; - s = s->next; - } + for (i = 0; i < hash->table_size; i++) { + if (hash->keys [i] && (*func)(hash->keys [i], hash->values [i], user_data)) { + mono_g_hash_table_remove (hash, hash->keys [i]); + count++; + /* Retry current slot in case the removal shifted elements */ + i--; } } - if (count > 0) + if (hash->in_use < hash->table_size * HASH_TABLE_MIN_LOAD_FACTOR) rehash (hash); return count; } @@ -377,27 +400,26 @@ void mono_g_hash_table_destroy (MonoGHashTable *hash) { int i; - + g_return_if_fail (hash != NULL); #ifdef HAVE_SGEN_GC - mono_gc_deregister_root ((char*)hash); + if (hash->gc_type & MONO_HASH_KEY_GC) + mono_gc_deregister_root ((char*)hash->keys); + if (hash->gc_type & MONO_HASH_VALUE_GC) + mono_gc_deregister_root ((char*)hash->values); #endif - for (i = 0; i < hash->table_size; i++){ - Slot *s, *next; - - for (s = hash->table [i]; s != NULL; s = next){ - next = s->next; - - if (hash->key_destroy_func != NULL) - (*hash->key_destroy_func)(s->key); - if (hash->value_destroy_func != NULL) - (*hash->value_destroy_func)(s->value); - free_slot (hash, s); + for (i = 0; i < hash->table_size; i++) { + if (hash->keys [i]) { + if (hash->key_destroy_func) + (*hash->key_destroy_func)(hash->keys [i]); + if (hash->value_destroy_func) + (*hash->value_destroy_func)(hash->values [i]); } } - mg_free (hash->table); + mg_free (hash->keys); + mg_free (hash->values); #ifdef HAVE_SGEN_GC mg_free (hash); #else @@ -408,36 +430,28 @@ mono_g_hash_table_destroy (MonoGHashTable *hash) static void mono_g_hash_table_insert_replace (MonoGHashTable *hash, gpointer key, gpointer value, gboolean replace) { - guint hashcode; - Slot *s; - GEqualFunc equal; - + int slot; g_return_if_fail (hash != NULL); - equal = hash->key_equal_func; - if (hash->in_use >= hash->threshold) + if (hash->in_use > (hash->table_size * HASH_TABLE_MAX_LOAD_FACTOR)) rehash (hash); - hashcode = ((*hash->hash_func) (key)) % hash->table_size; - for (s = hash->table [hashcode]; s != NULL; s = s->next){ - if ((*equal) (s->key, key)){ - if (replace){ - if (hash->key_destroy_func != NULL) - (*hash->key_destroy_func)(s->key); - s->key = (MonoObject *)key; - } - if (hash->value_destroy_func != NULL) - (*hash->value_destroy_func) (s->value); - s->value = (MonoObject *)value; - return; + slot = mono_g_hash_table_find_slot (hash, key); + + if (hash->keys [slot]) { + if (replace) { + if (hash->key_destroy_func) + (*hash->key_destroy_func)(hash->keys [slot]); + mono_g_hash_table_key_store (hash, slot, (MonoObject*)key); } + if (hash->value_destroy_func) + (*hash->value_destroy_func) (hash->values [slot]); + mono_g_hash_table_value_store (hash, slot, (MonoObject*)value); + } else { + mono_g_hash_table_key_store (hash, slot, (MonoObject*)key); + mono_g_hash_table_value_store (hash, slot, (MonoObject*)value); + hash->in_use++; } - s = new_slot (hash); - s->key = (MonoObject *)key; - s->value = (MonoObject *)value; - s->next = hash->table [hashcode]; - hash->table [hashcode] = s; - hash->in_use++; } void @@ -453,56 +467,28 @@ mono_g_hash_table_replace(MonoGHashTable *h, gpointer k, gpointer v) } void -mono_g_hash_table_print_stats (MonoGHashTable *table) +mono_g_hash_table_print_stats (MonoGHashTable *hash) { - int i, chain_size, max_chain_size; - Slot *node; - - max_chain_size = 0; - for (i = 0; i < table->table_size; i++) { - chain_size = 0; - for (node = table->table [i]; node; node = node->next) - chain_size ++; - max_chain_size = MAX(max_chain_size, chain_size); - } - - printf ("Size: %d Table Size: %d Max Chain Length: %d\n", table->in_use, table->table_size, max_chain_size); -} - -#ifdef HAVE_SGEN_GC - -/* GC marker function */ -static void -mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func, void *gc_data) -{ - MonoGHashTable *table = (MonoGHashTable*)addr; - Slot *node; - int i; - - if (table->gc_type == MONO_HASH_KEY_GC) { - for (i = 0; i < table->table_size; i++) { - for (node = table->table [i]; node; node = node->next) { - if (node->key) - mark_func (&node->key, gc_data); - } - } - } else if (table->gc_type == MONO_HASH_VALUE_GC) { - for (i = 0; i < table->table_size; i++) { - for (node = table->table [i]; node; node = node->next) { - if (node->value) - mark_func (&node->value, gc_data); - } + int i = 0, chain_size = 0, max_chain_size = 0; + gboolean wrapped_around = FALSE; + + while (TRUE) { + if (hash->keys [i]) { + chain_size++; + } else { + max_chain_size = MAX(max_chain_size, chain_size); + chain_size = 0; + if (wrapped_around) + break; } - } else if (table->gc_type == MONO_HASH_KEY_VALUE_GC) { - for (i = 0; i < table->table_size; i++) { - for (node = table->table [i]; node; node = node->next) { - if (node->key) - mark_func (&node->key, gc_data); - if (node->value) - mark_func (&node->value, gc_data); - } + + if (i == (hash->table_size - 1)) { + wrapped_around = TRUE; + i = 0; + } else { + i++; } } + /* Rehash to a size that can fit the current elements */ + printf ("Size: %d Table Size: %d Max Chain Length: %d\n", hash->in_use, hash->table_size, max_chain_size); } - -#endif diff --git a/mono/metadata/mono-hash.h b/mono/metadata/mono-hash.h index 60c3328a238..dca17694f8e 100644 --- a/mono/metadata/mono-hash.h +++ b/mono/metadata/mono-hash.h @@ -21,6 +21,8 @@ typedef enum { MONO_HASH_KEY_VALUE_GC = MONO_HASH_KEY_GC | MONO_HASH_VALUE_GC, } MonoGHashGCType; +extern int mono_g_hash_table_max_chain_length; + typedef struct _MonoGHashTable MonoGHashTable; MONO_API MonoGHashTable *mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, const char *msg); diff --git a/mono/metadata/mono-mlist.c b/mono/metadata/mono-mlist.c index 42d646444b1..657a21348dc 100644 --- a/mono/metadata/mono-mlist.c +++ b/mono/metadata/mono-mlist.c @@ -65,7 +65,7 @@ mono_mlist_alloc (MonoObject *data) MonoMList* mono_mlist_alloc_checked (MonoObject *data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMList* res; if (!monolist_item_vtable) { MonoClass *klass = mono_class_load_from_name (mono_defaults.corlib, "System", "MonoListItem"); @@ -197,7 +197,7 @@ mono_mlist_prepend (MonoMList* list, MonoObject *data) MonoMList* mono_mlist_prepend_checked (MonoMList* list, MonoObject *data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMList* res = mono_mlist_alloc_checked (data, error); return_val_if_nok (error, NULL); @@ -238,7 +238,7 @@ mono_mlist_append (MonoMList* list, MonoObject *data) MonoMList* mono_mlist_append_checked (MonoMList* list, MonoObject *data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMList* res = mono_mlist_alloc_checked (data, error); return_val_if_nok (error, NULL); diff --git a/mono/metadata/mono-perfcounters.c b/mono/metadata/mono-perfcounters.c index 57c01f411e3..8c370a9bacf 100644 --- a/mono/metadata/mono-perfcounters.c +++ b/mono/metadata/mono-perfcounters.c @@ -1295,7 +1295,7 @@ custom_get_impl (SharedCategory *cat, MonoString *counter, MonoString* instance, SharedInstance* inst; char *name; - mono_error_init (error); + error_init (error); scounter = find_custom_counter (cat, counter); if (!scounter) return NULL; @@ -1689,7 +1689,7 @@ get_string_array (void **array, int count, gboolean is_process, MonoError *error { int i; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); MonoArray * res = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), count, error); return_val_if_nok (error, NULL); for (i = 0; i < count; ++i) { @@ -1714,7 +1714,7 @@ get_string_array_of_strings (void **array, int count, MonoError *error) { int i; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); MonoArray * res = mono_array_new_checked (mono_domain_get (), mono_get_string_class (), count, error); return_val_if_nok (error, NULL); for (i = 0; i < count; ++i) { @@ -1732,7 +1732,7 @@ get_mono_instances (MonoError *error) int res; void **buf = NULL; MonoArray *array; - mono_error_init (error); + error_init (error); do { count *= 2; g_free (buf); @@ -1750,7 +1750,7 @@ get_cpu_instances (MonoError *error) void **buf = NULL; int i, count; MonoArray *array; - mono_error_init (error); + error_init (error); count = mono_cpu_count () + 1; /* +1 for "_Total" */ buf = g_new (void*, count); for (i = 0; i < count; ++i) @@ -1767,7 +1767,7 @@ get_processes_instances (MonoError *error) MonoArray *array; int count = 0; void **buf = mono_process_list (&count); - mono_error_init (error); + error_init (error); if (!buf) return get_string_array (NULL, 0, FALSE, error); array = get_string_array (buf, count, TRUE, error); @@ -1780,7 +1780,7 @@ get_networkinterface_instances (MonoError *error) { MonoArray *array; int count = 0; - mono_error_init (error); + error_init (error); void **buf = mono_networkinterface_list (&count); if (!buf) return get_string_array_of_strings (NULL, 0, error); @@ -1793,7 +1793,7 @@ static MonoArray* get_custom_instances (MonoString *category, MonoError *error) { SharedCategory *scat; - mono_error_init (error); + error_init (error); scat = find_custom_category (category); if (scat) { GSList *list = get_custom_instances_list (scat); diff --git a/mono/metadata/mono-security-windows-uwp.c b/mono/metadata/mono-security-windows-uwp.c index 01549b8d3fc..bd1ebe9b364 100644 --- a/mono/metadata/mono-security-windows-uwp.c +++ b/mono/metadata/mono-security-windows-uwp.c @@ -16,7 +16,7 @@ gpointer ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("OpenThreadToken, OpenProcessToken"); @@ -32,7 +32,7 @@ MonoArray* ves_icall_System_Security_Principal_WindowsIdentity_GetRoles (gpointer token) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetTokenInformation"); @@ -48,7 +48,7 @@ gpointer ves_icall_System_Security_Principal_WindowsImpersonationContext_DuplicateToken (gpointer token) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("DuplicateToken"); @@ -64,7 +64,7 @@ gboolean ves_icall_System_Security_Principal_WindowsImpersonationContext_SetCurrentToken (gpointer token) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("ImpersonateLoggedOnUser"); @@ -80,7 +80,7 @@ gboolean ves_icall_System_Security_Principal_WindowsImpersonationContext_RevertToSelf (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("RevertToSelf"); @@ -96,7 +96,7 @@ gint32 mono_security_win_get_token_name (gpointer token, gunichar2 ** uniname) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetTokenInformation"); @@ -112,7 +112,7 @@ gboolean mono_security_win_is_machine_protected (gunichar2 *path) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetNamedSecurityInfo, LocalFree"); @@ -128,7 +128,7 @@ gboolean mono_security_win_is_user_protected (gunichar2 *path) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetNamedSecurityInfo, LocalFree"); @@ -144,7 +144,7 @@ gboolean mono_security_win_protect_machine (gunichar2 *path) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("BuildTrusteeWithSid, SetEntriesInAcl, SetNamedSecurityInfo, LocalFree, FreeSid"); @@ -160,7 +160,7 @@ gboolean mono_security_win_protect_user (gunichar2 *path) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("BuildTrusteeWithSid, SetEntriesInAcl, SetNamedSecurityInfo, LocalFree"); diff --git a/mono/metadata/mono-security-windows.c b/mono/metadata/mono-security-windows.c index f6d088dd0c7..63807a5ac8f 100644 --- a/mono/metadata/mono-security-windows.c +++ b/mono/metadata/mono-security-windows.c @@ -111,7 +111,7 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token gunichar2 *uniname = NULL; gint32 size = 0; - mono_error_init (&error); + error_init (&error); size = mono_security_win_get_token_name (token, &uniname); diff --git a/mono/metadata/mono-security.c b/mono/metadata/mono-security.c index a1d3c9d0e4f..0d770f70cdc 100644 --- a/mono/metadata/mono-security.c +++ b/mono/metadata/mono-security.c @@ -226,7 +226,7 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token gunichar2 *uniname = NULL; gint32 size = 0; - mono_error_init (&error); + error_init (&error); size = internal_get_token_name (token, &uniname); @@ -551,7 +551,7 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser (MonoString MonoBoolean ves_icall_System_Security_Policy_Evidence_IsAuthenticodePresent (MonoReflectionAssemblyHandle refass, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (refass)) return FALSE; MonoAssembly *assembly = MONO_HANDLE_GETVAL (refass, assembly); @@ -587,7 +587,7 @@ void invoke_protected_memory_method (MonoArray *data, MonoObject *scope, gboolea MonoMethod *method; void *params [2]; - mono_error_init (error); + error_init (error); if (system_security_assembly == NULL) { system_security_assembly = mono_image_loaded ("System.Security"); diff --git a/mono/metadata/null-gc.c b/mono/metadata/null-gc.c index 9ea87bd844c..4ee7dd7c9c4 100644 --- a/mono/metadata/null-gc.c +++ b/mono/metadata/null-gc.c @@ -165,6 +165,12 @@ mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits) } void* +mono_gc_make_vector_descr (void) +{ + return NULL; +} + +void* mono_gc_make_root_descr_all_refs (int numbits) { return NULL; diff --git a/mono/metadata/object.c b/mono/metadata/object.c index b1492101b44..b3ce33d1264 100644 --- a/mono/metadata/object.c +++ b/mono/metadata/object.c @@ -113,7 +113,7 @@ mono_runtime_object_init_checked (MonoObject *this_obj, MonoError *error) MonoMethod *method = NULL; MonoClass *klass = this_obj->vtable->klass; - mono_error_init (error); + error_init (error); method = mono_class_get_method_from_name (klass, ".ctor", 0); if (!method) g_error ("Could not lookup zero argument constructor for class %s", mono_type_get_full_name (klass)); @@ -358,7 +358,7 @@ mono_runtime_class_init_full (MonoVTable *vtable, MonoError *error) MonoDomain *last_domain = NULL; MonoException * pending_tae = NULL; - mono_error_init (error); + error_init (error); if (vtable->initialized) return TRUE; @@ -477,7 +477,7 @@ mono_runtime_class_init_full (MonoVTable *vtable, MonoError *error) else mono_error_cleanup (error); - mono_error_init (error); + error_init (error); /* If the initialization failed, mark the class as unusable. */ /* Avoid infinite loops */ @@ -665,7 +665,7 @@ mono_compile_method_checked (MonoMethod *method, MonoError *error) MONO_REQ_GC_NEUTRAL_MODE - mono_error_init (error); + error_init (error); g_assert (callbacks.compile_method); res = callbacks.compile_method (method, error); @@ -679,7 +679,7 @@ mono_runtime_create_jump_trampoline (MonoDomain *domain, MonoMethod *method, gbo MONO_REQ_GC_NEUTRAL_MODE; - mono_error_init (error); + error_init (error); res = callbacks.create_jump_trampoline (domain, method, add_sync_wrapper, error); return res; } @@ -1778,7 +1778,7 @@ mono_class_vtable_full (MonoDomain *domain, MonoClass *klass, MonoError *error) MonoClassRuntimeInfo *runtime_info; - mono_error_init (error); + error_init (error); g_assert (klass); @@ -1856,7 +1856,7 @@ mono_class_create_runtime_vtable (MonoDomain *domain, MonoClass *klass, MonoErro gpointer iter; gpointer *interface_offsets; - mono_error_init (error); + error_init (error); mono_loader_lock (); /*FIXME mono_class_init acquires it*/ mono_domain_lock (domain); @@ -2214,7 +2214,7 @@ mono_class_proxy_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, Mono int bcsize; #endif - mono_error_init (error); + error_init (error); vt = mono_class_vtable (domain, klass); g_assert (vt); /*FIXME property handle failure*/ @@ -2523,7 +2523,7 @@ mono_remote_class (MonoDomain *domain, MonoStringHandle class_name, MonoClass *p gpointer* key, *mp_key; char *name; - mono_error_init (error); + error_init (error); key = create_remote_class_key (NULL, proxy_class); @@ -2632,7 +2632,7 @@ mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, Mon { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); mono_loader_lock (); /*FIXME mono_class_from_mono_type and mono_class_proxy_vtable take it*/ mono_domain_lock (domain); @@ -2686,7 +2686,7 @@ mono_upgrade_remote_class (MonoDomain *domain, MonoObjectHandle proxy_object, Mo { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoTransparentProxyHandle tproxy = MONO_HANDLE_CAST (MonoTransparentProxy, proxy_object); MonoRemoteClass *remote_class = MONO_HANDLE_GETVAL (tproxy, remote_class); @@ -2754,7 +2754,7 @@ mono_object_get_virtual_method (MonoObject *obj_raw, MonoMethod *method) MonoMethod* mono_object_handle_get_virtual_method (MonoObjectHandle obj, MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); gboolean is_proxy = FALSE; MonoClass *klass = mono_handle_class (obj); @@ -2769,7 +2769,7 @@ mono_object_handle_get_virtual_method (MonoObjectHandle obj, MonoMethod *method, static MonoMethod* class_get_virtual_method (MonoClass *klass, MonoMethod *method, gboolean is_proxy, MonoError *error) { - mono_error_init (error); + error_init (error); if (!is_proxy && ((method->flags & METHOD_ATTRIBUTE_FINAL) || !(method->flags & METHOD_ATTRIBUTE_VIRTUAL))) @@ -2842,7 +2842,7 @@ do_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **ex g_assert (callbacks.runtime_invoke); - mono_error_init (error); + error_init (error); if (mono_profiler_get_events () & MONO_PROFILE_METHOD_EVENTS) mono_profiler_method_start_invoke (method); @@ -3343,7 +3343,7 @@ mono_field_get_value_object_checked (MonoDomain *domain, MonoClassField *field, { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoObject *o; MonoClass *klass; @@ -3488,7 +3488,7 @@ mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); int retval = 0; const char *p = blob; mono_metadata_decode_blob_size (p, &p); @@ -3539,7 +3539,7 @@ get_default_field_value (MonoDomain* domain, MonoClassField *field, void *value, MonoTypeEnum def_type; const char* data; - mono_error_init (error); + error_init (error); data = mono_class_get_field_default_value (field, &def_type); mono_get_constant_value_from_blob (domain, def_type, data, value, error); @@ -3552,7 +3552,7 @@ mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable * void *src; - mono_error_init (error); + error_init (error); g_return_if_fail (field->type->attrs & FIELD_ATTRIBUTE_STATIC); @@ -3674,7 +3674,7 @@ mono_property_set_value_checked (MonoProperty *prop, void *obj, void **params, M MonoObject *exc; - mono_error_init (error); + error_init (error); do_runtime_invoke (prop->set, obj, params, &exc, error); if (exc != NULL && is_ok (error)) mono_error_set_exception_instance (error, (MonoException*)exc); @@ -3797,7 +3797,7 @@ mono_nullable_box (guint8 *buf, MonoClass *klass, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoClass *param_class = klass->cast_class; mono_class_setup_fields (klass); @@ -3938,7 +3938,7 @@ mono_runtime_delegate_try_invoke (MonoObject *delegate, void **params, MonoObjec { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoMethod *im; MonoClass *klass = delegate->vtable->klass; MonoObject *o; @@ -3970,7 +3970,7 @@ mono_runtime_delegate_try_invoke (MonoObject *delegate, void **params, MonoObjec MonoObject* mono_runtime_delegate_invoke_checked (MonoObject *delegate, void **params, MonoError *error) { - mono_error_init (error); + error_init (error); return mono_runtime_delegate_try_invoke (delegate, params, NULL, error); } @@ -4006,7 +4006,7 @@ mono_runtime_get_main_args_checked (MonoError *error) int i; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); res = (MonoArray*)mono_array_new_checked (domain, mono_defaults.string_class, num_main_args, error); return_val_if_nok (error, NULL); @@ -4215,7 +4215,7 @@ int mono_runtime_run_main_checked (MonoMethod *method, int argc, char* argv[], MonoError *error) { - mono_error_init (error); + error_init (error); MonoArray *args = prepare_run_main (method, argc, argv); return mono_runtime_exec_main_checked (method, args, error); } @@ -4329,7 +4329,7 @@ make_transparent_proxy (MonoObject *obj, MonoError *error) MonoReflectionType *reflection_type; MonoTransparentProxy *transparent_proxy; - mono_error_init (error); + error_init (error); if (!get_proxy_method) get_proxy_method = mono_class_get_method_from_name (mono_defaults.real_proxy_class, "GetTransparentProxy", 0); @@ -4373,7 +4373,7 @@ mono_object_xdomain_representation (MonoObject *obj, MonoDomain *target_domain, { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoObject *deserialized = NULL; #ifndef DISABLE_REMOTING @@ -4408,7 +4408,7 @@ create_unhandled_exception_eventargs (MonoObject *exc, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoClass *klass; gpointer args [2]; MonoMethod *method = NULL; @@ -4659,7 +4659,7 @@ do_exec_main_checked (MonoMethod *method, MonoArray *args, MonoError *error) gpointer pa [1]; int rval; - mono_error_init (error); + error_init (error); g_assert (args); pa [0] = args; @@ -4766,7 +4766,7 @@ mono_runtime_exec_main (MonoMethod *method, MonoArray *args, MonoObject **exc) int mono_runtime_exec_main_checked (MonoMethod *method, MonoArray *args, MonoError *error) { - mono_error_init (error); + error_init (error); prepare_thread_to_exec_main (mono_object_domain (args), method); return do_exec_main_checked (method, args, error); } @@ -4803,7 +4803,7 @@ invoke_array_extract_argument (MonoArray *params, int i, MonoType *t, gboolean* { MonoType *t_orig = t; gpointer result = NULL; - mono_error_init (error); + error_init (error); again: switch (t->type) { case MONO_TYPE_U1: @@ -4984,7 +4984,7 @@ MonoObject* mono_runtime_invoke_array_checked (MonoMethod *method, void *obj, MonoArray *params, MonoError *error) { - mono_error_init (error); + error_init (error); return mono_runtime_try_invoke_array (method, obj, params, NULL, error); } @@ -5033,7 +5033,7 @@ mono_runtime_try_invoke_array (MonoMethod *method, void *obj, MonoArray *params, { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoMethodSignature *sig = mono_method_signature (method); gpointer *pa = NULL; @@ -5229,7 +5229,7 @@ mono_object_new_pinned (MonoDomain *domain, MonoClass *klass, MonoError *error) MonoVTable *vtable; - mono_error_init (error); + error_init (error); vtable = mono_class_vtable (domain, klass); g_assert (vtable); /* FIXME don't swallow the error */ @@ -5268,7 +5268,7 @@ mono_object_new_specific_checked (MonoVTable *vtable, MonoError *error) MonoObject *o; - mono_error_init (error); + error_init (error); /* check for is_com_object for COM Interop */ if (mono_vtable_is_remote (vtable) || mono_class_is_com_object (vtable->klass)) @@ -5362,7 +5362,7 @@ mono_object_new_alloc_specific_checked (MonoVTable *vtable, MonoError *error) MonoObject *o; - mono_error_init (error); + error_init (error); o = (MonoObject *)mono_gc_alloc_obj (vtable, vtable->klass->instance_size); @@ -5423,7 +5423,7 @@ mono_object_new_fast_checked (MonoVTable *vtable, MonoError *error) MonoObject *o; - mono_error_init (error); + error_init (error); o = mono_gc_alloc_obj (vtable, vtable->klass->instance_size); @@ -5450,7 +5450,7 @@ mono_object_new_mature (MonoVTable *vtable, MonoError *error) MonoObject *o; - mono_error_init (error); + error_init (error); o = mono_gc_alloc_mature (vtable, vtable->klass->instance_size); @@ -5554,7 +5554,7 @@ mono_object_clone_checked (MonoObject *obj, MonoError *error) MonoObject *o; int size; - mono_error_init (error); + error_init (error); size = obj->vtable->klass->instance_size; @@ -5635,7 +5635,7 @@ mono_array_clone_in_domain (MonoDomain *domain, MonoArrayHandle array_handle, Mo uintptr_t size = 0; MonoClass *klass = mono_handle_class (array_handle); - mono_error_init (error); + error_init (error); /* Pin source array here - if bounds is non-NULL, it's a pointer into the object data */ uint32_t src_handle = mono_gchandle_from_handle (MONO_HANDLE_CAST (MonoObject, array_handle), TRUE); @@ -5704,7 +5704,7 @@ mono_array_clone_checked (MonoArray *array_raw, MonoError *error) MONO_REQ_GC_UNSAFE_MODE; HANDLE_FUNCTION_ENTER (); /* FIXME: callers of mono_array_clone_checked should use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoArray, array); MonoArrayHandle result = mono_array_clone_in_domain (MONO_HANDLE_DOMAIN (array), array, error); HANDLE_FUNCTION_RETURN_OBJ (result); @@ -5781,7 +5781,7 @@ mono_array_new_full_checked (MonoDomain *domain, MonoClass *array_class, uintptr MonoVTable *vtable; int i; - mono_error_init (error); + error_init (error); if (!array_class->inited) mono_class_init (array_class); @@ -5896,7 +5896,7 @@ mono_array_new_checked (MonoDomain *domain, MonoClass *eclass, uintptr_t n, Mono { MonoClass *ac; - mono_error_init (error); + error_init (error); ac = mono_array_class_get (eclass, 1); g_assert (ac); @@ -5943,7 +5943,7 @@ mono_array_new_specific_checked (MonoVTable *vtable, uintptr_t n, MonoError *err MonoObject *o; uintptr_t byte_len; - mono_error_init (error); + error_init (error); if (G_UNLIKELY (n > MONO_ARRAY_MAX_INDEX)) { mono_error_set_generic_error (error, "System", "OverflowException", ""); @@ -6035,7 +6035,7 @@ mono_string_new_utf16_checked (MonoDomain *domain, const guint16 *text, gint32 l MonoString *s; - mono_error_init (error); + error_init (error); s = mono_string_new_size_checked (domain, len, error); if (s != NULL) @@ -6078,7 +6078,7 @@ mono_string_new_utf32_checked (MonoDomain *domain, const mono_unichar4 *text, gi GError *gerror = NULL; glong items_written; - mono_error_init (error); + error_init (error); utf16_output = g_ucs4_to_utf16 (text, len, NULL, &items_written, &gerror); if (gerror) @@ -6138,7 +6138,7 @@ mono_string_new_size_checked (MonoDomain *domain, gint32 len, MonoError *error) MonoVTable *vtable; size_t size; - mono_error_init (error); + error_init (error); /* check for overflow */ if (len < 0 || len > ((SIZE_MAX - G_STRUCT_OFFSET (MonoString, chars) - 8) / 2)) { @@ -6194,7 +6194,7 @@ mono_string_new_len_checked (MonoDomain *domain, const char *text, guint length, { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); GError *eg_error = NULL; MonoString *o = NULL; @@ -6252,7 +6252,7 @@ mono_string_new_checked (MonoDomain *domain, const char *text, MonoError *error) glong items_written; int l; - mono_error_init (error); + error_init (error); l = strlen (text); @@ -6346,7 +6346,7 @@ mono_value_box_checked (MonoDomain *domain, MonoClass *klass, gpointer value, Mo int size; MonoVTable *vtable; - mono_error_init (error); + error_init (error); g_assert (klass->valuetype); if (mono_class_is_nullable (klass)) @@ -6544,7 +6544,7 @@ mono_object_isinst_checked (MonoObject *obj_raw, MonoClass *klass, MonoError *er MONO_REQ_GC_UNSAFE_MODE; HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoObject, obj); MonoObjectHandle result = mono_object_handle_isinst (obj, klass, error); HANDLE_FUNCTION_RETURN_OBJ (result); @@ -6562,7 +6562,7 @@ mono_object_isinst_checked (MonoObject *obj_raw, MonoClass *klass, MonoError *er MonoObjectHandle mono_object_handle_isinst (MonoObjectHandle obj, MonoClass *klass, MonoError *error) { - mono_error_init (error); + error_init (error); if (!klass->inited) mono_class_init (klass); @@ -6594,7 +6594,7 @@ mono_object_isinst_mbyref (MonoObject *obj_raw, MonoClass *klass) MonoObjectHandle mono_object_handle_isinst_mbyref (MonoObjectHandle obj, MonoClass *klass, MonoError *error) { - mono_error_init (error); + error_init (error); MonoObjectHandle result = MONO_HANDLE_NEW (MonoObject, NULL); @@ -6726,7 +6726,7 @@ mono_string_get_pinned (MonoString *str, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); /* We only need to make a pinned version of a string if this is a moving GC */ if (!mono_gc_is_moving ()) @@ -6753,7 +6753,7 @@ mono_string_is_interned_lookup (MonoString *str, int insert, MonoError *error) MonoString *s, *res; MonoDomain *domain; - mono_error_init (error); + error_init (error); domain = ((MonoObject *)str)->vtable->domain; ldstr_table = domain->ldstr_table; @@ -6845,7 +6845,7 @@ mono_string_intern_checked (MonoString *str, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); return mono_string_is_interned_lookup (str, TRUE, error); } @@ -6883,7 +6883,7 @@ MonoString* mono_ldstr_checked (MonoDomain *domain, MonoImage *image, guint32 idx, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); if (image->dynamic) { MonoString *str = (MonoString *)mono_lookup_dynamic_token (image, MONO_TOKEN_STRING | idx, NULL, error); @@ -6910,7 +6910,7 @@ mono_ldstr_metadata_sig (MonoDomain *domain, const char* sig, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); const char *str = sig; MonoString *o, *interned; size_t len2; @@ -6965,7 +6965,7 @@ mono_ldstr_utf8 (MonoImage *image, guint32 idx, MonoError *error) char *as; GError *gerror = NULL; - mono_error_init (error); + error_init (error); if (!mono_verifier_verify_string_signature (image, idx, NULL)) return NULL; /*FIXME we should probably be raising an exception here*/ @@ -7034,7 +7034,7 @@ mono_string_to_utf8_checked (MonoString *s, MonoError *error) char *as; GError *gerror = NULL; - mono_error_init (error); + error_init (error); if (s == NULL) return NULL; @@ -7222,7 +7222,7 @@ mono_string_from_utf16_checked (gunichar2 *data, MonoError *error) MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); int len = 0; @@ -7265,7 +7265,7 @@ mono_string_from_utf32_checked (mono_unichar4 *data, MonoError *error) { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoString* result = NULL; mono_unichar2 *utf16_output = NULL; GError *gerror = NULL; @@ -7409,7 +7409,7 @@ mono_wait_handle_new (MonoDomain *domain, HANDLE handle, MonoError *error) gpointer params [1]; static MonoMethod *handle_set; - mono_error_init (error); + error_init (error); res = (MonoWaitHandle *)mono_object_new_checked (domain, mono_defaults.manualresetevent_class, error); return_val_if_nok (error, NULL); @@ -7448,7 +7448,7 @@ mono_runtime_capture_context (MonoDomain *domain, MonoError *error) RuntimeInvokeFunction runtime_invoke; - mono_error_init (error); + error_init (error); if (!domain->capture_context_runtime_invoke || !domain->capture_context_method) { MonoMethod *method = mono_get_context_capture_method (); @@ -7484,7 +7484,7 @@ mono_async_result_new (MonoDomain *domain, HANDLE handle, MonoObject *state, gpo { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoAsyncResult *res = (MonoAsyncResult *)mono_object_new_checked (domain, mono_defaults.asyncresult_class, error); return_val_if_nok (error, NULL); MonoObject *context = mono_runtime_capture_context (domain, error); @@ -7554,7 +7554,7 @@ ves_icall_System_Runtime_Remoting_Messaging_AsyncResult_Invoke (MonoAsyncResult if (wait_event != NULL) mono_w32event_set (wait_event); - mono_error_init (&error); //the else branch would leave it in an undefined state + error_init (&error); //the else branch would leave it in an undefined state if (ac->cb_method) mono_runtime_invoke_checked (ac->cb_method, ac->cb_target, (gpointer*) &ares, &error); @@ -7583,7 +7583,7 @@ mono_message_init (MonoDomain *domain, g_assert (init_message_method != NULL); } - mono_error_init (error); + error_init (error); /* FIXME set domain instead? */ g_assert (domain == mono_domain_get ()); @@ -7622,7 +7622,7 @@ mono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, MonoObject g_assert (exc); - mono_error_init (error); + error_init (error); /*static MonoObject *(*invoke) (gpointer, gpointer, MonoObject **, MonoArray **) = NULL;*/ @@ -7654,7 +7654,7 @@ mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, MONO_REQ_GC_UNSAFE_MODE; static MonoClass *object_array_klass; - mono_error_init (error); + error_init (error); MonoDomain *domain; MonoMethod *method; @@ -7784,7 +7784,7 @@ mono_object_to_string (MonoObject *obj, MonoObject **exc) MonoString * mono_object_to_string_checked (MonoObject *obj, MonoError *error) { - mono_error_init (error); + error_init (error); void *target; MonoMethod *method = prepare_to_string_method (obj, &target); return (MonoString*) mono_runtime_invoke_checked (method, target, NULL, error); @@ -7804,7 +7804,7 @@ MonoString * mono_object_try_to_string (MonoObject *obj, MonoObject **exc, MonoError *error) { g_assert (exc); - mono_error_init (error); + error_init (error); void *target; MonoMethod *method = prepare_to_string_method (obj, &target); return (MonoString*) mono_runtime_try_invoke (method, target, NULL, exc, error); @@ -7906,7 +7906,7 @@ mono_delegate_ctor_with_method (MonoObject *this_obj, MonoObject *target, gpoint { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDelegate *delegate = (MonoDelegate *)this_obj; g_assert (this_obj); @@ -7923,6 +7923,9 @@ mono_delegate_ctor_with_method (MonoObject *this_obj, MonoObject *target, gpoint if (target && mono_object_is_transparent_proxy (target)) { g_assert (method); method = mono_marshal_get_remoting_invoke (method); +#ifdef ENABLE_INTERPRETER + g_error ("need RuntimeMethod in method_ptr when using interpreter"); +#endif delegate->method_ptr = mono_compile_method_checked (method, error); return_val_if_nok (error, FALSE); MONO_OBJECT_SETREF (delegate, target, target); @@ -7954,7 +7957,7 @@ mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr, Mon { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoJitInfo *ji; MonoMethod *method = NULL; @@ -7991,7 +7994,7 @@ mono_method_call_message_new (MonoMethod *method, gpointer *params, MonoMethod * { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoMethodSignature *sig = mono_method_signature (method); @@ -8055,7 +8058,7 @@ mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoAr { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoMethodSignature *sig = mono_method_signature (method); int i, j, type, size, out_len; @@ -8149,7 +8152,7 @@ mono_load_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoClas static MonoMethod *getter = NULL; - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoTransparentProxy *tp = (MonoTransparentProxy *) this_obj; @@ -8246,7 +8249,7 @@ mono_load_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, Mono { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); static MonoMethod *tp_load = NULL; @@ -8308,7 +8311,7 @@ mono_store_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoCla MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDomain *domain = mono_domain_get (); MonoClass *field_class; @@ -8362,7 +8365,7 @@ mono_store_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, Mon static MonoMethod *tp_store = NULL; - mono_error_init (error); + error_init (error); g_assert (mono_object_is_transparent_proxy (this_obj)); @@ -8495,7 +8498,7 @@ mono_glist_to_array (GList *list, MonoClass *eclass, MonoError *error) MonoArray *res; int len, i; - mono_error_init (error); + error_init (error); if (!list) return NULL; diff --git a/mono/metadata/profiler.c b/mono/metadata/profiler.c index a880ec93300..5902d17378a 100644 --- a/mono/metadata/profiler.c +++ b/mono/metadata/profiler.c @@ -1147,7 +1147,7 @@ mono_profiler_coverage_get (MonoProfiler *prof, MonoMethod *method, MonoProfileC if (debug_minfo) { MonoDebugSourceLocation *location; - location = mono_debug_symfile_lookup_location (debug_minfo, offset); + location = mono_debug_method_lookup_location (debug_minfo, offset); if (location) { entry.line = location->row; entry.col = location->column; diff --git a/mono/metadata/reflection-cache.h b/mono/metadata/reflection-cache.h index e82a44353dc..cba37295453 100644 --- a/mono/metadata/reflection-cache.h +++ b/mono/metadata/reflection-cache.h @@ -109,7 +109,7 @@ typedef MonoObjectHandle (*ReflectionCacheConstructFunc_handle) (MonoDomain*, Mo static inline MonoObjectHandle check_or_construct_handle (MonoDomain *domain, MonoClass *klass, gpointer item, gpointer user_data, MonoError *error, ReflectionCacheConstructFunc_handle construct) { - mono_error_init (error); + error_init (error); MonoObjectHandle obj = check_object_handle (domain, klass, item); if (!MONO_HANDLE_IS_NULL (obj)) return obj; diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c index 1ddb08757a3..43843be4a5a 100644 --- a/mono/metadata/reflection.c +++ b/mono/metadata/reflection.c @@ -165,7 +165,10 @@ reflected_equal (gconstpointer a, gconstpointer b) guint reflected_hash (gconstpointer a) { const ReflectedEntry *ea = (const ReflectedEntry *)a; - return mono_aligned_addr_hash (ea->item); + /* Combine hashes for item and refclass. Identical to boost's hash_combine */ + guint seed = mono_aligned_addr_hash (ea->item) + 0x9e3779b9; + seed ^= mono_aligned_addr_hash (ea->refclass) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + return seed; } @@ -229,7 +232,7 @@ mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly) static MonoReflectionAssemblyHandle assembly_object_construct (MonoDomain *domain, MonoClass *unused_klass, MonoAssembly *assembly, gpointer user_data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionAssemblyHandle res = MONO_HANDLE_NEW (MonoReflectionAssembly, mono_object_new_checked (domain, mono_class_get_mono_assembly_class (), error)); return_val_if_nok (error, MONO_HANDLE_CAST (MonoReflectionAssembly, NULL_HANDLE)); MONO_HANDLE_SETVAL (res, assembly, MonoAssembly*, assembly); @@ -246,7 +249,7 @@ assembly_object_construct (MonoDomain *domain, MonoClass *unused_klass, MonoAsse MonoReflectionAssemblyHandle mono_assembly_get_object_handle (MonoDomain *domain, MonoAssembly *assembly, MonoError *error) { - mono_error_init (error); + error_init (error); return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionAssemblyHandle, assembly, NULL, assembly_object_construct, NULL); } @@ -265,7 +268,7 @@ module_object_construct (MonoDomain *domain, MonoClass *unused_klass, MonoImage { char* basename; - mono_error_init (error); + error_init (error); MonoReflectionModuleHandle res = MONO_HANDLE_NEW (MonoReflectionModule, mono_object_new_checked (domain, mono_class_get_mono_module_class (), error)); if (!is_ok (error)) goto fail; @@ -312,7 +315,7 @@ fail: MonoReflectionModuleHandle mono_module_get_object_handle (MonoDomain *domain, MonoImage *image, MonoError *error) { - mono_error_init (error); + error_init (error); return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionModuleHandle, image, NULL, module_object_construct, NULL); } @@ -335,7 +338,7 @@ mono_module_file_get_object_handle (MonoDomain *domain, MonoImage *image, int ta guint32 i, name_idx; const char *val; - mono_error_init (error); + error_init (error); MonoReflectionModuleHandle res = MONO_HANDLE_NEW (MonoReflectionModule, mono_object_new_checked (domain, mono_class_get_mono_module_class (), error)); if (!is_ok (error)) @@ -445,7 +448,7 @@ mono_type_get_object_checked (MonoDomain *domain, MonoType *type, MonoError *err MonoReflectionType *res; MonoClass *klass; - mono_error_init (error); + error_init (error); g_assert (type != NULL); klass = mono_class_from_mono_type (type); @@ -579,7 +582,7 @@ mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refcl static MonoReflectionMethodHandle method_object_construct (MonoDomain *domain, MonoClass *refclass, MonoMethod *method, gpointer user_data, MonoError *error) { - mono_error_init (error); + error_init (error); g_assert (refclass != NULL); /* * We use the same C representation for methods and constructors, but the type @@ -587,7 +590,7 @@ method_object_construct (MonoDomain *domain, MonoClass *refclass, MonoMethod *me */ MonoClass *klass; - mono_error_init (error); + error_init (error); if (*method->name == '.' && (strcmp (method->name, ".ctor") == 0 || strcmp (method->name, ".cctor") == 0)) { klass = mono_class_get_mono_cmethod_class (); @@ -625,7 +628,7 @@ fail: MonoReflectionMethodHandle mono_method_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error) { - mono_error_init (error); + error_init (error); if (!refclass) refclass = method->klass; @@ -696,7 +699,7 @@ mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *fie static MonoReflectionFieldHandle field_object_construct (MonoDomain *domain, MonoClass *klass, MonoClassField *field, gpointer user_data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionFieldHandle res = MONO_HANDLE_NEW (MonoReflectionField, mono_object_new_checked (domain, mono_class_get_mono_field_class (), error)); if (!is_ok (error)) @@ -734,7 +737,7 @@ fail: MonoReflectionFieldHandle mono_field_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoClassField *field, MonoError *error) { - mono_error_init (error); + error_init (error); return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionFieldHandle, field, klass, field_object_construct, NULL); } @@ -779,7 +782,7 @@ mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *pr static MonoReflectionPropertyHandle property_object_construct (MonoDomain *domain, MonoClass *klass, MonoProperty *property, gpointer user_data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionPropertyHandle res = MONO_HANDLE_NEW (MonoReflectionProperty, mono_object_new_checked (domain, mono_class_get_mono_property_class (), error)); if (!is_ok (error)) @@ -848,7 +851,7 @@ static MonoReflectionEventHandle event_object_construct (MonoDomain *domain, MonoClass *klass, MonoEvent *event, gpointer user_data, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionMonoEventHandle mono_event = MONO_HANDLE_NEW (MonoReflectionMonoEvent, mono_object_new_checked (domain, mono_class_get_mono_event_class (), error)); if (!is_ok (error)) return MONO_HANDLE_CAST (MonoReflectionEvent, NULL_HANDLE); @@ -870,7 +873,7 @@ event_object_construct (MonoDomain *domain, MonoClass *klass, MonoEvent *event, MonoReflectionEventHandle mono_event_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoEvent *event, MonoError *error) { - mono_error_init (error); + error_init (error); return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionEventHandle, event, klass, event_object_construct, NULL); } @@ -909,7 +912,7 @@ get_dbnull_object (MonoDomain *domain, MonoError *error) { static MonoClassField *dbnull_value_field = NULL; - mono_error_init (error); + error_init (error); if (!dbnull_value_field) { MonoClass *dbnull_klass; @@ -925,7 +928,7 @@ get_dbnull_object (MonoDomain *domain, MonoError *error) static MonoObjectHandle get_dbnull (MonoDomain *domain, MonoObjectHandle dbnull, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (dbnull)) MONO_HANDLE_ASSIGN (dbnull, get_dbnull_object (domain, error)); return dbnull; @@ -943,7 +946,7 @@ static gboolean add_parameter_object_to_array (MonoDomain *domain, MonoMethod *method, MonoObjectHandle member, int idx, const char *name, MonoType *sig_param, guint32 blob_type_enum, const char *blob, MonoMarshalSpec *mspec, MonoObjectHandle missing, MonoObjectHandle dbnull, MonoArrayHandle dest, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionParameterHandle param = MONO_HANDLE_NEW (MonoReflectionParameter, mono_object_new_checked (domain, mono_class_get_mono_parameter_info_class (), error)); if (!is_ok (error)) goto leave; @@ -1030,7 +1033,7 @@ param_objects_construct (MonoDomain *domain, MonoClass *refclass, MonoMethodSign MonoMarshalSpec **mspecs = NULL; int i; - mono_error_init (error); + error_init (error); MonoReflectionMethodHandle member = mono_method_get_object_handle (domain, method, refclass, error); if (!is_ok (error)) @@ -1096,7 +1099,7 @@ leave: MonoArrayHandle mono_param_get_objects_internal (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error) { - mono_error_init (error); + error_init (error); /* side-effect: sets method->signature non-NULL on success */ MonoMethodSignature *sig = mono_method_signature_checked (method, error); @@ -1133,7 +1136,7 @@ static gboolean add_local_var_info_to_array (MonoDomain *domain, MonoMethodHeader *header, int idx, MonoArrayHandle dest, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionLocalVariableInfoHandle info = MONO_HANDLE_NEW (MonoReflectionLocalVariableInfo, mono_object_new_checked (domain, mono_class_get_local_variable_info_class (), error)); if (!is_ok (error)) goto leave; @@ -1157,7 +1160,7 @@ static gboolean add_exception_handling_clause_to_array (MonoDomain *domain, MonoMethodHeader *header, int idx, MonoArrayHandle dest, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoReflectionExceptionHandlingClauseHandle info = MONO_HANDLE_NEW (MonoReflectionExceptionHandlingClause, mono_object_new_checked (domain, mono_class_get_exception_handling_clause_class (), error)); if (!is_ok (error)) goto leave; @@ -1210,7 +1213,7 @@ method_body_object_construct (MonoDomain *domain, MonoClass *unused_class, MonoM unsigned char format, flags; int i; - mono_error_init (error); + error_init (error); /* for compatibility with .net */ if (method_is_dynamic (method)) { @@ -1308,7 +1311,7 @@ fail: MonoReflectionMethodBodyHandle mono_method_body_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); return CHECK_OR_CONSTRUCT_HANDLE (MonoReflectionMethodBodyHandle, method, NULL, method_body_object_construct, NULL); } @@ -1406,7 +1409,7 @@ mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob, MonoObject *object; MonoType *basetype = type; - mono_error_init (error); + error_init (error); if (!blob) return NULL; @@ -1841,7 +1844,7 @@ _mono_reflection_get_type_from_info (MonoTypeNameParse *info, MonoImage *image, MonoType *type; MonoImage *rootimage = image; - mono_error_init (error); + error_init (error); if (info->assembly.name) { MonoAssembly *assembly = mono_assembly_loaded (&info->assembly); @@ -1866,7 +1869,7 @@ _mono_reflection_get_type_from_info (MonoTypeNameParse *info, MonoImage *image, if (type == NULL && !info->assembly.name && image != mono_defaults.corlib) { /* ignore the error and try again */ mono_error_cleanup (error); - mono_error_init (error); + error_init (error); image = mono_defaults.corlib; type = mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, &type_resolve, error); } @@ -1887,7 +1890,7 @@ mono_reflection_get_type_internal (MonoImage *rootimage, MonoImage* image, MonoT int modval; gboolean bounded = FALSE; - mono_error_init (error); + error_init (error); if (!image) image = mono_defaults.corlib; @@ -2041,7 +2044,7 @@ mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ig */ MonoType* mono_reflection_get_type_checked (MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean *type_resolve, MonoError *error) { - mono_error_init (error); + error_init (error); return mono_reflection_get_type_with_rootimage (rootimage, image, info, ignorecase, type_resolve, error); } @@ -2050,7 +2053,7 @@ static MonoType* module_builder_array_get_type (MonoArrayHandle module_builders, int i, MonoImage *rootimage, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *type = NULL; MonoReflectionModuleBuilderHandle mb = MONO_HANDLE_NEW (MonoReflectionModuleBuilder, NULL); MONO_HANDLE_ARRAY_GETREF (mb, module_builders, i); @@ -2063,7 +2066,7 @@ static MonoType* module_array_get_type (MonoArrayHandle modules, int i, MonoImage *rootimage, MonoTypeNameParse *info, gboolean ignorecase, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *type = NULL; MonoReflectionModuleHandle mod = MONO_HANDLE_NEW (MonoReflectionModule, NULL); MONO_HANDLE_ARRAY_GETREF (mod, modules, i); @@ -2079,7 +2082,7 @@ mono_reflection_get_type_internal_dynamic (MonoImage *rootimage, MonoAssembly *a MonoType *type = NULL; int i; - mono_error_init (error); + error_init (error); g_assert (assembly_is_dynamic (assembly)); MonoReflectionAssemblyBuilderHandle abuilder = MONO_HANDLE_CAST (MonoReflectionAssemblyBuilder, mono_assembly_get_object_handle (((MonoDynamicAssembly*)assembly)->domain, assembly, error)); if (!is_ok (error)) @@ -2125,7 +2128,7 @@ mono_reflection_get_type_with_rootimage (MonoImage *rootimage, MonoImage* image, GString *fullName; GList *mod; - mono_error_init (error); + error_init (error); if (image && image_is_dynamic (image)) type = mono_reflection_get_type_internal_dynamic (rootimage, image->assembly, info, ignorecase, error); @@ -2232,7 +2235,7 @@ mono_reflection_type_from_name_checked (char *name, MonoImage *image, MonoError MonoTypeNameParse info; char *tmp; - mono_error_init (error); + error_init (error); /* Make a copy since parse_type modifies its argument */ tmp = g_strdup (name); @@ -2281,7 +2284,7 @@ mono_reflection_get_token_checked (MonoObjectHandle obj, MonoError *error) { guint32 token = 0; - mono_error_init (error); + error_init (error); MonoClass *klass = mono_handle_class (obj); @@ -2380,7 +2383,7 @@ mono_reflection_bind_generic_parameters (MonoReflectionTypeHandle reftype, int t gboolean is_dynamic = FALSE; MonoClass *geninst; - mono_error_init (error); + error_init (error); mono_loader_lock (); @@ -2446,7 +2449,7 @@ static MonoGenericInst* generic_inst_from_type_array_handle (MonoArrayHandle types, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoGenericInst *ginst = NULL; int count = mono_array_handle_length (types); MonoType **type_argv = g_new0 (MonoType *, count); @@ -2471,7 +2474,7 @@ reflection_bind_generic_method_parameters (MonoMethod *method, MonoArrayHandle t MonoMethod *inflated; MonoGenericContext tmp_context; - mono_error_init (error); + error_init (error); klass = method->klass; @@ -2504,7 +2507,7 @@ reflection_bind_generic_method_parameters (MonoMethod *method, MonoArrayHandle t MonoReflectionMethodHandle ves_icall_MonoMethod_MakeGenericMethod_impl (MonoReflectionMethodHandle rmethod, MonoArrayHandle types, MonoError *error) { - mono_error_init (error); + error_init (error); g_assert (0 != strcmp (mono_handle_class (rmethod)->name, "MethodBuilder")); MonoMethod *method = MONO_HANDLE_GETVAL (rmethod, method); @@ -2959,7 +2962,7 @@ mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, Mono void *params [1]; static MonoMethod *method = NULL; - mono_error_init (error); + error_init (error); if (method == NULL) { method = mono_class_get_method_from_name (mono_class_get_type_builder_class (), "IsAssignableTo", 1); diff --git a/mono/metadata/remoting.c b/mono/metadata/remoting.c index b85e950ab55..ecc5f942484 100644 --- a/mono/metadata/remoting.c +++ b/mono/metadata/remoting.c @@ -413,7 +413,7 @@ mono_remoting_wrapper (MonoMethod *method, gpointer *params) goto fail; if (exc) { - mono_error_init (&error); + error_init (&error); mono_error_set_exception_instance (&error, (MonoException *)exc); goto fail; } @@ -1917,7 +1917,7 @@ static gboolean xdomain_copy_array_element_inplace (MonoArrayHandle arr, int i, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoObjectHandle item = MONO_HANDLE_NEW (MonoObject, NULL); MONO_HANDLE_ARRAY_GETREF (item, arr, i); @@ -1940,7 +1940,7 @@ leave: MonoObjectHandle mono_marshal_xdomain_copy_value_handle (MonoObjectHandle val, MonoError *error) { - mono_error_init (error); + error_init (error); MonoObjectHandle result = MONO_HANDLE_NEW (MonoObject, NULL); if (MONO_HANDLE_IS_NULL (val)) goto leave; diff --git a/mono/metadata/runtime.c b/mono/metadata/runtime.c index 4e6e08c2b3e..df6643672e9 100644 --- a/mono/metadata/runtime.c +++ b/mono/metadata/runtime.c @@ -109,9 +109,6 @@ mono_runtime_try_shutdown (void) mono_runtime_set_shutting_down (); - /* This will kill the tp threads which cannot be suspended */ - mono_threadpool_cleanup (); - /*TODO move the follow to here: mono_thread_suspend_all_other_threads (); OR mono_thread_wait_all_other_threads diff --git a/mono/metadata/security-core-clr.c b/mono/metadata/security-core-clr.c index fab9cb946b0..4c93932b868 100644 --- a/mono/metadata/security-core-clr.c +++ b/mono/metadata/security-core-clr.c @@ -631,7 +631,7 @@ get_method_access_exception (const char *format, MonoMethod *caller, MonoMethod gboolean mono_security_core_clr_ensure_reflection_access_field (MonoClassField *field, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *caller = get_reflection_caller (); /* CoreCLR restrictions applies to Transparent code/caller */ if (mono_security_core_clr_method_level (caller, TRUE) != MONO_SECURITY_CORE_CLR_TRANSPARENT) @@ -672,7 +672,7 @@ mono_security_core_clr_ensure_reflection_access_field (MonoClassField *field, Mo gboolean mono_security_core_clr_ensure_reflection_access_method (MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); MonoMethod *caller = get_reflection_caller (); /* CoreCLR restrictions applies to Transparent code/caller */ if (mono_security_core_clr_method_level (caller, TRUE) != MONO_SECURITY_CORE_CLR_TRANSPARENT) @@ -748,7 +748,7 @@ mono_security_core_clr_ensure_delegate_creation (MonoMethod *method, MonoError * { MonoMethod *caller; - mono_error_init (error); + error_init (error); /* note: mscorlib creates delegates to avoid reflection (optimization), we ignore those cases */ if (can_avoid_corlib_reflection_delegate_optimization (method)) @@ -1061,21 +1061,21 @@ mono_security_core_clr_require_elevated_permissions (void) gboolean mono_security_core_clr_ensure_reflection_access_field (MonoClassField *field, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } gboolean mono_security_core_clr_ensure_reflection_access_method (MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } gboolean mono_security_core_clr_ensure_delegate_creation (MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); return TRUE; } diff --git a/mono/metadata/sgen-mono.c b/mono/metadata/sgen-mono.c index fc82365a933..1964c55b064 100644 --- a/mono/metadata/sgen-mono.c +++ b/mono/metadata/sgen-mono.c @@ -1051,7 +1051,7 @@ create_allocator (int atype, ManagedAllocatorVariant variant) { int p_var, size_var, real_size_var, thread_var G_GNUC_UNUSED; gboolean slowpath = variant == MANAGED_ALLOCATOR_SLOW_PATH; - guint32 slowpath_branch, max_size_branch; + guint32 fastpath_branch, max_size_branch, no_oom_branch; MonoMethodBuilder *mb; MonoMethod *res; MonoMethodSignature *csig; @@ -1318,7 +1318,7 @@ create_allocator (int atype, ManagedAllocatorVariant variant) /* if (G_LIKELY (new_next < tlab_temp_end)) */ mono_mb_emit_ldloc (mb, new_next_var); EMIT_TLS_ACCESS_TEMP_END (mb, thread_var); - slowpath_branch = mono_mb_emit_short_branch (mb, MONO_CEE_BLT_UN_S); + fastpath_branch = mono_mb_emit_short_branch (mb, MONO_CEE_BLT_UN_S); /* Slowpath */ if (atype != ATYPE_SMALL) @@ -1353,10 +1353,17 @@ create_allocator (int atype, ManagedAllocatorVariant variant) } else { g_assert_not_reached (); } + + /* if (ret == NULL) throw OOM; */ + mono_mb_emit_byte (mb, CEE_DUP); + no_oom_branch = mono_mb_emit_branch (mb, CEE_BRTRUE); + mono_mb_emit_exception (mb, "OutOfMemoryException", NULL); + + mono_mb_patch_branch (mb, no_oom_branch); mono_mb_emit_byte (mb, CEE_RET); /* Fastpath */ - mono_mb_patch_short_branch (mb, slowpath_branch); + mono_mb_patch_short_branch (mb, fastpath_branch); /* FIXME: Memory barrier */ @@ -1566,67 +1573,6 @@ sgen_has_managed_allocator (void) return FALSE; } -/* - * Cardtable scanning - */ - -#define MWORD_MASK (sizeof (mword) - 1) - -static inline int -find_card_offset (mword card) -{ -/*XXX Use assembly as this generates some pretty bad code */ -#if defined(__i386__) && defined(__GNUC__) - return (__builtin_ffs (card) - 1) / 8; -#elif defined(__x86_64__) && defined(__GNUC__) - return (__builtin_ffsll (card) - 1) / 8; -#elif defined(__s390x__) - return (__builtin_ffsll (GUINT64_TO_LE(card)) - 1) / 8; -#else - int i; - guint8 *ptr = (guint8 *) &card; - for (i = 0; i < sizeof (mword); ++i) { - if (ptr[i]) - return i; - } - return 0; -#endif -} - -static guint8* -find_next_card (guint8 *card_data, guint8 *end) -{ - mword *cards, *cards_end; - mword card; - - while ((((mword)card_data) & MWORD_MASK) && card_data < end) { - if (*card_data) - return card_data; - ++card_data; - } - - if (card_data == end) - return end; - - cards = (mword*)card_data; - cards_end = (mword*)((mword)end & ~MWORD_MASK); - while (cards < cards_end) { - card = *cards; - if (card) - return (guint8*)cards + find_card_offset (card); - ++cards; - } - - card_data = (guint8*)cards_end; - while (card_data < end) { - if (*card_data) - return card_data; - ++card_data; - } - - return end; -} - #define ARRAY_OBJ_INDEX(ptr,array,elem_size) (((char*)(ptr) - ((char*)(array) + G_STRUCT_OFFSET (MonoArray, vector))) / (elem_size)) gboolean @@ -1683,8 +1629,8 @@ sgen_client_cardtable_scan_object (GCObject *obj, guint8 *cards, ScanCopyContext LOOP_HEAD: #endif - card_data = find_next_card (card_data, card_data_end); - for (; card_data < card_data_end; card_data = find_next_card (card_data + 1, card_data_end)) { + card_data = sgen_find_next_card (card_data, card_data_end); + for (; card_data < card_data_end; card_data = sgen_find_next_card (card_data + 1, card_data_end)) { size_t index; size_t idx = (card_data - card_base) + extra_idx; char *start = (char*)(obj_start + idx * CARD_SIZE_IN_BYTES); @@ -2000,6 +1946,15 @@ precisely_report_roots_from (GCRootReport *report, void** start_root, void** end } break; } + case ROOT_DESC_VECTOR: { + void **p; + + for (p = start_root; p < end_root; p++) { + if (*p) + add_profile_gc_root (report, *p, MONO_PROFILE_GC_ROOT_OTHER, 0); + } + break; + } case ROOT_DESC_USER: { MonoGCRootMarkFunc marker = (MonoGCRootMarkFunc)sgen_get_user_descriptor_func (desc); root_report = report; diff --git a/mono/metadata/sre-encode.c b/mono/metadata/sre-encode.c index 143ece00c1d..97e6d57fa52 100644 --- a/mono/metadata/sre-encode.c +++ b/mono/metadata/sre-encode.c @@ -236,7 +236,7 @@ encode_reflection_type (MonoDynamicImage *assembly, MonoReflectionTypeHandle typ { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); if (!type) { sigbuffer_add_value (buf, MONO_TYPE_VOID); @@ -252,7 +252,7 @@ static void encode_reflection_type_raw (MonoDynamicImage *assembly, MonoReflectionType* type_raw, SigBuffer *buf, MonoError *error) { HANDLE_FUNCTION_ENTER (); /* FIXME callers of encode_reflection_type_raw should use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoReflectionType, type); encode_reflection_type (assembly, type, buf, error); HANDLE_FUNCTION_RETURN (); @@ -267,7 +267,7 @@ encode_custom_modifiers (MonoDynamicImage *assembly, MonoArrayHandle modreq, Mon int i; - mono_error_init (error); + error_init (error); if (!MONO_HANDLE_IS_NULL (modreq)) { for (i = 0; i < mono_array_handle_length (modreq); ++i) { @@ -295,7 +295,7 @@ static void encode_custom_modifiers_raw (MonoDynamicImage *assembly, MonoArray *modreq_raw, MonoArray *modopt_raw, SigBuffer *buf, MonoError *error) { HANDLE_FUNCTION_ENTER (); /* FIXME callers of encode_custom_modifiers_raw should use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoArray, modreq); MONO_HANDLE_DCL (MonoArray, modopt); encode_custom_modifiers (assembly, modreq, modopt, buf, error); @@ -354,7 +354,7 @@ mono_dynimage_encode_method_builder_signature (MonoDynamicImage *assembly, Refle { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); /* * FIXME: reuse code from method_encode_signature(). @@ -424,7 +424,7 @@ mono_dynimage_encode_locals (MonoDynamicImage *assembly, MonoReflectionILGen *il { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDynamicTable *table; guint32 *values; @@ -623,7 +623,7 @@ mono_dynimage_encode_field_signature (MonoDynamicImage *assembly, MonoReflection { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); SigBuffer buf; guint32 idx; @@ -858,7 +858,7 @@ static gboolean encode_sighelper_arg (MonoDynamicImage *assembly, int i, MonoArrayHandle helper_arguments, MonoArrayHandle helper_modreqs, MonoArrayHandle helper_modopts, SigBuffer* buf, MonoError *error) { HANDLE_FUNCTION_ENTER(); - mono_error_init (error); + error_init (error); MonoArrayHandle modreqs = MONO_HANDLE_NEW (MonoArray, NULL); MonoArrayHandle modopts = MONO_HANDLE_NEW (MonoArray, NULL); @@ -886,7 +886,7 @@ mono_dynimage_encode_reflection_sighelper (MonoDynamicImage *assembly, MonoRefle guint32 nargs; guint32 i, idx; - mono_error_init (error); + error_init (error); if (!assembly->save) return 0; @@ -957,7 +957,7 @@ reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig, MonoErro MonoArray *result; SigBuffer buf; - mono_error_init (error); + error_init (error); sigbuffer_init (&buf, 32); @@ -991,7 +991,7 @@ reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig, MonoErro MonoArray *result; SigBuffer buf; - mono_error_init (error); + error_init (error); sigbuffer_init (&buf, 32); @@ -1029,7 +1029,7 @@ mono_dynimage_save_encode_marshal_blob (MonoDynamicImage *assembly, MonoReflecti { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); char *str; SigBuffer buf; @@ -1127,7 +1127,7 @@ mono_dynimage_save_encode_property_signature (MonoDynamicImage *assembly, MonoRe { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); SigBuffer buf; guint32 nparams = 0; diff --git a/mono/metadata/sre-save.c b/mono/metadata/sre-save.c index 20d9e47a4a3..f1cddf7cac5 100644 --- a/mono/metadata/sre-save.c +++ b/mono/metadata/sre-save.c @@ -180,7 +180,7 @@ static guint32 image_create_token_raw (MonoDynamicImage *assembly, MonoObject* obj_raw, gboolean create_methodspec, gboolean register_token, MonoError *error) { HANDLE_FUNCTION_ENTER (); /* FIXME callers of image_create_token_raw should use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoObject, obj); guint32 result = mono_image_create_token (assembly, obj, create_methodspec, register_token, error); HANDLE_FUNCTION_RETURN_VAL (result); @@ -203,7 +203,7 @@ mono_image_add_cattrs (MonoDynamicImage *assembly, guint32 idx, guint32 type, Mo char blob_size [6]; char *p = blob_size; - mono_error_init (error); + error_init (error); /* it is legal to pass a NULL cattrs: we avoid to use the if in a lot of places */ if (!cattrs) @@ -329,7 +329,7 @@ method_encode_code (MonoDynamicImage *assembly, ReflectionMethodBuilder *mb, Mon guint32 header_size = 12; MonoArray *code; - mono_error_init (error); + error_init (error); if ((mb->attrs & (METHOD_ATTRIBUTE_PINVOKE_IMPL | METHOD_ATTRIBUTE_ABSTRACT)) || (mb->iattrs & (METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL | METHOD_IMPL_ATTRIBUTE_RUNTIME))) @@ -491,7 +491,7 @@ mono_image_basic_method (ReflectionMethodBuilder *mb, MonoDynamicImage *assembly guint32 *values; guint i, count; - mono_error_init (error); + error_init (error); /* room in this table is already allocated */ table = &assembly->tables [MONO_TABLE_METHOD]; @@ -579,7 +579,7 @@ mono_image_add_methodimpl (MonoDynamicImage *assembly, MonoReflectionMethodBuild MonoReflectionMethod *m; int i; - mono_error_init (error); + error_init (error); if (!mb->override_methods) return TRUE; @@ -624,7 +624,7 @@ mono_image_get_method_info (MonoReflectionMethodBuilder *mb, MonoDynamicImage *a ReflectionMethodBuilder rmb; int i; - mono_error_init (error); + error_init (error); if (!mono_reflection_methodbuilder_from_method_builder (&rmb, mb, error) || !mono_image_basic_method (&rmb, assembly, error)) @@ -701,7 +701,7 @@ mono_image_get_field_info (MonoReflectionFieldBuilder *fb, MonoDynamicImage *ass { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDynamicTable *table; guint32 *values; @@ -772,7 +772,7 @@ mono_image_get_property_info (MonoReflectionPropertyBuilder *pb, MonoDynamicImag { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDynamicTable *table; guint32 *values; @@ -898,7 +898,7 @@ encode_constraints (MonoReflectionGenericParam *gparam, guint32 owner, MonoDynam { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoDynamicTable *table; guint32 num_constraints, i; @@ -971,7 +971,7 @@ write_generic_param_entry (MonoDynamicImage *assembly, GenericParamTableEntry *e guint32 *values; guint32 table_idx; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_GENERICPARAM]; table_idx = table->next_idx ++; @@ -1028,7 +1028,7 @@ static gboolean params_add_cattrs (MonoDynamicImage *assembly, MonoArray *pinfo, MonoError *error) { int i; - mono_error_init (error); + error_init (error); if (!pinfo) return TRUE; for (i = 0; i < mono_array_length (pinfo); ++i) { @@ -1047,7 +1047,7 @@ static gboolean type_add_cattrs (MonoDynamicImage *assembly, MonoReflectionTypeBuilder *tb, MonoError *error) { int i; - mono_error_init (error); + error_init (error); if (!mono_image_add_cattrs (assembly, tb->table_idx, MONO_CUSTOM_ATTR_TYPEDEF, tb->cattrs, error)) return FALSE; @@ -1110,7 +1110,7 @@ module_add_cattrs (MonoDynamicImage *assembly, MonoReflectionModuleBuilder *modu { int i; - mono_error_init (error); + error_init (error); if (!mono_image_add_cattrs (assembly, moduleb->table_idx, MONO_CUSTOM_ATTR_MODULE, moduleb->cattrs, error)) return FALSE; @@ -1152,7 +1152,7 @@ mono_image_fill_file_table (MonoDomain *domain, MonoReflectionModule *module, Mo char *b = blob_size; char *dir, *path; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_FILE]; table->rows++; @@ -1185,7 +1185,7 @@ mono_image_fill_module_table (MonoDomain *domain, MonoReflectionModuleBuilder *m MonoDynamicTable *table; int i; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_MODULE]; mb->table_idx = table->next_idx ++; @@ -1247,7 +1247,7 @@ mono_image_fill_export_table (MonoDomain *domain, MonoReflectionTypeBuilder *tb, MonoClass *klass; guint32 idx, i; - mono_error_init (error); + error_init (error); MonoType *t = mono_reflection_type_get_handle ((MonoReflectionType*)tb, error); return_if_nok (error); @@ -1479,7 +1479,7 @@ build_compressed_metadata (MonoDynamicImage *assembly, MonoError *error) unsigned char *p; struct StreamDesc stream_desc [5]; - mono_error_init (error); + error_init (error); qsort (assembly->gen_params->pdata, assembly->gen_params->len, sizeof (gpointer), compare_genericparam); for (i = 0; i < assembly->gen_params->len; i++) { @@ -1855,7 +1855,7 @@ assembly_add_resource_manifest (MonoReflectionModuleBuilder *mb, MonoDynamicImag MonoDynamicTable *table; guint32 *values; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_MANIFESTRESOURCE]; table->rows++; @@ -1881,7 +1881,7 @@ assembly_add_resource (MonoReflectionModuleBuilder *mb, MonoDynamicImage *assemb char *name, *sname; guint32 idx, offset; - mono_error_init (error); + error_init (error); if (rsrc->filename) { name = mono_string_to_utf8_checked (rsrc->filename, error); @@ -1941,7 +1941,7 @@ set_version_from_string (MonoString *version, guint32 *values, MonoError *error) gchar *ver, *p, *str; guint32 i; - mono_error_init (error); + error_init (error); values [MONO_ASSEMBLY_MAJOR_VERSION] = 0; values [MONO_ASSEMBLY_MINOR_VERSION] = 0; @@ -2015,7 +2015,7 @@ mono_image_emit_manifest (MonoReflectionModuleBuilder *moduleb, MonoError *error int i; guint32 module_index; - mono_error_init (error); + error_init (error); assemblyb = moduleb->assemblyb; assembly = moduleb->dynamic_image; @@ -2107,7 +2107,7 @@ mono_image_get_type_info (MonoDomain *domain, MonoReflectionTypeBuilder *tb, Mon int i, is_object = 0, is_system = 0; char *n; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_TYPEDEF]; values = table->values + tb->table_idx * MONO_TYPEDEF_SIZE; @@ -2298,7 +2298,7 @@ mono_image_build_metadata (MonoReflectionModuleBuilder *moduleb, MonoError *erro guint32 *values; int i, j; - mono_error_init (error); + error_init (error); assemblyb = moduleb->assemblyb; assembly = moduleb->dynamic_image; @@ -2776,7 +2776,7 @@ mono_image_create_pefile (MonoReflectionModuleBuilder *mb, HANDLE file, MonoErro 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - mono_error_init (error); + error_init (error); assemblyb = mb->assemblyb; diff --git a/mono/metadata/sre.c b/mono/metadata/sre.c index fbde1f1cc0f..67800081470 100644 --- a/mono/metadata/sre.c +++ b/mono/metadata/sre.c @@ -90,7 +90,7 @@ string_to_utf8_image_raw (MonoImage *image, MonoString *s_raw, MonoError *error) /* FIXME all callers to string_to_utf8_image_raw should use handles */ HANDLE_FUNCTION_ENTER (); char* result = NULL; - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoString, s); result = mono_string_to_utf8_image (image, s, error); HANDLE_FUNCTION_RETURN_VAL (result); @@ -296,7 +296,7 @@ method_encode_clauses (MonoImage *image, MonoDynamicImage *assembly, MonoReflect { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); MonoExceptionClause *clauses; MonoExceptionClause *clause; @@ -454,7 +454,7 @@ mono_reflection_methodbuilder_from_method_builder (ReflectionMethodBuilder *rmb, { MONO_REQ_GC_UNSAFE_MODE; - mono_error_init (error); + error_init (error); memset (rmb, 0, sizeof (ReflectionMethodBuilder)); rmb->ilgen = mb->ilgen; @@ -501,7 +501,7 @@ mono_reflection_methodbuilder_from_ctor_builder (ReflectionMethodBuilder *rmb, M const char *name = mb->attrs & METHOD_ATTRIBUTE_STATIC ? ".cctor": ".ctor"; - mono_error_init (error); + error_init (error); memset (rmb, 0, sizeof (ReflectionMethodBuilder)); @@ -848,7 +848,7 @@ mono_image_get_sighelper_token (MonoDynamicImage *assembly, MonoReflectionSigHel MonoDynamicTable *table; guint32 *values; - mono_error_init (error); + error_init (error); table = &assembly->tables [MONO_TABLE_STANDALONESIG]; idx = table->next_idx ++; @@ -898,7 +898,7 @@ mono_image_get_array_token (MonoDynamicImage *assembly, MonoReflectionArrayMetho MonoMethodSignature *sig = NULL; char *name = NULL; - mono_error_init (error); + error_init (error); MonoArrayHandle parameters = MONO_HANDLE_NEW_GET (MonoArray, m, parameters); guint32 nparams = mono_array_handle_length (parameters); @@ -1066,7 +1066,7 @@ mono_image_create_method_token (MonoDynamicImage *assembly, MonoObjectHandle obj { guint32 token = 0; - mono_error_init (error); + error_init (error); MonoClass *klass = mono_handle_class (obj); if (strcmp (klass->name, "MonoMethod") == 0 || strcmp (klass->name, "MonoCMethod") == 0) { @@ -1107,7 +1107,7 @@ mono_image_create_token (MonoDynamicImage *assembly, MonoObjectHandle obj, { guint32 token = 0; - mono_error_init (error); + error_init (error); MonoClass *klass = mono_handle_class (obj); @@ -1303,7 +1303,7 @@ register_module (MonoDomain *domain, MonoReflectionModuleBuilderHandle res, Mono static gboolean image_module_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error) { - mono_error_init (error); + error_init (error); MonoDomain *domain = MONO_HANDLE_DOMAIN (moduleb); MonoDynamicImage *image = MONO_HANDLE_GETVAL (moduleb, dynamic_image); MonoReflectionAssemblyBuilderHandle ab = MONO_HANDLE_NEW (MonoReflectionAssemblyBuilder, NULL); @@ -1351,7 +1351,7 @@ image_module_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *e static gboolean mono_image_module_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error) { - mono_error_init (error); + error_init (error); return image_module_basic_init (moduleb, error); } @@ -1379,7 +1379,7 @@ MonoType* mono_type_array_get_and_resolve (MonoArrayHandle array, int idx, MonoError *error) { HANDLE_FUNCTION_ENTER(); - mono_error_init (error); + error_init (error); MonoReflectionTypeHandle t = MONO_HANDLE_NEW (MonoReflectionType, NULL); MONO_HANDLE_ARRAY_GETREF (t, array, idx); MonoType *result = mono_reflection_type_handle_mono_type (t, error); @@ -1466,7 +1466,7 @@ mono_reflection_type_get_underlying_system_type (MonoReflectionTypeHandle t, Mon static MonoMethod *method_get_underlying_system_type = NULL; HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); if (!method_get_underlying_system_type) method_get_underlying_system_type = mono_class_get_method_from_name (mono_defaults.systemtype_class, "get_UnderlyingSystemType", 0); @@ -1487,7 +1487,7 @@ MonoType* mono_reflection_type_get_handle (MonoReflectionType* ref_raw, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoReflectionType, ref); MonoType *result = mono_reflection_type_handle_mono_type (ref, error); HANDLE_FUNCTION_RETURN_VAL (result); @@ -1539,7 +1539,7 @@ static MonoType* reflection_param_handle_mono_type (MonoReflectionGenericParamHandle ref_gparam, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType *result = NULL; @@ -1596,7 +1596,7 @@ static MonoType* mono_type_array_get_and_resolve_raw (MonoArray* array_raw, int idx, MonoError *error) { HANDLE_FUNCTION_ENTER(); /* FIXME callers of mono_type_array_get_and_resolve_raw should use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoArray, array); MonoType *result = mono_type_array_get_and_resolve (array, idx, error); HANDLE_FUNCTION_RETURN_VAL (result); @@ -1606,7 +1606,7 @@ MonoType* mono_reflection_type_handle_mono_type (MonoReflectionTypeHandle ref, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoType* result = NULL; @@ -1694,7 +1694,7 @@ parameters_to_signature (MonoImage *image, MonoArrayHandle parameters, MonoError MonoMethodSignature *sig; int count, i; - mono_error_init (error); + error_init (error); count = MONO_HANDLE_IS_NULL (parameters) ? 0 : mono_array_handle_length (parameters); @@ -1718,7 +1718,7 @@ static MonoMethodSignature* ctor_builder_to_signature (MonoImage *image, MonoReflectionCtorBuilderHandle ctor, MonoError *error) { MonoMethodSignature *sig; - mono_error_init (error); + error_init (error); sig = parameters_to_signature (image, MONO_HANDLE_NEW_GET (MonoArray, ctor, parameters), error); return_val_if_nok (error, NULL); @@ -1741,7 +1741,7 @@ static MonoMethodSignature* method_builder_to_signature (MonoImage *image, MonoReflectionMethodBuilderHandle method, MonoError *error) { MonoMethodSignature *sig; - mono_error_init (error); + error_init (error); sig = parameters_to_signature (image, MONO_HANDLE_NEW_GET(MonoArray, method, parameters), error); return_val_if_nok (error, NULL); @@ -1766,7 +1766,7 @@ dynamic_method_to_signature (MonoReflectionDynamicMethodHandle method, MonoError HANDLE_FUNCTION_ENTER (); MonoMethodSignature *sig = NULL; - mono_error_init (error); + error_init (error); sig = parameters_to_signature (NULL, MONO_HANDLE_NEW_GET (MonoArray, method, parameters), error); if (!is_ok (error)) @@ -1791,7 +1791,7 @@ leave: static void get_prop_name_and_type (MonoObject *prop, char **name, MonoType **type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass = mono_object_class (prop); if (strcmp (klass->name, "PropertyBuilder") == 0) { MonoReflectionPropertyBuilder *pb = (MonoReflectionPropertyBuilder *)prop; @@ -1811,7 +1811,7 @@ get_prop_name_and_type (MonoObject *prop, char **name, MonoType **type, MonoErro static void get_field_name_and_type (MonoObject *field, char **name, MonoType **type, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass = mono_object_class (field); if (strcmp (klass->name, "FieldBuilder") == 0) { MonoReflectionFieldBuilder *fb = (MonoReflectionFieldBuilder *)field; @@ -1923,7 +1923,7 @@ encode_cattr_value (MonoAssembly *assembly, char *buffer, char *p, char **retbuf { MonoTypeEnum simple_type; - mono_error_init (error); + error_init (error); if ((p-buffer) + 10 >= *buflen) { char *newbuf; *buflen *= 2; @@ -2177,7 +2177,7 @@ encode_named_val (MonoReflectionAssembly *assembly, char *buffer, char *p, char { int len; - mono_error_init (error); + error_init (error); /* Preallocate a large enough buffer */ if (type->type == MONO_TYPE_VALUETYPE && type->data.klass->enumtype) { @@ -2259,7 +2259,7 @@ mono_reflection_get_custom_attrs_blob_checked (MonoReflectionAssembly *assembly, char *buffer, *p; guint32 buflen, i; - mono_error_init (error); + error_init (error); if (strcmp (ctor->vtable->klass->name, "MonoCMethod")) { /* sig is freed later so allocate it in the heap */ @@ -2351,7 +2351,7 @@ static gboolean reflection_setup_internal_class (MonoReflectionTypeBuilderHandle ref_tb, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); mono_loader_lock (); @@ -2493,7 +2493,7 @@ reflection_create_generic_class (MonoReflectionTypeBuilderHandle ref_tb, MonoErr { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); reflection_setup_internal_class (ref_tb, error); if (!is_ok (error)) @@ -2548,7 +2548,7 @@ mono_marshal_spec_from_builder (MonoImage *image, MonoAssembly *assembly, { MonoMarshalSpec *res; - mono_error_init (error); + error_init (error); res = image_g_new0 (image, MonoMarshalSpec, 1); res->native = (MonoMarshalNative)minfo->type; @@ -2604,7 +2604,7 @@ MonoReflectionMarshalAsAttributeHandle mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error) { - mono_error_init (error); + error_init (error); MonoReflectionMarshalAsAttributeHandle minfo = MONO_HANDLE_NEW (MonoReflectionMarshalAsAttribute, mono_object_new_checked (domain, mono_class_get_marshal_as_attribute_class (), error)); if (!is_ok (error)) @@ -2676,7 +2676,7 @@ reflection_methodbuilder_to_mono_method (MonoClass *klass, gboolean dynamic; int i; - mono_error_init (error); + error_init (error); /* * Methods created using a MethodBuilder should have their memory allocated * inside the image mempool, while dynamic methods should have their memory @@ -2976,7 +2976,7 @@ methodbuilder_to_mono_method (MonoClass *klass, MonoReflectionMethodBuilderHandl ReflectionMethodBuilder rmb; MonoMethodSignature *sig; - mono_error_init (error); + error_init (error); mono_loader_lock (); @@ -3004,7 +3004,7 @@ static MonoMethod* methodbuilder_to_mono_method_raw (MonoClass *klass, MonoReflectionMethodBuilder* mb_raw, MonoError *error) { HANDLE_FUNCTION_ENTER (); /* FIXME change callers of methodbuilder_to_mono_method_raw to use handles */ - mono_error_init (error); + error_init (error); MONO_HANDLE_DCL (MonoReflectionMethodBuilder, mb); MonoMethod *result = methodbuilder_to_mono_method (klass, mb, error); HANDLE_FUNCTION_RETURN_VAL (result); @@ -3032,7 +3032,7 @@ fix_partial_generic_class (MonoClass *klass, MonoError *error) MonoClass *gklass = mono_class_get_generic_class (klass)->container_class; int i; - mono_error_init (error); + error_init (error); if (klass->wastypebuilder) return TRUE; @@ -3121,7 +3121,7 @@ ensure_generic_class_runtime_vtable (MonoClass *klass, MonoError *error) { MonoClass *gklass = mono_class_get_generic_class (klass)->container_class; - mono_error_init (error); + error_init (error); if (!ensure_runtime_vtable (gklass, error)) return FALSE; @@ -3143,7 +3143,7 @@ ensure_runtime_vtable (MonoClass *klass, MonoError *error) MonoReflectionTypeBuilder *tb = (MonoReflectionTypeBuilder *)mono_class_get_ref_info_raw (klass); /* FIXME use handles */ int i, num, j; - mono_error_init (error); + error_init (error); if (!image_is_dynamic (klass->image) || (!tb && !mono_class_is_ginst (klass)) || klass->wastypebuilder) return TRUE; @@ -3222,7 +3222,7 @@ ensure_runtime_vtable (MonoClass *klass, MonoError *error) static MonoMethod* mono_reflection_method_get_handle (MonoObject *method, MonoError *error) { - mono_error_init (error); + error_init (error); MonoClass *klass = mono_object_class (method); if (is_sr_mono_method (klass)) { MonoReflectionMethod *sr_method = (MonoReflectionMethod*)method; @@ -3252,7 +3252,7 @@ mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides int i, j, onum; MonoReflectionMethod *m; - mono_error_init (error); + error_init (error); *overrides = NULL; *num_overrides = 0; @@ -3324,7 +3324,7 @@ typebuilder_setup_fields (MonoClass *klass, MonoError *error) int fcount = tb->num_fields; mono_class_set_field_count (klass, fcount); - mono_error_init (error); + error_init (error); if (tb->class_size) { packing_size = tb->packing_size; @@ -3399,7 +3399,7 @@ typebuilder_setup_properties (MonoClass *klass, MonoError *error) MonoClassPropertyInfo *info; int i; - mono_error_init (error); + error_init (error); info = mono_class_get_property_info (klass); if (!info) { @@ -3453,7 +3453,7 @@ typebuilder_setup_events (MonoClass *klass, MonoError *error) MonoClassEventInfo *info; int i; - mono_error_init (error); + error_init (error); info = mono_class_alloc0 (klass, sizeof (MonoClassEventInfo)); mono_class_set_event_info (klass, info); @@ -3529,7 +3529,7 @@ remove_instantiations_of_and_ensure_contents (gpointer key, MonoReflectionTypeHandle ves_icall_TypeBuilder_create_runtime_class (MonoReflectionTypeBuilderHandle ref_tb, MonoError *error) { - mono_error_init (error); + error_init (error); reflection_create_generic_class (ref_tb, error); mono_error_assert_ok (error); @@ -3704,7 +3704,7 @@ reflection_create_dynamic_method (MonoReflectionDynamicMethodHandle ref_mb, Mono GSList *l; int i; - mono_error_init (error); + error_init (error); if (mono_runtime_is_shutting_down ()) { mono_error_set_generic_error (error, "System", "InvalidOperationException", ""); @@ -3843,7 +3843,7 @@ mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 MonoMethodSignature *sig; g_assert (image_is_dynamic (image)); - mono_error_init (error); + error_init (error); sig = (MonoMethodSignature *)g_hash_table_lookup (((MonoDynamicImage*)image)->vararg_aux_hash, GUINT_TO_POINTER (token)); if (sig) @@ -3863,7 +3863,7 @@ mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 static void ensure_complete_type (MonoClass *klass, MonoError *error) { - mono_error_init (error); + error_init (error); if (image_is_dynamic (klass->image) && !klass->wastypebuilder && mono_class_has_ref_info (klass)) { MonoReflectionTypeBuilder *tb = (MonoReflectionTypeBuilder *)mono_class_get_ref_info_raw (klass); /* FIXME use handles */ @@ -3892,7 +3892,7 @@ mono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **h MonoClass *oklass = obj->vtable->klass; gpointer result = NULL; - mono_error_init (error); + error_init (error); if (strcmp (oklass->name, "String") == 0) { result = mono_string_intern_checked ((MonoString*)obj, error); @@ -4120,7 +4120,7 @@ mono_image_create_token (MonoDynamicImage *assembly, MonoObjectHandle obj, void mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides, MonoError *error) { - mono_error_init (error); + error_init (error); *overrides = NULL; *num_overrides = 0; } @@ -4135,13 +4135,13 @@ ves_icall_TypeBuilder_create_runtime_class (MonoReflectionTypeBuilderHandle tb, void ves_icall_DynamicMethod_create_dynamic_method (MonoReflectionDynamicMethodHandle mb, MonoError *error) { - mono_error_init (error); + error_init (error); } MonoType* mono_reflection_type_get_handle (MonoReflectionType* ref, MonoError *error) { - mono_error_init (error); + error_init (error); if (!ref) return NULL; return ref->type; @@ -4150,7 +4150,7 @@ mono_reflection_type_get_handle (MonoReflectionType* ref, MonoError *error) MonoType* mono_reflection_type_handle_mono_type (MonoReflectionTypeHandle ref, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (ref)) return NULL; return MONO_HANDLE_GETVAL (ref, type); @@ -4169,7 +4169,7 @@ mono_sre_generic_param_table_entry_free (GenericParamTableEntry *entry) gint32 ves_icall_ModuleBuilder_getToken (MonoReflectionModuleBuilderHandle mb, MonoObjectHandle obj, gboolean create_open_instance, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (obj)) { mono_error_set_argument_null (error, "obj", ""); return 0; @@ -4183,7 +4183,7 @@ ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilderHandle mb, MonoArrayHandle opt_param_types, MonoError *error) { - mono_error_init (error); + error_init (error); if (MONO_HANDLE_IS_NULL (method)) { mono_error_set_argument_null (error, "method", ""); return 0; @@ -4211,7 +4211,7 @@ ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb) void ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilderHandle mb, MonoObjectHandle obj, guint32 token, MonoError *error) { - mono_error_init (error); + error_init (error); mono_dynamic_image_register_token (MONO_HANDLE_GETVAL (mb, dynamic_image), token, obj); } @@ -4254,7 +4254,7 @@ ves_icall_EnumBuilder_setup_enum_type (MonoReflectionType *enumtype, void ves_icall_ModuleBuilder_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error) { - mono_error_init (error); + error_init (error); mono_image_module_basic_init (moduleb, error); } diff --git a/mono/metadata/threadpool-io.c b/mono/metadata/threadpool-io.c index ace9a00bf6a..4f4fa7b1559 100644 --- a/mono/metadata/threadpool-io.c +++ b/mono/metadata/threadpool-io.c @@ -306,6 +306,12 @@ wait_callback (gint fd, gint events, gpointer user_data) } } +static void +selector_thread_interrupt (gpointer unused) +{ + selector_thread_wakeup (); +} + static gsize WINAPI selector_thread (gpointer data) { @@ -319,11 +325,15 @@ selector_thread (gpointer data) return 0; } - states = mono_g_hash_table_new_type (g_direct_hash, g_direct_equal, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, "i/o thread pool states table"); + states = mono_g_hash_table_new_type (g_direct_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, "i/o thread pool states table"); - for (;;) { + while (!mono_runtime_is_shutting_down ()) { gint i, j; gint res; + gboolean interrupted = FALSE; + + if (mono_thread_interruption_checkpoint ()) + continue; mono_coop_mutex_lock (&threadpool_io->updates_lock); @@ -422,10 +432,15 @@ selector_thread (gpointer data) mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_THREADPOOL, "io threadpool: wai"); - res = threadpool_io->backend.event_wait (wait_callback, states); + mono_thread_info_install_interrupt (selector_thread_interrupt, NULL, &interrupted); + if (interrupted) + continue; - if (res == -1 || mono_runtime_is_shutting_down ()) + res = threadpool_io->backend.event_wait (wait_callback, states); + if (res == -1) break; + + mono_thread_info_uninstall_interrupt (&interrupted); } mono_g_hash_table_destroy (states); @@ -548,13 +563,7 @@ initialize (void) static void cleanup (void) { - /* we make the assumption along the code that we are - * cleaning up only if the runtime is shutting down */ - g_assert (mono_runtime_is_shutting_down ()); - - selector_thread_wakeup (); - while (io_selector_running) - mono_thread_info_usleep (1000); + // FIXME destroy everything } void diff --git a/mono/metadata/threadpool-worker-default.c b/mono/metadata/threadpool-worker-default.c index a0cdd9a2170..5fc716a74e7 100644 --- a/mono/metadata/threadpool-worker-default.c +++ b/mono/metadata/threadpool-worker-default.c @@ -124,18 +124,14 @@ typedef union { gint64 as_gint64; } ThreadPoolWorkerCounter; -typedef MonoInternalThread ThreadPoolWorkerThread; - typedef struct { MonoRefCount ref; ThreadPoolWorkerCounter counters; - GPtrArray *threads; // ThreadPoolWorkerThread* [] - MonoCoopMutex threads_lock; /* protect access to working_threads and parked_threads */ + MonoCoopMutex parked_threads_lock; gint32 parked_threads_count; MonoCoopCond parked_threads_cond; - MonoCoopCond threads_exit_cond; ThreadPoolWorkItem *work_items; // ThreadPoolWorkItem [] gint32 work_items_count; @@ -221,8 +217,7 @@ rand_next (gpointer *handle, guint32 min, guint32 max) static void destroy (gpointer data) { -#if 0 - mono_coop_mutex_destroy (&worker.threads_lock); + mono_coop_mutex_destroy (&worker.parked_threads_lock); mono_coop_cond_destroy (&worker.parked_threads_cond); mono_coop_mutex_destroy (&worker.work_items_lock); @@ -232,7 +227,6 @@ destroy (gpointer data) mono_coop_mutex_destroy (&worker.heuristic_lock); g_free (worker.cpu_usage_state); -#endif } void @@ -245,11 +239,9 @@ mono_threadpool_worker_init (void) mono_refcount_init (&worker, destroy); - worker.threads = g_ptr_array_new (); - mono_coop_mutex_init (&worker.threads_lock); + mono_coop_mutex_init (&worker.parked_threads_lock); worker.parked_threads_count = 0; mono_coop_cond_init (&worker.parked_threads_cond); - mono_coop_cond_init (&worker.threads_exit_cond); /* worker.work_items_size is inited to 0 */ mono_coop_mutex_init (&worker.work_items_lock); @@ -316,43 +308,6 @@ mono_threadpool_worker_init (void) void mono_threadpool_worker_cleanup (void) { - MonoInternalThread *current; - - /* we make the assumption along the code that we are - * cleaning up only if the runtime is shutting down */ - g_assert (mono_runtime_is_shutting_down ()); - - current = mono_thread_internal_current (); - - while (worker.monitor_status != MONITOR_STATUS_NOT_RUNNING) - mono_thread_info_sleep (1, NULL); - - mono_coop_mutex_lock (&worker.threads_lock); - - /* unpark all worker.parked_threads */ - mono_coop_cond_broadcast (&worker.parked_threads_cond); - -#if 0 - for (;;) { - ThreadPoolWorkerCounter counter; - - counter = COUNTER_READ (); - if (counter._.starting + counter._.working + counter._.parked == 0) - break; - - if (counter._.starting + counter._.working + counter._.parked == 1) { - if (worker.threads->len == 1 && g_ptr_array_index (worker.threads, 0) == current) { - /* We are waiting on ourselves */ - break; - } - } - - mono_coop_cond_wait (&worker.threads_exit_cond, &worker.threads_lock); - } -#endif - - mono_coop_mutex_unlock (&worker.threads_lock); - mono_refcount_dec (&worker); } @@ -441,17 +396,33 @@ static void worker_request (void); void mono_threadpool_worker_enqueue (MonoThreadPoolWorkerCallback callback, gpointer data) { + if (!mono_refcount_tryinc (&worker)) + return; + work_item_push (callback, data); worker_request (); + + mono_refcount_dec (&worker); } static void worker_wait_interrupt (gpointer unused) { - mono_coop_mutex_lock (&worker.threads_lock); - mono_coop_cond_signal (&worker.parked_threads_cond); - mono_coop_mutex_unlock (&worker.threads_lock); + /* If the runtime is not shutting down, we are not using this mechanism to wake up a unparked thread, and if the + * runtime is shutting down, then we need to wake up ALL the threads. + * It might be a bit wasteful, but I witnessed shutdown hang where the main thread would abort and then wait for all + * background threads to exit (see mono_thread_manage). This would go wrong because not all threadpool threads would + * be unparked. It would end up getting unstucked because of the timeout, but that would delay shutdown by 5-60s. */ + if (!mono_runtime_is_shutting_down ()) + return; + + if (!mono_refcount_tryinc (&worker)) + return; + + mono_coop_mutex_lock (&worker.parked_threads_lock); + mono_coop_cond_broadcast (&worker.parked_threads_cond); + mono_coop_mutex_unlock (&worker.parked_threads_lock); mono_refcount_dec (&worker); } @@ -461,15 +432,15 @@ static gboolean worker_park (void) { gboolean timeout = FALSE; + gboolean interrupted = FALSE; - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker parking", mono_native_thread_id_get ()); + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker parking", mono_native_thread_id_get ()); - mono_coop_mutex_lock (&worker.threads_lock); + mono_coop_mutex_lock (&worker.parked_threads_lock); if (!mono_runtime_is_shutting_down ()) { static gpointer rand_handle = NULL; MonoInternalThread *thread; - gboolean interrupted = FALSE; ThreadPoolWorkerCounter counter; if (!rand_handle) @@ -486,19 +457,14 @@ worker_park (void) worker.parked_threads_count += 1; - mono_refcount_inc (&worker); mono_thread_info_install_interrupt (worker_wait_interrupt, NULL, &interrupted); - if (interrupted) { - mono_refcount_dec (&worker); + if (interrupted) goto done; - } - if (mono_coop_cond_timedwait (&worker.parked_threads_cond, &worker.threads_lock, rand_next (&rand_handle, 5 * 1000, 60 * 1000)) != 0) + if (mono_coop_cond_timedwait (&worker.parked_threads_cond, &worker.parked_threads_lock, rand_next (&rand_handle, 5 * 1000, 60 * 1000)) != 0) timeout = TRUE; mono_thread_info_uninstall_interrupt (&interrupted); - if (!interrupted) - mono_refcount_dec (&worker); done: worker.parked_threads_count -= 1; @@ -509,9 +475,10 @@ done: }); } - mono_coop_mutex_unlock (&worker.threads_lock); + mono_coop_mutex_unlock (&worker.parked_threads_lock); - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker unparking, timeout? %s", mono_native_thread_id_get (), timeout ? "yes" : "no"); + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker unparking, timeout? %s interrupted? %s", + mono_native_thread_id_get (), timeout ? "yes" : "no", interrupted ? "yes" : "no"); return timeout; } @@ -523,12 +490,12 @@ worker_try_unpark (void) mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] try unpark worker", mono_native_thread_id_get ()); - mono_coop_mutex_lock (&worker.threads_lock); + mono_coop_mutex_lock (&worker.parked_threads_lock); if (worker.parked_threads_count > 0) { mono_coop_cond_signal (&worker.parked_threads_cond); res = TRUE; } - mono_coop_mutex_unlock (&worker.threads_lock); + mono_coop_mutex_unlock (&worker.parked_threads_lock); mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] try unpark worker, success? %s", mono_native_thread_id_get (), res ? "yes" : "no"); @@ -543,6 +510,9 @@ worker_thread (gpointer unused) mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker starting", mono_native_thread_id_get ()); + if (!mono_refcount_tryinc (&worker)) + return 0; + COUNTER_ATOMIC (counter, { counter._.starting --; counter._.working ++; @@ -551,10 +521,6 @@ worker_thread (gpointer unused) thread = mono_thread_internal_current (); g_assert (thread); - mono_coop_mutex_lock (&worker.threads_lock); - g_ptr_array_add (worker.threads, thread); - mono_coop_mutex_unlock (&worker.threads_lock); - while (!mono_runtime_is_shutting_down ()) { ThreadPoolWorkItem work_item; @@ -577,18 +543,10 @@ worker_thread (gpointer unused) work_item.callback (work_item.data); } - mono_coop_mutex_lock (&worker.threads_lock); - COUNTER_ATOMIC (counter, { counter._.working --; }); - g_ptr_array_remove (worker.threads, thread); - - mono_coop_cond_signal (&worker.threads_exit_cond); - - mono_coop_mutex_unlock (&worker.threads_lock); - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker finishing", mono_native_thread_id_get ()); mono_refcount_dec (&worker); @@ -641,7 +599,6 @@ worker_try_create (void) counter._.starting ++; }); - mono_refcount_inc (&worker); thread = mono_thread_create_internal (mono_get_root_domain (), worker_thread, NULL, TRUE, 0, &error); if (!thread) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] try create worker, failed: could not create thread due to %s", mono_native_thread_id_get (), mono_error_get_message (&error)); @@ -653,8 +610,6 @@ worker_try_create (void) mono_coop_mutex_unlock (&worker.worker_creation_lock); - mono_refcount_dec (&worker); - return FALSE; } @@ -752,6 +707,9 @@ monitor_thread (gpointer unused) MonoInternalThread *internal; guint i; + if (!mono_refcount_tryinc (&worker)) + return 0; + internal = mono_thread_internal_current (); g_assert (internal); @@ -838,6 +796,7 @@ monitor_thread (gpointer unused) mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] monitor thread, finished", mono_native_thread_id_get ()); + mono_refcount_dec (&worker); return 0; } @@ -864,6 +823,7 @@ monitor_ensure_running (void) // printf ("monitor_thread: creating failed\n"); worker.monitor_status = MONITOR_STATUS_NOT_RUNNING; mono_error_cleanup (&error); + mono_refcount_dec (&worker); } return; } @@ -880,7 +840,7 @@ hill_climbing_change_thread_count (gint16 new_thread_count, ThreadPoolHeuristicS hc = &worker.heuristic_hill_climbing; - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] hill climbing, change max number of threads %d", mono_native_thread_id_get (), new_thread_count); + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] hill climbing, change max number of threads %d", mono_native_thread_id_get (), new_thread_count); hc->last_thread_count = new_thread_count; hc->current_sample_interval = rand_next (&hc->random_interval_generator, hc->sample_interval_low, hc->sample_interval_high); @@ -1204,7 +1164,15 @@ mono_threadpool_worker_notify_completed (void) gint32 mono_threadpool_worker_get_min (void) { - return worker.limit_worker_min; + gint32 ret; + + if (!mono_refcount_tryinc (&worker)) + return 0; + + ret = worker.limit_worker_min; + + mono_refcount_dec (&worker); + return ret; } gboolean @@ -1213,14 +1181,27 @@ mono_threadpool_worker_set_min (gint32 value) if (value <= 0 || value > worker.limit_worker_max) return FALSE; + if (!mono_refcount_tryinc (&worker)) + return FALSE; + worker.limit_worker_min = value; + + mono_refcount_dec (&worker); return TRUE; } gint32 mono_threadpool_worker_get_max (void) { - return worker.limit_worker_max; + gint32 ret; + + if (!mono_refcount_tryinc (&worker)) + return 0; + + ret = worker.limit_worker_max; + + mono_refcount_dec (&worker); + return ret; } gboolean @@ -1232,17 +1213,24 @@ mono_threadpool_worker_set_max (gint32 value) if (value < worker.limit_worker_min || value < cpu_count) return FALSE; - if (value < worker.limit_worker_min || value < cpu_count) + if (!mono_refcount_tryinc (&worker)) return FALSE; worker.limit_worker_max = value; + + mono_refcount_dec (&worker); return TRUE; } void mono_threadpool_worker_set_suspended (gboolean suspended) { + if (!mono_refcount_tryinc (&worker)) + return; + worker.suspended = suspended; if (!suspended) worker_request (); + + mono_refcount_dec (&worker); } diff --git a/mono/metadata/threadpool.c b/mono/metadata/threadpool.c index 4b0aa6ec18d..0b36a37cee9 100644 --- a/mono/metadata/threadpool.c +++ b/mono/metadata/threadpool.c @@ -71,10 +71,6 @@ typedef struct { GPtrArray *domains; // ThreadPoolDomain* [] MonoCoopMutex domains_lock; - GPtrArray *threads; // MonoInternalThread* [] - MonoCoopMutex threads_lock; - MonoCoopCond threads_exit_cond; - ThreadPoolCounter counters; gint32 limit_io_min; @@ -121,14 +117,8 @@ domains_unlock (void) static void destroy (gpointer unused) { -#if 0 g_ptr_array_free (threadpool.domains, TRUE); mono_coop_mutex_destroy (&threadpool.domains_lock); - - g_ptr_array_free (threadpool.threads, TRUE); - mono_coop_mutex_destroy (&threadpool.threads_lock); - mono_coop_cond_destroy (&threadpool.threads_exit_cond); -#endif } static void @@ -141,10 +131,6 @@ initialize (void) threadpool.domains = g_ptr_array_new (); mono_coop_mutex_init (&threadpool.domains_lock); - threadpool.threads = g_ptr_array_new (); - mono_coop_mutex_init (&threadpool.threads_lock); - mono_coop_cond_init (&threadpool.threads_exit_cond); - threadpool.limit_io_min = mono_cpu_count (); threadpool.limit_io_max = CLAMP (threadpool.limit_io_min * 100, MIN (threadpool.limit_io_min, 200), MAX (threadpool.limit_io_min, 200)); @@ -154,47 +140,6 @@ initialize (void) static void cleanup (void) { - guint i; - MonoInternalThread *current; - - /* we make the assumption along the code that we are - * cleaning up only if the runtime is shutting down */ - g_assert (mono_runtime_is_shutting_down ()); - - current = mono_thread_internal_current (); - - mono_coop_mutex_lock (&threadpool.threads_lock); - - /* stop all threadpool.threads */ - for (i = 0; i < threadpool.threads->len; ++i) { - MonoInternalThread *thread = (MonoInternalThread*) g_ptr_array_index (threadpool.threads, i); - if (thread != current) - mono_thread_internal_abort (thread); - } - - mono_coop_mutex_unlock (&threadpool.threads_lock); - -#if 0 - /* give a chance to the other threads to exit */ - mono_thread_info_yield (); - - mono_coop_mutex_lock (&threadpool.threads_lock); - - for (;;) { - if (threadpool.threads->len == 0) - break; - - if (threadpool.threads->len == 1 && g_ptr_array_index (threadpool.threads, 0) == current) { - /* We are waiting on ourselves */ - break; - } - - mono_coop_cond_wait (&threadpool.threads_exit_cond, &threadpool.threads_lock); - } - - mono_coop_mutex_unlock (&threadpool.threads_lock); -#endif - mono_threadpool_worker_cleanup (); mono_refcount_dec (&threadpool); @@ -209,7 +154,7 @@ mono_threadpool_enqueue_work_item (MonoDomain *domain, MonoObject *work_item, Mo MonoBoolean f; gpointer args [2]; - mono_error_init (error); + error_init (error); g_assert (work_item); if (!threadpool_class) @@ -325,7 +270,7 @@ static MonoObject* try_invoke_perform_wait_callback (MonoObject** exc, MonoError *error) { HANDLE_FUNCTION_ENTER (); - mono_error_init (error); + error_init (error); MonoObject *res = mono_runtime_try_invoke (mono_defaults.threadpool_perform_wait_callback_method, NULL, NULL, exc, error); HANDLE_FUNCTION_RETURN_VAL (res); } @@ -338,6 +283,9 @@ worker_callback (gpointer unused) ThreadPoolCounter counter; MonoInternalThread *thread; + if (!mono_refcount_tryinc (&threadpool)) + return; + thread = mono_thread_internal_current (); COUNTER_ATOMIC (counter, { @@ -357,10 +305,6 @@ worker_callback (gpointer unused) return; } - mono_coop_mutex_lock (&threadpool.threads_lock); - g_ptr_array_add (threadpool.threads, thread); - mono_coop_mutex_unlock (&threadpool.threads_lock); - /* * This is needed so there is always an lmf frame in the runtime invoke call below, * so ThreadAbortExceptions are caught even if the thread is in native code. @@ -447,14 +391,6 @@ worker_callback (gpointer unused) domains_unlock (); - mono_coop_mutex_lock (&threadpool.threads_lock); - - g_ptr_array_remove_fast (threadpool.threads, thread); - - mono_coop_cond_signal (&threadpool.threads_exit_cond); - - mono_coop_mutex_unlock (&threadpool.threads_lock); - COUNTER_ATOMIC (counter, { counter._.working --; }); @@ -484,9 +420,7 @@ mono_threadpool_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod if (!async_call_klass) async_call_klass = mono_class_load_from_name (mono_defaults.corlib, "System", "MonoAsyncCall"); - mono_lazy_initialize (&status, initialize); - - mono_error_init (error); + error_init (error); message = mono_method_call_message_new (method, params, mono_get_delegate_invoke (method->klass), (params != NULL) ? (&async_callback) : NULL, (params != NULL) ? (&state) : NULL, error); return_val_if_nok (error, NULL); @@ -517,7 +451,7 @@ mono_threadpool_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObj { MonoAsyncCall *ac; - mono_error_init (error); + error_init (error); g_assert (exc); g_assert (out_args); @@ -671,12 +605,18 @@ ves_icall_System_Threading_ThreadPool_GetAvailableThreadsNative (gint32 *worker_ if (!worker_threads || !completion_port_threads) return; - mono_lazy_initialize (&status, initialize); + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) { + *worker_threads = 0; + *completion_port_threads = 0; + return; + } counter = COUNTER_READ (); *worker_threads = MAX (0, mono_threadpool_worker_get_max () - counter._.working); *completion_port_threads = threadpool.limit_io_max; + + mono_refcount_dec (&threadpool); } void @@ -685,10 +625,16 @@ ves_icall_System_Threading_ThreadPool_GetMinThreadsNative (gint32 *worker_thread if (!worker_threads || !completion_port_threads) return; - mono_lazy_initialize (&status, initialize); + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) { + *worker_threads = 0; + *completion_port_threads = 0; + return; + } *worker_threads = mono_threadpool_worker_get_min (); *completion_port_threads = threadpool.limit_io_min; + + mono_refcount_dec (&threadpool); } void @@ -697,25 +643,35 @@ ves_icall_System_Threading_ThreadPool_GetMaxThreadsNative (gint32 *worker_thread if (!worker_threads || !completion_port_threads) return; - mono_lazy_initialize (&status, initialize); + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) { + *worker_threads = 0; + *completion_port_threads = 0; + return; + } *worker_threads = mono_threadpool_worker_get_max (); *completion_port_threads = threadpool.limit_io_max; + + mono_refcount_dec (&threadpool); } MonoBoolean ves_icall_System_Threading_ThreadPool_SetMinThreadsNative (gint32 worker_threads, gint32 completion_port_threads) { - mono_lazy_initialize (&status, initialize); - if (completion_port_threads <= 0 || completion_port_threads > threadpool.limit_io_max) return FALSE; - if (!mono_threadpool_worker_set_min (worker_threads)) + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) + return FALSE; + + if (!mono_threadpool_worker_set_min (worker_threads)) { + mono_refcount_dec (&threadpool); return FALSE; + } threadpool.limit_io_min = completion_port_threads; + mono_refcount_dec (&threadpool); return TRUE; } @@ -724,16 +680,20 @@ ves_icall_System_Threading_ThreadPool_SetMaxThreadsNative (gint32 worker_threads { gint cpu_count = mono_cpu_count (); - mono_lazy_initialize (&status, initialize); - if (completion_port_threads < threadpool.limit_io_min || completion_port_threads < cpu_count) return FALSE; - if (!mono_threadpool_worker_set_max (worker_threads)) + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) return FALSE; + if (!mono_threadpool_worker_set_max (worker_threads)) { + mono_refcount_dec (&threadpool); + return FALSE; + } + threadpool.limit_io_max = completion_port_threads; + mono_refcount_dec (&threadpool); return TRUE; } @@ -783,7 +743,7 @@ ves_icall_System_Threading_ThreadPool_RequestWorkerThread (void) if (mono_domain_is_unloading (domain)) return FALSE; - if (!mono_refcount_tryinc (&threadpool)) { + if (!mono_lazy_initialize (&status, initialize) || !mono_refcount_tryinc (&threadpool)) { /* threadpool has been destroyed, we are shutting down */ return FALSE; } @@ -820,9 +780,7 @@ ves_icall_System_Threading_ThreadPool_RequestWorkerThread (void) mono_threadpool_worker_enqueue (worker_callback, NULL); - /* we do not decrement the threadpool refcount, - * as it's going to be done in the worker_callback */ - + mono_refcount_dec (&threadpool); return TRUE; } diff --git a/mono/metadata/threads-types.h b/mono/metadata/threads-types.h index e6a1011d201..a63a741f4a9 100644 --- a/mono/metadata/threads-types.h +++ b/mono/metadata/threads-types.h @@ -176,7 +176,6 @@ MonoInternalThread *mono_thread_internal_current (void); void mono_thread_internal_check_for_interruption_critical (MonoInternalThread *thread); -void mono_thread_internal_stop (MonoInternalThread *thread); void mono_thread_internal_abort (MonoInternalThread *thread); void mono_thread_internal_suspend_for_shutdown (MonoInternalThread *thread); diff --git a/mono/metadata/threads.c b/mono/metadata/threads.c index 968bd091061..238abb9504c 100644 --- a/mono/metadata/threads.c +++ b/mono/metadata/threads.c @@ -695,6 +695,7 @@ mono_thread_attach_internal (MonoThread *thread, gboolean force_attach, gboolean if (shutting_down && !force_attach) { mono_threads_unlock (); + mono_thread_pop_appdomain_ref (); return FALSE; } @@ -914,7 +915,7 @@ create_thread (MonoThread *thread, MonoInternalThread *internal, MonoObject *sta */ mono_threads_join_threads (); - mono_error_init (error); + error_init (error); mono_threads_lock (); if (shutting_down) { @@ -1017,7 +1018,7 @@ mono_thread_create_internal (MonoDomain *domain, gpointer func, gpointer arg, gb MonoInternalThread *internal; gboolean res; - mono_error_init (error); + error_init (error); internal = create_internal_thread_object (); @@ -1549,7 +1550,7 @@ ves_icall_System_Threading_Thread_GetName_internal (MonoInternalThread *this_obj MonoError error; MonoString* str; - mono_error_init (&error); + error_init (&error); LOCK_THREAD (this_obj); @@ -1571,7 +1572,7 @@ mono_thread_set_name_internal (MonoInternalThread *this_obj, MonoString *name, g { LOCK_THREAD (this_obj); - mono_error_init (error); + error_init (error); if (reset) { this_obj->flags &= ~MONO_THREAD_FLAG_NAME_SET; @@ -1661,7 +1662,7 @@ byte_array_to_domain (MonoArray *arr, MonoDomain *domain, MonoError *error) { MonoArray *copy; - mono_error_init (error); + error_init (error); if (!arr) return NULL; @@ -1742,7 +1743,7 @@ mono_join_uninterrupted (MonoThreadHandle* thread_to_join, gint32 ms, MonoError gint32 diff_ms; gint32 wait = ms; - mono_error_init (error); + error_init (error); start = (ms == -1) ? 0 : mono_msec_ticks (); for (;;) { @@ -1851,7 +1852,7 @@ mono_wait_uninterrupted (MonoInternalThread *thread, guint32 numhandles, gpointe gint32 diff_ms; gint32 wait = ms; - mono_error_init (error); + error_init (error); start = (ms == -1) ? 0 : mono_100ns_ticks (); do { @@ -2629,53 +2630,27 @@ is_running_protected_wrapper (void) return found; } -static gboolean -request_thread_stop (MonoInternalThread *thread) +void +mono_thread_stop (MonoThread *thread) { - LOCK_THREAD (thread); + MonoInternalThread *internal = thread->internal_thread; - if ((thread->state & ThreadState_StopRequested) != 0 || - (thread->state & ThreadState_Stopped) != 0) + LOCK_THREAD (internal); + + if (internal->state & (ThreadState_StopRequested | ThreadState_Stopped)) { - UNLOCK_THREAD (thread); - return FALSE; + UNLOCK_THREAD (internal); + return; } - - /* Make sure the thread is awake */ - mono_thread_resume (thread); - thread->state |= ThreadState_StopRequested; - thread->state &= ~ThreadState_AbortRequested; - - UNLOCK_THREAD (thread); - return TRUE; -} + /* Make sure the internal is awake */ + mono_thread_resume (internal); -/** - * mono_thread_internal_stop: - * - * Request thread @thread to stop. - * - * @thread MUST NOT be the current thread. - */ -void -mono_thread_internal_stop (MonoInternalThread *thread) -{ - g_assert (thread != mono_thread_internal_current ()); + internal->state |= ThreadState_StopRequested; + internal->state &= ~ThreadState_AbortRequested; - if (!request_thread_stop (thread)) - return; - - async_abort_internal (thread, TRUE); -} - -void mono_thread_stop (MonoThread *thread) -{ - MonoInternalThread *internal = thread->internal_thread; + UNLOCK_THREAD (internal); - if (!request_thread_stop (internal)) - return; - if (internal == mono_thread_internal_current ()) { MonoError error; self_abort_internal (&error); @@ -3208,22 +3183,21 @@ remove_and_abort_threads (gpointer key, gpointer value, gpointer user) if (wait->num >= MONO_W32HANDLE_MAXIMUM_WAIT_OBJECTS) return FALSE; - /* The finalizer thread is not a background thread */ - if (!mono_native_thread_id_equals (thread_get_tid (thread), self) - && (thread->state & ThreadState_Background) != 0 - && (thread->flags & MONO_THREAD_FLAG_DONT_MANAGE) == 0 - ) { + if (mono_native_thread_id_equals (thread_get_tid (thread), self)) + return FALSE; + if (mono_gc_is_finalizer_internal_thread (thread)) + return FALSE; + + if ((thread->state & ThreadState_Background) && !(thread->flags & MONO_THREAD_FLAG_DONT_MANAGE)) { wait->handles[wait->num] = mono_threads_open_thread_handle (thread->handle); wait->threads[wait->num] = thread; wait->num++; THREAD_DEBUG (g_print ("%s: Aborting id: %"G_GSIZE_FORMAT"\n", __func__, (gsize)thread->tid)); mono_thread_internal_abort (thread); - return TRUE; } - return !mono_native_thread_id_equals (thread_get_tid (thread), self) - && !mono_gc_is_finalizer_internal_thread (thread); + return TRUE; } /** @@ -3661,7 +3635,7 @@ mono_threads_get_thread_dump (MonoArray **out_threads, MonoArray **out_stack_fra MonoDebugSourceLocation *location; int tindex, nthreads; - mono_error_init (error); + error_init (error); *out_threads = NULL; *out_stack_frames = NULL; @@ -4844,13 +4818,6 @@ async_abort_critical (MonoThreadInfo *info, gpointer ud) if (mono_get_eh_callbacks ()->mono_install_handler_block_guard (mono_thread_info_get_suspend_state (info))) return MonoResumeThread; - /* - The target thread is running at least one protected block, which must not be interrupted, so we give up. - The protected block code will give them a chance when appropriate. - */ - if (mono_thread_get_abort_prot_block_count (thread) > 0) - return MonoResumeThread; - /*someone is already interrupting it*/ if (!mono_thread_set_interruption_requested (thread)) return MonoResumeThread; @@ -4903,7 +4870,7 @@ self_abort_internal (MonoError *error) { MonoException *exc; - mono_error_init (error); + error_init (error); /* FIXME this is insanely broken, it doesn't cause interruption to happen synchronously * since passing FALSE to mono_thread_request_interruption makes sure it returns NULL */ diff --git a/mono/metadata/verify.c b/mono/metadata/verify.c index f826b7965e7..e2cec88115b 100644 --- a/mono/metadata/verify.c +++ b/mono/metadata/verify.c @@ -5945,7 +5945,7 @@ mono_method_verify (MonoMethod *method, int level) for (i = 0; i < ctx.code_size && i < ip_offset; ++i) { if (ctx.code [i].flags & IL_CODE_FLAG_WAS_TARGET) { if (!(ctx.code [i].flags & IL_CODE_FLAG_SEEN)) - ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i)); + ADD_VERIFY_ERROR (&ctx, g_strdup_printf ("Branch or exception block target middle of instruction at 0x%04x", i)); if (ctx.code [i].flags & IL_CODE_DELEGATE_SEQUENCE) CODE_NOT_VERIFIABLE (&ctx, g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i)); diff --git a/mono/metadata/w32file-unix.c b/mono/metadata/w32file-unix.c index 9666cb67d9d..cda335d25a6 100644 --- a/mono/metadata/w32file-unix.c +++ b/mono/metadata/w32file-unix.c @@ -4928,7 +4928,7 @@ mono_w32file_get_drive_type(const gunichar2 *root_path_name) return (drive_type); } -#if defined (PLATFORM_MACOSX) || defined (__linux__) || defined(PLATFORM_BSD) || defined(__native_client__) || defined(__FreeBSD_kernel__) +#if defined (PLATFORM_MACOSX) || defined (__linux__) || defined(PLATFORM_BSD) || defined(__native_client__) || defined(__FreeBSD_kernel__) || defined(__HAIKU__) static gchar* get_fstypename (gchar *utfpath) { diff --git a/mono/metadata/w32file-win32-uwp.c b/mono/metadata/w32file-win32-uwp.c index 15062f02948..c0ab592f607 100644 --- a/mono/metadata/w32file-win32-uwp.c +++ b/mono/metadata/w32file-win32-uwp.c @@ -117,7 +117,7 @@ HANDLE mono_w32file_get_console_output (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetStdHandle (STD_OUTPUT_HANDLE)"); @@ -133,7 +133,7 @@ HANDLE mono_w32file_get_console_input (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetStdHandle (STD_INPUT_HANDLE)"); @@ -149,7 +149,7 @@ HANDLE mono_w32file_get_console_error (void) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetStdHandle (STD_ERROR_HANDLE)"); diff --git a/mono/metadata/w32file.c b/mono/metadata/w32file.c index d1511ac15a1..5086bc442ef 100644 --- a/mono/metadata/w32file.c +++ b/mono/metadata/w32file.c @@ -596,7 +596,7 @@ ves_icall_System_IO_MonoIO_GetCurrentDirectory (gint32 *io_error) len = MAX_PATH + 1; /*FIXME this is too smal under most unix systems.*/ buf = g_new (gunichar2, len); - mono_error_init (&error); + error_init (&error); *io_error=ERROR_SUCCESS; result = NULL; diff --git a/mono/metadata/w32process-unix-haiku.c b/mono/metadata/w32process-unix-haiku.c index 4311993bb10..3dfee3c6078 100644 --- a/mono/metadata/w32process-unix-haiku.c +++ b/mono/metadata/w32process-unix-haiku.c @@ -4,7 +4,8 @@ #ifdef USE_HAIKU_BACKEND -#include <KernelKit.h> +/* KernelKit.h doesn't include the right headers? */ +#include <os/kernel/image.h> gchar* mono_w32process_get_name (pid_t pid) diff --git a/mono/metadata/w32process-unix-internals.h b/mono/metadata/w32process-unix-internals.h index 71226c3109d..72fd6088860 100644 --- a/mono/metadata/w32process-unix-internals.h +++ b/mono/metadata/w32process-unix-internals.h @@ -15,6 +15,8 @@ #define USE_BSD_BACKEND #elif defined(__HAIKU__) #define USE_HAIKU_BACKEND +/* Define header for team_info */ +#include <os/kernel/OS.h> #else #define USE_DEFAULT_BACKEND #endif diff --git a/mono/metadata/w32process-win32-uwp.c b/mono/metadata/w32process-win32-uwp.c index cd1b81f3736..8c6b93d819e 100644 --- a/mono/metadata/w32process-win32-uwp.c +++ b/mono/metadata/w32process-win32-uwp.c @@ -29,7 +29,7 @@ HANDLE ves_icall_System_Diagnostics_Process_GetProcess_internal (guint32 pid) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("OpenProcess"); @@ -46,7 +46,7 @@ mono_w32process_get_fileversion (MonoObject *filever, gunichar2 *filename, MonoE { g_unsupported_api ("GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue, VerLanguageName"); - mono_error_init (error); + error_init (error); mono_error_set_not_supported (error, G_UNSUPPORTED_API, "GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue, VerLanguageName"); SetLastError (ERROR_NOT_SUPPORTED); @@ -57,7 +57,7 @@ process_add_module (HANDLE process, HMODULE mod, gunichar2 *filename, gunichar2 { g_unsupported_api ("GetModuleInformation"); - mono_error_init (error); + error_init (error); mono_error_set_not_supported (error, G_UNSUPPORTED_API, "GetModuleInformation"); SetLastError (ERROR_NOT_SUPPORTED); @@ -69,7 +69,7 @@ MonoArray * ves_icall_System_Diagnostics_Process_GetModules_internal (MonoObject *this_obj, HANDLE process) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("EnumProcessModules, GetModuleBaseName, GetModuleFileNameEx"); @@ -85,7 +85,7 @@ MonoBoolean ves_icall_System_Diagnostics_Process_ShellExecuteEx_internal (MonoW32ProcessStartInfo *proc_start_info, MonoW32ProcessInfo *process_info) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("ShellExecuteEx"); @@ -144,7 +144,7 @@ mono_process_create_process (MonoW32ProcessInfo *mono_process_info, MonoString * memset (&process_info, 0, sizeof (PROCESS_INFORMATION)); g_unsupported_api (api_name); - mono_error_init (&mono_error); + error_init (&mono_error); mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, api_name); mono_error_set_pending_exception (&mono_error); @@ -157,7 +157,7 @@ MonoBoolean mono_icall_get_process_working_set_size (gpointer handle, gsize *min, gsize *max) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetProcessWorkingSetSize"); @@ -173,7 +173,7 @@ MonoBoolean mono_icall_set_process_working_set_size (gpointer handle, gsize min, gsize max) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("SetProcessWorkingSetSize"); @@ -189,7 +189,7 @@ gint32 mono_icall_get_priority_class (gpointer handle) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("GetPriorityClass"); @@ -205,7 +205,7 @@ MonoBoolean mono_icall_set_priority_class (gpointer handle, gint32 priorityClass) { MonoError mono_error; - mono_error_init (&mono_error); + error_init (&mono_error); g_unsupported_api ("SetPriorityClass"); diff --git a/mono/metadata/w32process.c b/mono/metadata/w32process.c index affa016604d..960ad076973 100644 --- a/mono/metadata/w32process.c +++ b/mono/metadata/w32process.c @@ -143,7 +143,7 @@ process_set_field_string (MonoObject *obj, const gchar *fieldname, const gunicha MonoClassField *field; MonoString *string; - mono_error_init (error); + error_init (error); LOGDEBUG (g_message ("%s: Setting field %s to [%s]", __func__, fieldname, g_utf16_to_utf8 (val, len, NULL, NULL, NULL))); @@ -281,7 +281,7 @@ process_module_string_read (MonoObject *filever, gpointer data, const gchar *fie gunichar2 *lang_key, *buffer; UINT chars; - mono_error_init (error); + error_init (error); lang_key_utf8 = g_strdup_printf (key, lang_lo, lang_hi, 0x04, 0xb0); @@ -325,7 +325,7 @@ mono_w32process_get_fileversion (MonoObject *filever, gunichar2 *filename, MonoE gunichar2 lang_buf[128]; guint32 lang, lang_count; - mono_error_init (error); + error_init (error); datalen = mono_w32process_get_fileversion_info_size (filename, &verinfohandle); if (datalen) { @@ -464,7 +464,7 @@ process_add_module (HANDLE process, HMODULE mod, gunichar2 *filename, gunichar2 MODULEINFO modinfo; BOOL ok; - mono_error_init (error); + error_init (error); /* Build a System.Diagnostics.ProcessModule with the data. */ item = mono_object_new_checked (domain, proc_class, error); @@ -513,7 +513,7 @@ process_get_module (MonoAssembly *assembly, MonoClass *proc_class, MonoError *er gchar *filename; const gchar *modulename; - mono_error_init (error); + error_init (error); domain = mono_domain_get (); diff --git a/mono/metadata/w32socket.c b/mono/metadata/w32socket.c index 0517bdd65f1..5312790ad64 100644 --- a/mono/metadata/w32socket.c +++ b/mono/metadata/w32socket.c @@ -825,7 +825,7 @@ create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror MonoArray *data; MonoAddressFamily family; - mono_error_init (error); + error_init (error); /* Build a System.Net.SocketAddress object instance */ if (!domain->sockaddr_class) @@ -1058,7 +1058,7 @@ create_sockaddr_from_object (MonoObject *saddr_obj, socklen_t *sa_size, gint32 * gint32 family; int len; - mono_error_init (error); + error_init (error); if (!domain->sockaddr_class) domain->sockaddr_class = mono_class_load_from_name (get_socket_assembly (), "System.Net", "SocketAddress"); @@ -2406,7 +2406,7 @@ addrinfo_to_IPHostEntry (MonoAddressInfo *info, MonoString **h_name, MonoArray * int addr_index; MonoDomain *domain = mono_domain_get (); - mono_error_init (error); + error_init (error); addr_index = 0; *h_aliases = mono_array_new_checked (domain, mono_get_string_class (), 0, error); return_val_if_nok (error, FALSE); diff --git a/mono/mini/.gitignore b/mono/mini/.gitignore index f53010594c7..af434f4218a 100644 --- a/mono/mini/.gitignore +++ b/mono/mini/.gitignore @@ -8,7 +8,7 @@ /*.dll /*.mdb /*.lo -/interpreter/*.lo +/interp/*.lo /*.loT /*.la /.libs diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 37c19cabc3e..1aa2808c3dc 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -43,7 +43,7 @@ RUNTIME_EXECUTABLE = $(if $(BOEHM),$(top_builddir)/mono/mini/mono-boehm,$(top_bu MINI_RUNTIME = MONO_PATH=$(CLASS) $(RUNTIME_EXECUTABLE) TOOLS_RUNTIME = MONO_PATH=$(mcs_topdir)/class/lib/build $(top_builddir)/runtime/mono-wrapper -INTERPRETER_RUNTIME = $(MINI_RUNTIME) --interpreter +INTERP_RUNTIME = $(MINI_RUNTIME) --interpreter RUNTIME_AOTCHECK = MONO_PATH="$(CLASS)$(PLATFORM_PATH_SEPARATOR)." $(RUNTIME_EXECUTABLE) MCS = CSC_SDK_PATH_DISABLED= $(TOOLS_RUNTIME) $(CSC) -unsafe -nowarn:0162 -nologo -noconfig -r:$(CLASS)/mscorlib.dll -r:$(CLASS)/System.dll -r:$(CLASS)/System.Core.dll @@ -388,15 +388,15 @@ endif endif if ENABLE_INTERPRETER -interpreter_sources = \ - interpreter/hacks.h \ - interpreter/interp.h \ - interpreter/interp-internals.h \ - interpreter/interp.c \ - interpreter/mintops.h \ - interpreter/mintops.def \ - interpreter/mintops.c \ - interpreter/transform.c +interp_sources = \ + interp/hacks.h \ + interp/interp.h \ + interp/interp-internals.h \ + interp/interp.c \ + interp/mintops.h \ + interp/mintops.def \ + interp/mintops.c \ + interp/transform.c endif if ENABLE_LLVM @@ -498,25 +498,51 @@ test_sources = \ gc-test.cs \ gshared.cs +if NACL_CODEGEN +test_sources += nacl.cs +endif -regtests_UNIVERSAL=basic.exe basic-float.exe basic-long.exe basic-calls.exe objects.exe arrays.exe basic-math.exe exceptions.exe iltests.exe devirtualization.exe generics.exe basic-simd.exe basic-vectors.exe -iregtests=basic.exe basic-float.exe basic-long.exe basic-calls.exe generics.exe objects.exe - -if FULL_AOT_TESTS -regtests= \ - $(regtests_UNIVERSAL) +regtests_UNIVERSAL = \ + basic.exe \ + basic-float.exe \ + basic-long.exe \ + basic-calls.exe \ + objects.exe \ + arrays.exe \ + basic-math.exe \ + exceptions.exe \ + iltests.exe \ + devirtualization.exe \ + generics.exe \ + basic-simd.exe \ + basic-vectors.exe if NACL_CODEGEN -test_sources += nacl.cs -regtests += nacl.exe +regtests_UNIVERSAL += nacl.exe endif -else -regtests= \ - $(regtests_UNIVERSAL) \ - $(regtests_FULL_AOT_TESTS_BLACKLIST) +regtests_DISABLED = + +if FULL_AOT_TESTS +regtests_DISABLED += endif +regtests = $(filter-out $(regtests_DISABLED),$(regtests_UNIVERSAL)) + +iregtests = \ + basic.exe \ + basic-float.exe \ + basic-long.exe \ + basic-calls.exe \ + objects.exe \ + arrays.exe \ + basic-math.exe \ + exceptions.exe \ + devirtualization.exe \ + generics.exe \ + basic-simd.exe \ + basic-vectors.exe + if X86 arch_sources = $(x86_sources) arch_built=cpu-x86.h @@ -602,7 +628,7 @@ os_sources = $(darwin_sources) $(posix_sources) monobin_platform_ldflags=-framework CoreFoundation -framework Foundation endif -libmini_la_SOURCES = $(common_sources) $(llvm_sources) $(llvm_runtime_sources) $(interpreter_sources) $(arch_sources) $(os_sources) +libmini_la_SOURCES = $(common_sources) $(llvm_sources) $(llvm_runtime_sources) $(interp_sources) $(arch_sources) $(os_sources) libmini_la_CFLAGS = $(mono_CFLAGS) libmonoboehm_2_0_la_SOURCES = @@ -727,7 +753,7 @@ rcheck: mono $(regtests) $(MINI_RUNTIME) --regression $(regtests) richeck: mono $(iregtests) - $(INTERPRETER_RUNTIME) --regression $(iregtests) + $(INTERP_RUNTIME) --regression $(iregtests) if ARM check-seq-points: @@ -759,13 +785,6 @@ gsharedvtcheck: fullaot_regtests = $(regtests) aot-tests.exe $(if $(GSHAREDVT),gshared.exe) -# Skip aoting the tests that aren't compiled -# on the full aot profiles because they're skipped -# on mobile profiles -FULLAOT_LIBS_FULL_AOT_TESTS_BLACKLIST = \ - Mono.Posix.dll \ - System.Configuration.dll - FULLAOT_LIBS_UNIVERSAL = \ mscorlib.dll \ System.Core.dll \ @@ -775,17 +794,23 @@ FULLAOT_LIBS_UNIVERSAL = \ Mono.Simd.dll \ Mono.Security.dll \ System.Numerics.dll \ - System.Numerics.Vectors.dll + System.Numerics.Vectors.dll \ + Mono.Posix.dll \ + System.Configuration.dll + +FULLAOT_LIBS_DISABLED = if FULL_AOT_TESTS -FULLAOT_LIBS= \ - $(FULLAOT_LIBS_UNIVERSAL) -else -FULLAOT_LIBS= \ - $(FULLAOT_LIBS_UNIVERSAL) \ - $(FULLAOT_LIBS_FULL_AOT_TESTS_BLACKLIST) +# Skip aoting the tests that aren't compiled +# on the full aot profiles because they're skipped +# on mobile profiles +FULLAOT_LIBS_DISABLED += \ + Mono.Posix.dll \ + System.Configuration.dll endif +FULLAOT_LIBS = $(filter-out $(FULLAOT_LIBS_DISABLED),$(FULLAOT_LIBS_UNIVERSAL)) + FULLAOT_TMP_DIR=$(top_builddir)/mono/mini/fullaot-tmp # This currently only works on amd64/arm diff --git a/mono/mini/alias-analysis.c b/mono/mini/alias-analysis.c index c419dfa2b42..7ff437f9f9d 100644 --- a/mono/mini/alias-analysis.c +++ b/mono/mini/alias-analysis.c @@ -159,10 +159,17 @@ lower_memory_access (MonoCompile *cfg) for (ins = bb->code; ins; ins = ins->next) { handle_instruction: switch (ins->opcode) { - case OP_LDADDR: - g_hash_table_insert (addr_loads, GINT_TO_POINTER (ins->dreg), ins); - if (cfg->verbose_level > 2) { printf ("New address: "); mono_print_ins (ins); } + case OP_LDADDR: { + MonoInst *var = (MonoInst*)ins->inst_p0; + if (var->flags & MONO_INST_VOLATILE) { + if (cfg->verbose_level > 2) { printf ("Found address to volatile var, can't take it: "); mono_print_ins (ins); } + } else { + g_hash_table_insert (addr_loads, GINT_TO_POINTER (ins->dreg), ins); + if (cfg->verbose_level > 2) { printf ("New address: "); mono_print_ins (ins); } + } break; + } + case OP_MOVE: tmp = (MonoInst*)g_hash_table_lookup (addr_loads, GINT_TO_POINTER (ins->sreg1)); /* diff --git a/mono/mini/aot-compiler.c b/mono/mini/aot-compiler.c index 6e91638d881..947e4e33d6f 100644 --- a/mono/mini/aot-compiler.c +++ b/mono/mini/aot-compiler.c @@ -4330,7 +4330,9 @@ add_wrappers (MonoAotCompile *acfg) named += slen; } - wrapper = mono_marshal_get_managed_wrapper (method, klass, 0); + wrapper = mono_marshal_get_managed_wrapper (method, klass, 0, &error); + mono_error_assert_ok (&error); + add_method (acfg, wrapper); if (export_name) g_hash_table_insert (acfg->export_names, wrapper, export_name); @@ -5244,11 +5246,11 @@ compute_line_numbers (MonoMethod *method, int code_size, MonoDebugMethodJitInfo if (il_offset == -1 || il_offset == prev_il_offset) continue; prev_il_offset = il_offset; - loc = mono_debug_symfile_lookup_location (minfo, il_offset); + loc = mono_debug_method_lookup_location (minfo, il_offset); if (!(loc && loc->source_file)) continue; if (loc->row == prev_line) { - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); continue; } prev_line = loc->row; @@ -5347,7 +5349,7 @@ emit_and_reloc_code (MonoAotCompile *acfg, MonoMethod *method, guint8 *code, gui options = ""; prologue_end = TRUE; fprintf (acfg->fp, ".loc %d %d 0%s\n", findex, loc->row, options); - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); } skip = FALSE; diff --git a/mono/mini/aot-runtime.c b/mono/mini/aot-runtime.c index ed2b485a626..ce87be85147 100644 --- a/mono/mini/aot-runtime.c +++ b/mono/mini/aot-runtime.c @@ -257,7 +257,7 @@ load_image (MonoAotModule *amodule, int index, MonoError *error) g_assert (index < amodule->image_table_len); - mono_error_init (error); + error_init (error); if (amodule->image_table [index]) return amodule->image_table [index]; @@ -374,7 +374,7 @@ decode_generic_inst (MonoAotModule *module, guint8 *buf, guint8 **endbuf, MonoEr MonoGenericInst *inst; guint8 *p = buf; - mono_error_init (error); + error_init (error); type_argc = decode_value (p, &p); type_argv = g_new0 (MonoType*, type_argc); @@ -401,7 +401,7 @@ decode_generic_context (MonoAotModule *module, MonoGenericContext *ctx, guint8 * guint8 *p = buf; guint8 *p2; int argc; - mono_error_init (error); + error_init (error); p2 = p; argc = decode_value (p, &p); @@ -433,7 +433,7 @@ decode_klass_ref (MonoAotModule *module, guint8 *buf, guint8 **endbuf, MonoError guint8 *p = buf; int reftype; - mono_error_init (error); + error_init (error); reftype = decode_value (p, &p); if (reftype == 0) { *endbuf = p; @@ -621,7 +621,7 @@ decode_type (MonoAotModule *module, guint8 *buf, guint8 **endbuf, MonoError *err MonoType *t; t = (MonoType *)g_malloc0 (sizeof (MonoType)); - mono_error_init (error); + error_init (error); while (TRUE) { if (*p == MONO_TYPE_PINNED) { @@ -852,7 +852,7 @@ decode_method_ref_with_target (MonoAotModule *module, MethodRef *ref, MonoMethod guint8 *p = buf; memset (ref, 0, sizeof (MethodRef)); - mono_error_init (error); + error_init (error); value = decode_value (p, &p); image_index = value >> 24; @@ -1214,7 +1214,9 @@ decode_method_ref_with_target (MonoAotModule *module, MethodRef *ref, MonoMethod klass = decode_klass_ref (module, p, &p, error); if (!klass) return FALSE; - ref->method = mono_marshal_get_managed_wrapper (m, klass, 0); + ref->method = mono_marshal_get_managed_wrapper (m, klass, 0, error); + if (!mono_error_ok (error)) + return FALSE; break; } default: @@ -1338,7 +1340,7 @@ decode_resolve_method_ref_with_target (MonoAotModule *module, MonoMethod *target { MethodRef ref; - mono_error_init (error); + error_init (error); if (!decode_method_ref_with_target (module, &ref, target, buf, endbuf, error)) return NULL; @@ -2430,7 +2432,7 @@ mono_aot_get_method_from_vt_slot (MonoDomain *domain, MonoVTable *vtable, int sl gpointer addr; MonoError inner_error; - mono_error_init (error); + error_init (error); if (MONO_CLASS_IS_INTERFACE (klass) || klass->rank || !amodule) return NULL; @@ -3849,7 +3851,7 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM guint8 *code = NULL, *info; gboolean res; - mono_error_init (error); + error_init (error); init_amodule_got (amodule); @@ -4142,7 +4144,7 @@ init_method (MonoAotModule *amodule, guint32 method_index, MonoMethod *method, M MonoJitInfo *jinfo = NULL; guint8 *code, *info; - mono_error_init (error); + error_init (error); code = (guint8 *)amodule->methods [method_index]; info = &amodule->blob [mono_aot_get_offset (amodule->method_info_offsets, method_index)]; @@ -4353,7 +4355,7 @@ mono_aot_get_method_checked (MonoDomain *domain, MonoMethod *method, MonoError * gboolean cache_result = FALSE; MonoError inner_error; - mono_error_init (error); + error_init (error); if (domain != mono_get_root_domain ()) /* Non shared AOT code can't be used in other appdomains */ @@ -4619,7 +4621,7 @@ mono_aot_get_method_from_token (MonoDomain *domain, MonoImage *image, guint32 to int method_index; gpointer res; - mono_error_init (error); + error_init (error); if (!aot_module) return NULL; @@ -4738,7 +4740,7 @@ mono_aot_plt_resolve (gpointer aot_module, guint32 plt_info_offset, guint8 *code MonoMemPool *mp; gboolean using_gsharedvt = FALSE; - mono_error_init (error); + error_init (error); //printf ("DYN: %p %d\n", aot_module, plt_info_offset); @@ -5837,7 +5839,7 @@ gpointer mono_aot_get_method_checked (MonoDomain *domain, MonoMethod *method, MonoError *error) { - mono_error_init (error); + error_init (error); return NULL; } @@ -5868,7 +5870,7 @@ mono_aot_find_jit_info (MonoDomain *domain, MonoImage *image, gpointer addr) gpointer mono_aot_get_method_from_token (MonoDomain *domain, MonoImage *image, guint32 token, MonoError *error) { - mono_error_init (error); + error_init (error); return NULL; } @@ -5892,7 +5894,7 @@ mono_aot_patch_plt_entry (guint8 *code, guint8 *plt_entry, gpointer *got, mgreg_ gpointer mono_aot_get_method_from_vt_slot (MonoDomain *domain, MonoVTable *vtable, int slot, MonoError *error) { - mono_error_init (error); + error_init (error); return NULL; } diff --git a/mono/mini/arrays.cs b/mono/mini/arrays.cs index 00a3c6b901f..b3002716e46 100644 --- a/mono/mini/arrays.cs +++ b/mono/mini/arrays.cs @@ -318,6 +318,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] public static int test_0_multi_dimension_arrays () { int sum; @@ -548,6 +549,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] public static int test_0_multidym_array_with_negative_lower_bound () { int[,] x = (int[,]) Array.CreateInstance(typeof (int), new int[] { 2, 2 }, new int[] { -2, -3 }); @@ -778,6 +780,7 @@ class Tests } // #13544 + [Category ("!INTERPRETER")] public static int test_0_newarr_ovf () { if (!alloc_long (5000000000)) return 1; diff --git a/mono/mini/basic-vectors.cs b/mono/mini/basic-vectors.cs index a2cf101450e..1174292433a 100644 --- a/mono/mini/basic-vectors.cs +++ b/mono/mini/basic-vectors.cs @@ -113,6 +113,7 @@ public class VectorTests { return Vector2.Abs (v1); } + [Category ("!INTERPRETER")] public static int test_0_vector2_abs () { var v1 = new Vector2 (-1.0f, -2.0f); var v2 = new Vector2 (1.0f, 2.0f); @@ -350,6 +351,7 @@ public class VectorTests { return Vector4.Abs (v1); } + [Category ("!INTERPRETER")] public static int test_0_vector4_abs () { var v1 = new Vector4 (-1.0f, -2.0f, -3.0f, -4.0f); var v2 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f); @@ -588,6 +590,7 @@ public class VectorTests { return Vector3.Abs (v1); } + [Category ("!INTERPRETER")] public static int test_0_vector3_abs () { var v1 = new Vector3 (-1.0f, -2.0f, -3.0f); var v2 = new Vector3 (1.0f, 2.0f, 3.0f); diff --git a/mono/mini/debug-mini.c b/mono/mini/debug-mini.c index 41e241a33a8..68780e5056a 100644 --- a/mono/mini/debug-mini.c +++ b/mono/mini/debug-mini.c @@ -152,7 +152,7 @@ mono_debug_add_vg_method (MonoMethod *method, MonoDebugMethodJitInfo *jit) for (i = 0; i < header->code_size; ++i) { MonoDebugSourceLocation *location; - location = mono_debug_symfile_lookup_location (minfo, i); + location = mono_debug_method_lookup_location (minfo, i); if (!location) continue; diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c index 21779306d96..ed1b7a14a7f 100644 --- a/mono/mini/debugger-agent.c +++ b/mono/mini/debugger-agent.c @@ -998,7 +998,7 @@ mono_debugger_agent_init (void) /* Needed by the hash_table_new_type () call below */ mono_gc_base_init (); - thread_to_tls = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, "thread-to-tls table"); + thread_to_tls = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, "thread-to-tls table"); tid_to_thread = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DEBUGGER, "tid-to-thread table"); @@ -1939,7 +1939,7 @@ objrefs_init (void) { objrefs = g_hash_table_new_full (NULL, NULL, NULL, free_objref); obj_to_objref = g_hash_table_new (NULL, NULL); - suspended_objs = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, "suspended objects table"); + suspended_objs = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, "suspended objects table"); } static void @@ -4150,7 +4150,7 @@ insert_breakpoint (MonoSeqPointInfo *seq_points, MonoDomain *domain, MonoJitInfo gboolean it_has_sp = FALSE; if (error) - mono_error_init (error); + error_init (error); mono_seq_point_iterator_init (&it, seq_points); while (mono_seq_point_iterator_next (&it)) { @@ -4350,7 +4350,7 @@ set_bp_in_method (MonoDomain *domain, MonoMethod *method, MonoSeqPointInfo *seq_ MonoJitInfo *ji; if (error) - mono_error_init (error); + error_init (error); code = mono_jit_find_compiled_method_with_jit_info (domain, method, &ji); if (!code) { @@ -4396,7 +4396,7 @@ set_breakpoint (MonoMethod *method, long il_offset, EventRequest *req, MonoError int i; if (error) - mono_error_init (error); + error_init (error); // FIXME: // - suspend/resume the vm to prevent code patching problems @@ -8008,7 +8008,7 @@ get_assembly_object_command (MonoDomain *domain, MonoAssembly *ass, Buffer *buf, { HANDLE_FUNCTION_ENTER(); ErrorCode err = ERR_NONE; - mono_error_init (error); + error_init (error); MonoReflectionAssemblyHandle o = mono_assembly_get_object_handle (domain, ass, error); if (MONO_HANDLE_IS_NULL (o)) { err = ERR_INVALID_OBJECT; @@ -8659,7 +8659,7 @@ type_commands_internal (int command, MonoClass *klass, MonoDomain *domain, guint MonoError error; GPtrArray *array; - mono_error_init (&error); + error_init (&error); array = mono_class_get_methods_by_name (klass, name, flags & ~BINDING_FLAGS_IGNORE_CASE, (flags & BINDING_FLAGS_IGNORE_CASE) != 0, TRUE, &error); if (!is_ok (&error)) { mono_error_cleanup (&error); diff --git a/mono/mini/driver.c b/mono/mini/driver.c index 860e1ca626f..9674a350f90 100644 --- a/mono/mini/driver.c +++ b/mono/mini/driver.c @@ -56,7 +56,7 @@ #include "mini.h" #include "jit.h" #include "aot-compiler.h" -#include "interpreter/interp.h" +#include "interp/interp.h" #include <string.h> #include <ctype.h> diff --git a/mono/mini/dwarfwriter.c b/mono/mini/dwarfwriter.c index 40960cc4b84..5aacab1c440 100644 --- a/mono/mini/dwarfwriter.c +++ b/mono/mini/dwarfwriter.c @@ -21,7 +21,6 @@ #endif #include <mono/metadata/mono-endian.h> -#include <mono/metadata/debug-mono-symfile.h> #include <mono/metadata/mono-debug-debugger.h> #ifndef HOST_WIN32 @@ -1581,11 +1580,11 @@ emit_line_number_info (MonoDwarfWriter *w, MonoMethod *method, prev_il_offset = il_offset; - loc = mono_debug_symfile_lookup_location (minfo, il_offset); + loc = mono_debug_method_lookup_location (minfo, il_offset); if (!loc) continue; if (!loc->source_file) { - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); continue; } @@ -1633,7 +1632,7 @@ emit_line_number_info (MonoDwarfWriter *w, MonoMethod *method, prev_native_offset = i; } - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); first = FALSE; } @@ -1797,7 +1796,7 @@ mono_dwarf_writer_emit_method (MonoDwarfWriter *w, MonoCompile *cfg, MonoMethod minfo = mono_debug_lookup_method (method); if (minfo) - loc = mono_debug_symfile_lookup_location (minfo, 0); + loc = mono_debug_method_lookup_location (minfo, 0); /* Subprogram */ names = g_new0 (char *, sig->param_count); @@ -1818,7 +1817,7 @@ mono_dwarf_writer_emit_method (MonoDwarfWriter *w, MonoCompile *cfg, MonoMethod emit_uleb128 (w, file_index + 1); emit_uleb128 (w, loc->row); - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); loc = NULL; } else { emit_uleb128 (w, 0); diff --git a/mono/mini/exceptions.cs b/mono/mini/exceptions.cs index 98c6046e61a..4e11a7d4157 100644 --- a/mono/mini/exceptions.cs +++ b/mono/mini/exceptions.cs @@ -981,6 +981,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] public static int test_0_int_cast () { int a; long l; @@ -1462,6 +1463,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] [Category ("NaClDisable")] public static int test_0_div_zero () { int d = 1; @@ -1633,6 +1635,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] [Category ("NaClDisable")] public static int test_0_long_div_zero () { long d = 1; @@ -1800,6 +1803,7 @@ class Tests return 0; } + [Category ("!INTERPRETER")] public static int test_3_checked_cast_un () { ulong i = 0x8000000034000000; long j; @@ -1815,6 +1819,7 @@ class Tests return 3; } + [Category ("!INTERPRETER")] public static int test_4_checked_cast () { long i; ulong j; @@ -1842,6 +1847,7 @@ class Tests 7, 0, 7, 1, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 7, 7, 7, 8, }; + [Category ("!INTERPRETER")] public static int test_0_multi_dim_array_access () { int [,] a = System.Array.CreateInstance (typeof (int), new int [] {3,6}, new int [] {2,2 }) as int[,]; @@ -1878,6 +1884,7 @@ class Tests o = "buddy"; } + [Category ("!INTERPRETER")] public static int test_2_array_mismatch () { string[] a = { "hello", "world" }; object[] b = a; @@ -2230,6 +2237,7 @@ class Tests } } + [Category ("!INTERPRETER")] public static int test_0_exception_in_cctor () { try { Broken.DoSomething (); @@ -2318,6 +2326,7 @@ class Tests Console.WriteLine (); } + [Category ("!INTERPRETER")] [Category ("!BITCODE")] public static int test_0_rethrow_stacktrace () { // Check that rethrowing an exception preserves the original stack trace @@ -2380,6 +2389,7 @@ class Tests } } + [Category ("!INTERPRETER")] public static int test_0_array_size () { bool failed; @@ -2706,6 +2716,7 @@ class Tests public static Foo* pFoo; } + [Category ("!INTERPRETER")] /* MS.NET doesn't seem to throw in this case */ public unsafe static int test_0_ldflda_null_pointer () { int* pi = &Foo.pFoo->i; diff --git a/mono/mini/generics.cs b/mono/mini/generics.cs index 9defe79f3cc..8354e0ba3c1 100644 --- a/mono/mini/generics.cs +++ b/mono/mini/generics.cs @@ -233,7 +233,42 @@ class Tests return 0; } - [Category ("!INTERPRETER")] + interface NonGenericInterface { + int return_field (); + } + + interface GenericInterface<T> : NonGenericInterface { + T not_used (); + } + + struct ImplementGenericInterface<T> : GenericInterface<T> { + public Object padding1; + public Object padding2; + public Object padding3; + public T[] arr_t; + + public ImplementGenericInterface (T[] arr_t) { + this.padding1 = null; + this.padding2 = null; + this.padding3 = null; + this.arr_t = arr_t; + } + + public T not_used () { + return arr_t [0]; + } + + public int return_field () { + return arr_t.Length; + } + } + + public static int test_8_struct_implements_generic_interface () { + int[] arr = {1, 2, 3, 4}; + NonGenericInterface s = new ImplementGenericInterface<int> (arr); + return s.return_field () + s.return_field (); + } + public static int test_0_generic_get_value_optimization_vtype () { TestStruct[] arr = new TestStruct[] { new TestStruct (100, 200), new TestStruct (300, 400) }; IEnumerator<TestStruct> enumerator = GenericClass<TestStruct>.Y (arr); @@ -427,7 +462,6 @@ class Tests } #endif - [Category ("!INTERPRETER")] public static int test_0_ldvirtftn_generic_method () { new GenericsTests ().ldvirtftn<string> (); @@ -454,7 +488,6 @@ class Tests // This cannot be made to work with full-aot, since there it is impossible to // statically determine that Foo<string>.Bar <int> is needed, the code only // references IFoo.Bar<int> - [Category ("!INTERPRETER")] [Category ("!FULLAOT")] public static int test_0_generic_virtual_on_interfaces () { Foo<string>.count1 = 0; @@ -480,7 +513,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] public static int test_0_generic_virtual_on_interfaces_ref () { Foo<string>.count1 = 0; Foo<string>.count2 = 0; @@ -520,7 +552,6 @@ class Tests Value_2 = 2 } - [Category ("!INTERPRETER")] public static int test_0_regress_550964_constrained_enum_long () { MyEnumUlong a = MyEnumUlong.Value_2; MyEnumUlong b = MyEnumUlong.Value_2; @@ -562,7 +593,6 @@ class Tests int c = ((ICollection<T>)arr).Count; } - [Category ("!INTERPRETER")] /* Test that treating arrays as generic collections works with full-aot */ public static int test_0_fullaot_array_wrappers () { GenericsTests[] arr = new GenericsTests [10]; @@ -622,7 +652,6 @@ class Tests return typeof (T); } - [Category ("!INTERPRETER")] public static int test_0_gshared_delegate_rgctx () { Func<Type> t = new Func<Type> (get_type<string>); @@ -632,7 +661,6 @@ class Tests return 1; } - [Category ("!INTERPRETER")] // Creating a delegate from a generic method from gshared code public static int test_0_gshared_delegate_from_gshared () { if (gshared_delegate_from_gshared <object> () != 0) @@ -664,7 +692,6 @@ class Tests public delegate TRet Transform<TRet> (TKey key, TValue value); } - [Category ("!INTERPRETER")] public static int test_0_bug_620864 () { var d = new Pair<string, Type>.Transform<KeyValuePair<string, Type>> (Pair<string, Type>.make_pair); @@ -721,7 +748,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] [Category ("GSHAREDVT")] public static int test_6_partial_sharing_linq () { var messages = new List<Message> (); @@ -732,7 +758,6 @@ class Tests return messages.Max(i => i.MessageID); } - [Category ("!INTERPRETER")] public static int test_0_partial_shared_method_in_nonshared_class () { var c = new Class1<double> (); return (c.Foo<string> (5).GetType () == typeof (Class1<string>)) ? 0 : 1; @@ -909,7 +934,6 @@ class Tests } } - [Category ("!INTERPRETER")] [Category ("!FULLAOT")] [Category ("!BITCODE")] public static int test_0_regress_668095_synchronized_gshared () { @@ -1256,7 +1280,6 @@ class Tests static object delegate_8_args_res; - [Category ("!INTERPRETER")] public static int test_0_delegate_8_args () { delegate_8_args_res = null; Action<string, string, string, string, string, string, string, diff --git a/mono/mini/graph.c b/mono/mini/graph.c index 95e1fff2bb4..0b123e50cf6 100644 --- a/mono/mini/graph.c +++ b/mono/mini/graph.c @@ -155,121 +155,6 @@ mono_draw_cfg (MonoCompile *cfg, FILE *fp) fprintf (fp, "}\n"); } -#if 0 - -static void -mono_print_label (FILE *fp, MonoInst *tree) { - int arity; - - if (!tree) - return; - - arity = mono_burg_arity [tree->opcode]; - - fprintf (fp, "\\ %s%s", arity? "(": "", mono_inst_name (tree->opcode)); - - switch (tree->opcode) { - case OP_ICONST: - fprintf (fp, "[%ld]", (long)tree->inst_c0); - break; - case OP_I8CONST: - fprintf (fp, "[%lld]", (long long)tree->inst_l); - break; - case OP_R8CONST: - fprintf (fp, "[%f]", *(double*)tree->inst_p0); - break; - case OP_R4CONST: - fprintf (fp, "[%f]", *(float*)tree->inst_p0); - break; - case OP_ARG: - case OP_LOCAL: - fprintf (fp, "[%d]", (int)tree->inst_c0); - break; - case OP_REGOFFSET: - fprintf (fp, "[0x%x(%s)]", (int)tree->inst_offset, mono_arch_regname (tree->inst_basereg)); - break; - case OP_REGVAR: - fprintf (fp, "[%s]", mono_arch_regname (tree->dreg)); - break; - case CEE_NEWARR: - fprintf (fp, "[%s]", tree->inst_newa_class->name); - mono_print_label (fp, tree->inst_newa_len); - break; - case OP_CALL: - case OP_CALL_MEMBASE: - case OP_FCALL: - case OP_FCALL_MEMBASE: - case OP_LCALL: - case OP_LCALL_MEMBASE: - case OP_VCALL: - case OP_VCALL_MEMBASE: - case OP_VOIDCALL: - case OP_VOIDCALL_MEMBASE: { - MonoCallInst *call = (MonoCallInst*)tree; - if (call->method) { - if (mono_method_signature (call->method)->hasthis && tree->inst_left) { - mono_print_label (fp, tree->inst_left); - } - fprintf (fp, "[%s]", call->method->name); - } - break; - } - case OP_PHI: { - int i; - fprintf (fp, "[%d\\ (", (int)tree->inst_c0); - for (i = 0; i < tree->inst_phi_args [0]; i++) { - if (i) - fprintf (fp, ",\\ "); - fprintf (fp, "%d", tree->inst_phi_args [i + 1]); - } - fprintf (fp, ")]"); - break; - } - case OP_NOP: - case OP_JMP: - case OP_BREAK: - break; - case OP_BR: - fprintf (fp, "[B%d]", tree->inst_target_bb->block_num); - break; - case OP_SWITCH: - case CEE_ISINST: - case CEE_CASTCLASS: - case OP_CALL_REG: - case OP_FCALL_REG: - case OP_LCALL_REG: - case OP_VCALL_REG: - case OP_VOIDCALL_REG: - mono_print_label (fp, tree->inst_left); - break; - case CEE_BNE_UN: - case CEE_BEQ: - case CEE_BLT: - case CEE_BLT_UN: - case CEE_BGT: - case CEE_BGT_UN: - case CEE_BGE: - case CEE_BGE_UN: - case CEE_BLE: - case CEE_BLE_UN: - fprintf (fp, "[B%dB%d]", tree->inst_true_bb->block_num, tree->inst_false_bb->block_num); - mono_print_label (fp, tree->inst_left); - break; - default: - if (arity) { - mono_print_label (fp, tree->inst_left); - if (arity > 1) - mono_print_label (fp, tree->inst_right); - } - break; - } - - if (arity) - fprintf (fp, ")"); -} - -#endif - static void mono_draw_code_cfg (MonoCompile *cfg, FILE *fp) { diff --git a/mono/mini/gshared.cs b/mono/mini/gshared.cs index 65151b07024..e4323480388 100644 --- a/mono/mini/gshared.cs +++ b/mono/mini/gshared.cs @@ -1026,7 +1026,7 @@ public class Tests return t.ToString (); } - enum AnEnum { + public enum AnEnum { One, Two }; @@ -1106,10 +1106,12 @@ public class Tests interface IConstrainedCalls { Pair<int, int> vtype_ret<T, T2>(T t, T2 t2) where T: IReturnVType; + AnEnum enum_ret<T, T2>(T t, T2 t2) where T: IReturnVType; } public interface IReturnVType { Pair<int, int> return_vtype (); + AnEnum return_enum (); } public class CConstrainedCalls : IConstrainedCalls { @@ -1117,12 +1119,20 @@ public class Tests public Pair<int, int> vtype_ret<T, T2>(T t, T2 t2) where T : IReturnVType { return t.return_vtype (); } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public AnEnum enum_ret<T, T2>(T t, T2 t2) where T : IReturnVType { + return t.return_enum (); + } } class ReturnVType : IReturnVType { public Pair<int, int> return_vtype () { return new Pair<int, int> () { First = 1, Second = 2 }; } + public AnEnum return_enum () { + return AnEnum.Two; + } } public static int test_0_constrained_vtype_ret () { @@ -1133,6 +1143,14 @@ public class Tests return 0; } + public static int test_0_constrained_enum_ret () { + IConstrainedCalls c = new CConstrainedCalls (); + var r = c.enum_ret<ReturnVType, int> (new ReturnVType (), 1); + if (r != AnEnum.Two) + return 1; + return 0; + } + public struct Pair<T1, T2> { public T1 First; public T2 Second; diff --git a/mono/mini/interpreter/hacks.h b/mono/mini/interp/hacks.h index 9697ccbad6f..9697ccbad6f 100644 --- a/mono/mini/interpreter/hacks.h +++ b/mono/mini/interp/hacks.h diff --git a/mono/mini/interpreter/interp-internals.h b/mono/mini/interp/interp-internals.h index 603e20a1918..f26e4ff57b3 100644 --- a/mono/mini/interpreter/interp-internals.h +++ b/mono/mini/interp/interp-internals.h @@ -82,7 +82,6 @@ typedef struct _RuntimeMethod guint32 *local_offsets; unsigned int param_count; unsigned int hasthis; - unsigned int valuetype; } RuntimeMethod; struct _MonoInvocation { @@ -116,9 +115,6 @@ extern int mono_interp_traceopt; MonoException * mono_interp_transform_method (RuntimeMethod *runtime_method, ThreadContext *context); -MonoDelegate* -mono_interp_ftnptr_to_delegate (MonoClass *klass, gpointer ftn); - void mono_interp_transform_init (void); diff --git a/mono/mini/interpreter/interp.c b/mono/mini/interp/interp.c index 355be888649..9c21f957355 100644 --- a/mono/mini/interpreter/interp.c +++ b/mono/mini/interp/interp.c @@ -259,7 +259,7 @@ RuntimeMethod* mono_interp_get_runtime_method (MonoDomain *domain, MonoMethod *method, MonoError *error) { RuntimeMethod *rtm; - mono_error_init (error); + error_init (error); mono_os_mutex_lock (&runtime_method_lookup_section); if ((rtm = mono_internal_hash_table_lookup (&domain->jit_code_hash, method))) { @@ -271,7 +271,6 @@ mono_interp_get_runtime_method (MonoDomain *domain, MonoMethod *method, MonoErro rtm->method = method; rtm->param_count = mono_method_signature (method)->param_count; rtm->hasthis = mono_method_signature (method)->hasthis; - rtm->valuetype = method->klass->valuetype; mono_internal_hash_table_insert (&domain->jit_code_hash, method, rtm); mono_os_mutex_unlock (&runtime_method_lookup_section); @@ -314,7 +313,20 @@ get_virtual_method (MonoDomain *domain, RuntimeMethod *runtime_method, MonoObjec /* TODO: interface offset lookup is slow, go through IMT instead */ slot += mono_class_interface_offset (obj->vtable->klass, m->klass); } + MonoMethod *virtual_method = obj->vtable->klass->vtable [slot]; + if (m->is_inflated && mono_method_get_context (m)->method_inst) { + MonoGenericContext context = { NULL, NULL }; + + if (mono_class_is_ginst (virtual_method->klass)) + context.class_inst = mono_class_get_generic_class (virtual_method->klass)->context.class_inst; + else if (mono_class_is_gtd (virtual_method->klass)) + context.class_inst = mono_class_get_generic_container (virtual_method->klass)->context.class_inst; + context.method_inst = mono_method_get_context (m)->method_inst; + + virtual_method = mono_class_inflate_generic_method_checked (virtual_method, &context, &error); + mono_error_cleanup (&error); /* FIXME: don't swallow the error */ + } RuntimeMethod *virtual_runtime_method = mono_interp_get_runtime_method (domain, virtual_method, &error); mono_error_cleanup (&error); /* FIXME: don't swallow the error */ return virtual_runtime_method; @@ -541,7 +553,7 @@ ves_array_create (MonoDomain *domain, MonoClass *klass, MonoMethodSignature *sig static void ves_array_set (MonoInvocation *frame) { - stackval *sp = frame->stack_args; + stackval *sp = frame->stack_args + 1; MonoObject *o; MonoArray *ao; MonoClass *ac; @@ -595,7 +607,7 @@ ves_array_set (MonoInvocation *frame) static void ves_array_get (MonoInvocation *frame) { - stackval *sp = frame->stack_args; + stackval *sp = frame->stack_args + 1; MonoObject *o; MonoArray *ao; MonoClass *ac; @@ -639,7 +651,7 @@ ves_array_get (MonoInvocation *frame) static void ves_array_element_address (MonoInvocation *frame) { - stackval *sp = frame->stack_args; + stackval *sp = frame->stack_args + 1; MonoObject *o; MonoArray *ao; MonoClass *ac; @@ -677,35 +689,42 @@ ves_array_element_address (MonoInvocation *frame) frame->retval->data.p = ea; } -static void -interp_walk_stack (MonoStackWalk func, gboolean do_il_offset, gpointer user_data) +void +interp_walk_stack_with_ctx (MonoInternalStackWalk func, MonoContext *ctx, MonoUnwindOptions options, void *user_data) { - ThreadContext *context = mono_native_tls_get_value (thread_context_id); - MonoInvocation *frame; - int il_offset; - MonoMethodHeader *hd; MonoError error; + ThreadContext *context = mono_native_tls_get_value (thread_context_id); - if (!context) return; - - frame = context->current_frame; + MonoInvocation *frame = context->current_frame; while (frame) { - gboolean managed = FALSE; - MonoMethod *method = frame->runtime_method->method; - if (!method || (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) || (method->iflags & (METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL | METHOD_IMPL_ATTRIBUTE_RUNTIME))) - il_offset = -1; - else { - hd = mono_method_get_header_checked (method, &error); + MonoStackFrameInfo fi; + memset (&fi, 0, sizeof (MonoStackFrameInfo)); + + /* TODO: hack to make some asserts happy. */ + fi.ji = (MonoJitInfo *) frame->runtime_method; + + if (frame->runtime_method) + fi.method = fi.actual_method = frame->runtime_method->method; + + if (!fi.method || (fi.method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) || (fi.method->iflags & (METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL | METHOD_IMPL_ATTRIBUTE_RUNTIME))) { + fi.il_offset = -1; + fi.type = FRAME_TYPE_MANAGED_TO_NATIVE; + } else { + MonoMethodHeader *hd = mono_method_get_header_checked (fi.method, &error); mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - il_offset = frame->ip - (const unsigned short *)hd->code; - if (!method->wrapper_type) - managed = TRUE; + fi.type = FRAME_TYPE_MANAGED; + fi.il_offset = frame->ip - (const unsigned short *) hd->code; + if (!fi.method->wrapper_type) + fi.managed = TRUE; } - if (func (method, -1, il_offset, managed, user_data)) + + if (func (&fi, ctx, user_data)) return; frame = frame->parent; } + + g_assert (0); } static MonoPIFunc mono_interp_enter_icall_trampoline = NULL; @@ -714,8 +733,9 @@ struct _MethodArguments { size_t ilen; gpointer *iargs; size_t flen; - gpointer *fargs; + double *fargs; gpointer *retval; + size_t is_float_ret; }; typedef struct _MethodArguments MethodArguments; @@ -749,8 +769,13 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc case MONO_TYPE_STRING: case MONO_TYPE_I8: case MONO_TYPE_VALUETYPE: + case MONO_TYPE_GENERICINST: margs->ilen++; break; + case MONO_TYPE_R4: + case MONO_TYPE_R8: + margs->flen++; + break; default: g_error ("build_args_from_sig: not implemented yet (1): 0x%x\n", ptype); } @@ -759,14 +784,18 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc if (margs->ilen > 0) margs->iargs = g_malloc0 (sizeof (gpointer) * margs->ilen); - if (margs->ilen > 6) - g_error ("build_args_from_sig: TODO, more than 6 iregs: %d\n", margs->ilen); - if (margs->flen > 0) - g_error ("build_args_from_sig: TODO, allocate floats: %d\n", margs->flen); + margs->fargs = g_malloc0 (sizeof (double) * margs->flen); + + if (margs->ilen > 8) + g_error ("build_args_from_sig: TODO, allocate gregs: %d\n", margs->ilen); + + if (margs->flen > 3) + g_error ("build_args_from_sig: TODO, allocate fregs: %d\n", margs->flen); size_t int_i = 0; + size_t int_f = 0; if (sig->hasthis) { margs->iargs [0] = frame->stack_args->data.p; @@ -793,21 +822,54 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc case MONO_TYPE_STRING: case MONO_TYPE_I8: case MONO_TYPE_VALUETYPE: + case MONO_TYPE_GENERICINST: margs->iargs [int_i] = frame->stack_args [i].data.p; #if DEBUG_INTERP g_print ("build_args_from_sig: margs->iargs[%d]: %p (frame @ %d)\n", int_i, margs->iargs[int_i], i); #endif int_i++; break; + case MONO_TYPE_R4: + case MONO_TYPE_R8: + margs->fargs [int_f] = frame->stack_args [i].data.f; + int_f++; + break; default: g_error ("build_args_from_sig: not implemented yet (2): 0x%x\n", ptype); } } - if (sig->ret->type != MONO_TYPE_VOID) { - margs->retval = &(frame->retval->data.p); - } else { - margs->retval = NULL; + switch (sig->ret->type) { + case MONO_TYPE_BOOLEAN: + case MONO_TYPE_CHAR: + case MONO_TYPE_I1: + case MONO_TYPE_U1: + case MONO_TYPE_I2: + case MONO_TYPE_U2: + case MONO_TYPE_I4: + case MONO_TYPE_U4: + case MONO_TYPE_I: + case MONO_TYPE_U: + case MONO_TYPE_PTR: + case MONO_TYPE_SZARRAY: + case MONO_TYPE_CLASS: + case MONO_TYPE_OBJECT: + case MONO_TYPE_STRING: + case MONO_TYPE_I8: + case MONO_TYPE_VALUETYPE: + case MONO_TYPE_GENERICINST: + margs->retval = &(frame->retval->data.p); + break; + case MONO_TYPE_R4: + case MONO_TYPE_R8: + margs->retval = &(frame->retval->data.p); + margs->is_float_ret = 1; + break; + case MONO_TYPE_VOID: + margs->retval = NULL; + break; + default: + g_error ("build_args_from_sig: ret type not implemented yet: 0x%x\n", sig->ret->type); } return margs; @@ -871,45 +933,12 @@ ves_pinvoke_method (MonoInvocation *frame, MonoMethodSignature *sig, MonoFuncV a g_free (margs); } -static void -interp_delegate_ctor (MonoDomain *domain, MonoObject *this, MonoObject *target, RuntimeMethod *runtime_method) -{ - MonoDelegate *delegate = (MonoDelegate *)this; - MonoError error; - - delegate->method_info = mono_method_get_object_checked (domain, runtime_method->method, NULL, &error); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - delegate->target = target; - - if (target && mono_object_is_transparent_proxy (target)) { - MonoMethod *method = mono_marshal_get_remoting_invoke (runtime_method->method); - delegate->method_ptr = mono_interp_get_runtime_method (domain, method, &error); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - } else { - delegate->method_ptr = runtime_method; - } -} - -MonoDelegate* -mono_interp_ftnptr_to_delegate (MonoClass *klass, gpointer ftn) +void +mono_interp_init_delegate (MonoDelegate *del) { - MonoDelegate *d; - MonoJitInfo *ji; - MonoDomain *domain = mono_domain_get (); - MonoError error; - - d = (MonoDelegate*)mono_object_new_checked (domain, klass, &error); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - - ji = mono_jit_info_table_find (domain, ftn); - if (ji == NULL) - mono_raise_exception (mono_get_exception_argument ("", "Function pointer was not created by a Delegate.")); - - /* FIXME: discard the wrapper and call the original method */ - interp_delegate_ctor (domain, (MonoObject*)d, NULL, mono_interp_get_runtime_method (domain, ji->d.method, &error)); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - - return d; + g_assert (!del->method); + del->method = ((RuntimeMethod *) del->method_ptr)->method; + g_assert (del->method); } /* @@ -928,15 +957,6 @@ ves_runtime_method (MonoInvocation *frame, ThreadContext *context) mono_class_init (method->klass); - isinst_obj = mono_object_isinst_checked (obj, mono_defaults.multicastdelegate_class, &error); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - if (obj && isinst_obj) { - if (*name == '.' && (strcmp (name, ".ctor") == 0)) { - interp_delegate_ctor (context->domain, obj, frame->stack_args [1].data.p, frame->stack_args[2].data.p); - return; - } - } - isinst_obj = mono_object_isinst_checked (obj, mono_defaults.array_class, &error); mono_error_cleanup (&error); /* FIXME: don't swallow the error */ if (obj && isinst_obj) { @@ -1230,7 +1250,7 @@ mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb MonoInvocation *old_frame = NULL; jmp_buf env; - mono_error_init (error); + error_init (error); frame.ex = NULL; @@ -1778,10 +1798,14 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) ++sp; ip += 3; MINT_IN_BREAK; - MINT_IN_CASE(MINT_POP) - ++ip; - --sp; + MINT_IN_CASE(MINT_POP) { + guint16 u16 = (* (guint16 *)(ip + 1)) + 1; + if (u16 > 1) + memmove (sp - u16, sp - 1, (u16 - 1) * sizeof (stackval)); + sp--; + ip += 2; MINT_IN_BREAK; + } MINT_IN_CASE(MINT_JMP) { RuntimeMethod *new_method = rtm->data_items [* (guint16 *)(ip + 1)]; if (!new_method->transformed) { @@ -1831,6 +1855,15 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) mono_error_cleanup (&error); /* FIXME: don't swallow the error */ } + if (csignature->hasthis) { + MonoObject *this_arg = sp->data.p; + + if (this_arg->vtable->klass->valuetype) { + gpointer *unboxed = mono_object_unbox (this_arg); + sp [0].data.p = unboxed; + } + } + ves_exec_method_with_context (&child_frame, context); context->current_frame = frame; @@ -1910,7 +1943,7 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) child_frame.stack_args = sp; /* `this' can be NULL for string:.ctor */ - if (child_frame.runtime_method->hasthis && !child_frame.runtime_method->valuetype && sp->data.p && mono_object_is_transparent_proxy (sp->data.p)) { + if (child_frame.runtime_method->hasthis && !child_frame.runtime_method->method->klass->valuetype && sp->data.p && mono_object_is_transparent_proxy (sp->data.p)) { child_frame.runtime_method = mono_interp_get_runtime_method (context->domain, mono_marshal_get_remoting_invoke (child_frame.runtime_method->method), &error); mono_error_cleanup (&error); /* FIXME: don't swallow the error */ } @@ -1945,7 +1978,7 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) --sp; child_frame.stack_args = sp; - if (child_frame.runtime_method->hasthis && !child_frame.runtime_method->valuetype && mono_object_is_transparent_proxy (sp->data.p)) { + if (child_frame.runtime_method->hasthis && !child_frame.runtime_method->method->klass->valuetype && mono_object_is_transparent_proxy (sp->data.p)) { child_frame.runtime_method = mono_interp_get_runtime_method (context->domain, mono_marshal_get_remoting_invoke (child_frame.runtime_method->method), &error); mono_error_cleanup (&error); /* FIXME: don't swallow the error */ } @@ -1984,10 +2017,11 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) THROW_EX (mono_get_exception_null_reference(), ip - 2); child_frame.runtime_method = get_virtual_method (context->domain, child_frame.runtime_method, this_arg); - if (this_arg->vtable->klass->valuetype && child_frame.runtime_method->valuetype) { + MonoClass *this_class = this_arg->vtable->klass; + if (this_class->valuetype && child_frame.runtime_method->method->klass->valuetype) { /* unbox */ gpointer *unboxed = mono_object_unbox (this_arg); - stackval_from_data (&this_arg->vtable->klass->byval_arg, sp, (char *) unboxed, FALSE); + sp [0].data.p = unboxed; } ves_exec_method_with_context (&child_frame, context); @@ -2031,9 +2065,10 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) THROW_EX (mono_get_exception_null_reference(), ip - 2); child_frame.runtime_method = get_virtual_method (context->domain, child_frame.runtime_method, this_arg); - if (this_arg->vtable->klass->valuetype && child_frame.runtime_method->valuetype) { + MonoClass *this_class = this_arg->vtable->klass; + if (this_class->valuetype && child_frame.runtime_method->method->klass->valuetype) { gpointer *unboxed = mono_object_unbox (this_arg); - stackval_from_data (&this_arg->vtable->klass->byval_arg, sp, (char *) unboxed, FALSE); + sp [0].data.p = unboxed; } ves_exec_method_with_context (&child_frame, context); @@ -4328,24 +4363,6 @@ interp_ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_fi return res; } -static MonoObject * -ves_icall_System_Delegate_CreateDelegate_internal (MonoReflectionType *type, MonoObject *target, MonoReflectionMethod *info) -{ - MonoClass *delegate_class = mono_class_from_mono_type (type->type); - MonoObject *delegate; - MonoError error; - - g_assert (delegate_class->parent == mono_defaults.multicastdelegate_class); - - delegate = mono_object_new_checked (mono_object_domain (type), delegate_class, &error); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - - interp_delegate_ctor (mono_object_domain (type), delegate, target, mono_interp_get_runtime_method (mono_get_root_domain (), info->method, &error)); - mono_error_cleanup (&error); /* FIXME: don't swallow the error */ - - return delegate; -} - void mono_interp_init () { diff --git a/mono/mini/interpreter/interp.h b/mono/mini/interp/interp.h index 8c75b945b3f..59428a882f2 100644 --- a/mono/mini/interpreter/interp.h +++ b/mono/mini/interp/interp.h @@ -14,4 +14,9 @@ mono_interp_create_method_pointer (MonoMethod *method, MonoError *error); MonoObject* mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error); +void +mono_interp_init_delegate (MonoDelegate *del); + +void +interp_walk_stack_with_ctx (MonoInternalStackWalk func, MonoContext *ctx, MonoUnwindOptions options, void *user_data); #endif /* __MONO_MINI_INTERPRETER_H__ */ diff --git a/mono/mini/interpreter/mintops.c b/mono/mini/interp/mintops.c index 5b4d69269e8..5b4d69269e8 100644 --- a/mono/mini/interpreter/mintops.c +++ b/mono/mini/interp/mintops.c diff --git a/mono/mini/interpreter/mintops.def b/mono/mini/interp/mintops.def index a9ed29f4ae3..54c5422b27e 100644 --- a/mono/mini/interpreter/mintops.def +++ b/mono/mini/interp/mintops.def @@ -13,7 +13,7 @@ OPDEF(MINT_BREAK, "break", 1, MintOpNoArgs) OPDEF(MINT_LDNULL, "ldnull", 1, MintOpNoArgs) OPDEF(MINT_DUP, "dup", 1, MintOpNoArgs) OPDEF(MINT_DUP_VT, "dup.vt", 3, MintOpInt) -OPDEF(MINT_POP, "pop", 1, MintOpNoArgs) +OPDEF(MINT_POP, "pop", 2, MintOpShortInt) OPDEF(MINT_RET, "ret", 1, MintOpNoArgs) OPDEF(MINT_RET_VOID, "ret.void", 1, MintOpNoArgs) diff --git a/mono/mini/interpreter/mintops.h b/mono/mini/interp/mintops.h index e787526e2fe..e787526e2fe 100644 --- a/mono/mini/interpreter/mintops.h +++ b/mono/mini/interp/mintops.h diff --git a/mono/mini/interpreter/transform.c b/mono/mini/interp/transform.c index 149b4527850..e5e2ec931d3 100644 --- a/mono/mini/interpreter/transform.c +++ b/mono/mini/interp/transform.c @@ -661,6 +661,12 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target csignature = (MonoMethodSignature *)mono_method_get_wrapper_data (method, token); else csignature = mono_metadata_parse_signature (image, token); + + if (generic_context) { + csignature = mono_inflate_generic_signature (csignature, generic_context, &error); + mono_error_cleanup (&error); /* FIXME: don't swallow the error */ + } + target_method = NULL; } else { if (method->wrapper_type == MONO_WRAPPER_NONE) @@ -686,6 +692,12 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target csignature = mono_method_signature (target_method); } + /* TODO: that's oddly specific? */ + if (generic_context && target_method && !strcmp ("Invoke", target_method->name) && target_method->klass->parent == mono_defaults.multicastdelegate_class) { + csignature = mono_inflate_generic_signature (csignature, generic_context, &error); + mono_error_cleanup (&error); /* FIXME: don't swallow the error */ + } + if (constrained_class) { if (constrained_class->enumtype && !strcmp (target_method->name, "GetHashCode")) { /* Use the corresponding method from the base type to avoid boxing */ @@ -710,6 +722,11 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target mono_class_setup_vtable (target_method->klass); if (constrained_class->valuetype && (target_method->klass == mono_defaults.object_class || target_method->klass == mono_defaults.enum_class->parent || target_method->klass == mono_defaults.enum_class)) { + if (target_method->klass == mono_defaults.enum_class && (td->sp - csignature->param_count - 1)->type == STACK_TYPE_MP) { + /* managed pointer on the stack, we need to deref that puppy */ + ADD_CODE (td, MINT_LDIND_I); + ADD_CODE (td, csignature->param_count); + } ADD_CODE (td, MINT_BOX); ADD_CODE (td, get_data_item_index (td, constrained_class)); ADD_CODE (td, csignature->param_count); @@ -758,11 +775,13 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target if (mono_interp_traceopt) g_print ("Inline (empty) call of %s.%s\n", target_method->klass->name, target_method->name); for (i = 0; i < csignature->param_count; i++) - ADD_CODE(td, MINT_POP); /*FIX: vt */ + ADD_CODE (td, MINT_POP); /*FIX: vt */ + ADD_CODE (td, 0); if (csignature->hasthis) { if (virtual) ADD_CODE(td, MINT_CKNULL); - ADD_CODE(td, MINT_POP); + ADD_CODE (td, MINT_POP); + ADD_CODE (td, 0); } td->sp -= csignature->param_count + csignature->hasthis; td->ip += 5; @@ -837,13 +856,12 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target } static void -generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) +generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start, MonoGenericContext *generic_context) { MonoMethodHeader *header = mono_method_get_header (method); MonoMethodSignature *signature = mono_method_signature (method); MonoImage *image = method->klass->image; MonoDomain *domain = mono_domain_get (); - MonoGenericContext *generic_context = NULL; MonoClass *constrained_class = NULL; MonoError error; int offset, mt; @@ -859,9 +877,6 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) TransformData td; int generating_code = 1; - if (mono_method_signature (method)->is_inflated) - generic_context = &((MonoMethodInflated *) method)->context; - memset(&td, 0, sizeof(td)); td.method = method; td.rtm = rtm; @@ -1156,6 +1171,7 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) case CEE_POP: CHECK_STACK(&td, 1); SIMPLE_OP(td, MINT_POP); + ADD_CODE (&td, 0); if (td.sp [-1].type == STACK_TYPE_VT) { int size = mono_class_value_size (td.sp [-1].klass, NULL); size = (size + 7) & ~7; @@ -2249,12 +2265,60 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) token = read32 (td.ip + 1); klass = mono_class_get_full (image, token, generic_context); switch (mint_type (&klass->byval_arg)) { + case MINT_TYPE_I1: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_I1); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4); + break; + case MINT_TYPE_U1: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_U1); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4); + break; + case MINT_TYPE_U2: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_U2); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4); + break; + case MINT_TYPE_I2: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_I2); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4); + break; case MINT_TYPE_I4: ENSURE_I4 (&td, 1); SIMPLE_OP (td, MINT_LDELEM_I4); --td.sp; SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4); break; + case MINT_TYPE_I8: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_I8); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I8); + break; + case MINT_TYPE_R4: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_R4); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_R8); + break; + case MINT_TYPE_R8: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_R8); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_R8); + break; + case MINT_TYPE_O: + ENSURE_I4 (&td, 1); + SIMPLE_OP (td, MINT_LDELEM_REF); + --td.sp; + SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_O); + break; case MINT_TYPE_VT: { int size = mono_class_value_size (klass, NULL); ENSURE_I4 (&td, 1); @@ -2537,7 +2601,14 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) int size; gpointer handle; token = read32 (td.ip + 1); - handle = mono_ldtoken (image, token, &klass, generic_context); + if (method->wrapper_type == MONO_WRAPPER_DYNAMIC_METHOD || method->wrapper_type == MONO_WRAPPER_SYNCHRONIZED) { + handle = mono_method_get_wrapper_data (method, token); + klass = (MonoClass *) mono_method_get_wrapper_data (method, token + 1); + if (klass == mono_defaults.typehandle_class) + handle = &((MonoClass *) handle)->byval_arg; + } else { + handle = mono_ldtoken (image, token, &klass, generic_context); + } mt = mint_type(&klass->byval_arg); g_assert (mt == MINT_TYPE_VT); size = mono_class_value_size (klass, NULL); @@ -2593,9 +2664,27 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) ++td.ip; switch (*td.ip) { case CEE_MONO_CALLI_EXTRA_ARG: - /* Same as CEE_CALLI, llvm specific */ + /* Same as CEE_CALLI, except that we drop the extra arg required for llvm specific behaviour */ + ADD_CODE (&td, MINT_POP); + ADD_CODE (&td, 1); + --td.sp; interp_transform_call (&td, method, NULL, domain, generic_context, is_bb_start, body_start_offset, NULL); break; + case CEE_MONO_JIT_ICALL_ADDR: { + guint32 token; + gpointer func; + MonoJitICallInfo *info; + + token = read32 (td.ip + 1); + td.ip += 5; + func = mono_method_get_wrapper_data (method, token); + info = mono_find_jit_icall_by_addr (func); + + ADD_CODE (&td, MINT_LDFTN); + ADD_CODE (&td, get_data_item_index (&td, func)); + PUSH_SIMPLE_TYPE (&td, STACK_TYPE_I); + break; + } case CEE_MONO_ICALL: { guint32 token; gpointer func; @@ -2647,7 +2736,6 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start) if (func == mono_ftnptr_to_delegate) { g_error ("TODO: ?"); - func = mono_interp_ftnptr_to_delegate; } ADD_CODE(&td, get_data_item_index (&td, func)); td.sp -= info->sig->param_count; @@ -3062,7 +3150,12 @@ mono_interp_transform_method (RuntimeMethod *runtime_method, ThreadContext *cont mono_profiler_method_jit (method); /* sort of... */ if (mono_method_signature (method)->is_inflated) - generic_context = &((MonoMethodInflated *) method)->context; + generic_context = mono_method_get_context (method); + else { + MonoGenericContainer *generic_container = mono_method_get_generic_container (method); + if (generic_container) + generic_context = &generic_container->context; + } if (method->iflags & (METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL | METHOD_IMPL_ATTRIBUTE_RUNTIME)) { MonoMethod *nm = NULL; @@ -3081,7 +3174,12 @@ mono_interp_transform_method (RuntimeMethod *runtime_method, ThreadContext *cont } else { const char *name = method->name; if (method->klass->parent == mono_defaults.multicastdelegate_class) { - if (*name == 'I' && (strcmp (name, "Invoke") == 0)) { + if (*name == '.' && (strcmp (name, ".ctor") == 0)) { + MonoJitICallInfo *mi = mono_find_jit_icall_by_name ("ves_icall_mono_delegate_ctor"); + g_assert (mi); + char *wrapper_name = g_strdup_printf ("__icall_wrapper_%s", mi->name); + nm = mono_marshal_get_icall_wrapper (mi->sig, wrapper_name, mi->func, TRUE); + } else if (*name == 'I' && (strcmp (name, "Invoke") == 0)) { nm = mono_marshal_get_delegate_invoke (method, NULL); } else if (*name == 'B' && (strcmp (name, "BeginInvoke") == 0)) { nm = mono_marshal_get_delegate_begin_invoke (method); @@ -3271,7 +3369,7 @@ mono_interp_transform_method (RuntimeMethod *runtime_method, ThreadContext *cont runtime_method->args_size = offset; g_assert (runtime_method->args_size < 10000); - generate(method, runtime_method, is_bb_start); + generate (method, runtime_method, is_bb_start, generic_context); g_free (is_bb_start); diff --git a/mono/mini/jit-icalls.c b/mono/mini/jit-icalls.c index 7130aeab31c..765d3096a1c 100644 --- a/mono/mini/jit-icalls.c +++ b/mono/mini/jit-icalls.c @@ -1332,7 +1332,7 @@ constrained_gsharedvt_call_setup (gpointer mp, MonoMethod *cmethod, MonoClass *k MonoMethod *m; int vt_slot, iface_offset; - mono_error_init (error); + error_init (error); if (mono_class_is_interface (klass)) { MonoObject *this_obj; @@ -1504,7 +1504,7 @@ resolve_iface_call (MonoObject *this_obj, int imt_slot, MonoMethod *imt_method, gpointer addr, compiled_method, aot_addr; gboolean need_rgctx_tramp = FALSE, need_unbox_tramp = FALSE; - mono_error_init (error); + error_init (error); if (!this_obj) /* The caller will handle it */ return NULL; @@ -1588,7 +1588,7 @@ resolve_vcall (MonoVTable *vt, int slot, MonoMethod *imt_method, gpointer *out_a gpointer addr, compiled_method; gboolean need_unbox_tramp = FALSE; - mono_error_init (error); + error_init (error); /* Same as in common_call_trampoline () */ /* Avoid loading metadata or creating a generic vtable if possible */ @@ -1915,7 +1915,7 @@ mono_throw_method_access (MonoMethod *callee, MonoMethod *caller) char *caller_name = mono_method_full_name (caller, 1); MonoError error; - mono_error_init (&error); + error_init (&error); mono_error_set_generic_error (&error, "System", "MethodAccessException", "Method `%s' is inaccessible from method `%s'\n", callee_name, caller_name); mono_error_set_pending_exception (&error); g_free (callee_name); diff --git a/mono/mini/liveness.c b/mono/mini/liveness.c index cdd1c42ef49..cfdc728c0d0 100644 --- a/mono/mini/liveness.c +++ b/mono/mini/liveness.c @@ -231,8 +231,7 @@ analyze_liveness_bb (MonoCompile *cfg, MonoBasicBlock *bb) #ifdef DEBUG_LIVENESS if (cfg->verbose_level > 1) { - printf ("\t"); - mono_print_ins (ins); + mono_print_ins_index (1, ins); } #endif diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c index 38ba5a241ec..5982e0c2008 100644 --- a/mono/mini/method-to-ir.c +++ b/mono/mini/method-to-ir.c @@ -348,14 +348,19 @@ mono_print_bb (MonoBasicBlock *bb, const char *msg) { int i; MonoInst *tree; + GString *str = g_string_new (""); - printf ("\n%s %d: [IN: ", msg, bb->block_num); + g_string_append_printf (str, "%s %d: [IN: ", msg, bb->block_num); for (i = 0; i < bb->in_count; ++i) - printf (" BB%d(%d)", bb->in_bb [i]->block_num, bb->in_bb [i]->dfn); - printf (", OUT: "); + g_string_append_printf (str, " BB%d(%d)", bb->in_bb [i]->block_num, bb->in_bb [i]->dfn); + g_string_append_printf (str, ", OUT: "); for (i = 0; i < bb->out_count; ++i) - printf (" BB%d(%d)", bb->out_bb [i]->block_num, bb->out_bb [i]->dfn); - printf (" ]\n"); + g_string_append_printf (str, " BB%d(%d)", bb->out_bb [i]->block_num, bb->out_bb [i]->dfn); + g_string_append_printf (str, " ]\n"); + + g_print ("%s", str->str); + g_string_free (str, TRUE); + for (tree = bb->code; tree; tree = tree->next) mono_print_ins_index (-1, tree); } @@ -4450,7 +4455,7 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe * pack the arguments into an array, and do the rest of the work in in an icall. */ if (((cmethod->klass == mono_defaults.object_class) || mono_class_is_interface (cmethod->klass) || (!cmethod->klass->valuetype && cmethod->klass->image != mono_defaults.corlib)) && - (MONO_TYPE_IS_VOID (fsig->ret) || MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_IS_REFERENCE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret) || mini_is_gsharedvt_type (fsig->ret)) && + (MONO_TYPE_IS_VOID (fsig->ret) || MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_IS_REFERENCE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret) || mono_class_is_enum (mono_class_from_mono_type (fsig->ret)) || mini_is_gsharedvt_type (fsig->ret)) && (fsig->param_count == 0 || (!fsig->hasthis && fsig->param_count == 1) || (fsig->param_count == 1 && (MONO_TYPE_IS_REFERENCE (fsig->params [0]) || fsig->params [0]->byref || mini_is_gsharedvt_type (fsig->params [0]))))) { MonoInst *args [16]; @@ -4502,7 +4507,7 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe if (mini_is_gsharedvt_type (fsig->ret)) { ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins); - } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret)) { + } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret) || mono_class_is_enum (mono_class_from_mono_type (fsig->ret))) { MonoInst *add; /* Unbox */ @@ -6708,7 +6713,7 @@ mini_get_method_allow_open (MonoMethod *m, guint32 token, MonoClass *klass, Mono { MonoMethod *method; - mono_error_init (error); + error_init (error); if (m->wrapper_type != MONO_WRAPPER_NONE) { method = (MonoMethod *)mono_method_get_wrapper_data (m, token); @@ -6765,7 +6770,7 @@ mini_get_signature (MonoMethod *method, guint32 token, MonoGenericContext *conte { MonoMethodSignature *fsig; - mono_error_init (error); + error_init (error); if (method->wrapper_type != MONO_WRAPPER_NONE) { fsig = (MonoMethodSignature *)mono_method_get_wrapper_data (method, token); } else { @@ -11585,7 +11590,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b tclass, MONO_RGCTX_INFO_REFLECTION_TYPE); } else if (cfg->compile_aot) { if (method->wrapper_type) { - mono_error_init (&error); //got to do it since there are multiple conditionals below + error_init (&error); //got to do it since there are multiple conditionals below if (mono_class_get_checked (tclass->image, tclass->type_token, &error) == tclass && !generic_context) { /* Special case for static synchronized wrappers */ EMIT_NEW_TYPE_FROM_HANDLE_CONST (cfg, ins, tclass->image, tclass->type_token, generic_context); diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c index 42715480b00..f85644d42ca 100644 --- a/mono/mini/mini-arm.c +++ b/mono/mini/mini-arm.c @@ -1515,6 +1515,7 @@ get_call_info (MonoMemPool *mp, MonoMethodSignature *sig) nwords = (align_size + sizeof (gpointer) -1 ) / sizeof (gpointer); ainfo->storage = RegTypeStructByVal; ainfo->struct_size = size; + ainfo->align = align; /* FIXME: align stack_size if needed */ if (eabi_supported) { if (align >= 8 && (gr & 1)) @@ -2166,7 +2167,16 @@ mono_arch_get_llvm_call_info (MonoCompile *cfg, MonoMethodSignature *sig) break; case RegTypeStructByVal: lainfo->storage = LLVMArgAsIArgs; - lainfo->nslots = ainfo->struct_size / sizeof (gpointer); + if (eabi_supported && ainfo->align == 8) { + /* LLVM models this by passing an int64 array */ + lainfo->nslots = ALIGN_TO (ainfo->struct_size, 8) / 8; + lainfo->esize = 8; + } else { + lainfo->nslots = ainfo->struct_size / sizeof (gpointer); + lainfo->esize = 4; + } + + printf ("D: %d\n", ainfo->align); break; case RegTypeStructByAddr: case RegTypeStructByAddrOnStack: diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index 28678638b6c..31194f2e60d 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -208,7 +208,7 @@ typedef struct { guint8 reg; ArgStorage storage; /* RegTypeStructByVal */ - gint32 struct_size; + gint32 struct_size, align; guint8 size : 4; /* 1, 2, 4, 8, or regs used by RegTypeStructByVal */ } ArgInfo; diff --git a/mono/mini/mini-arm64.c b/mono/mini/mini-arm64.c index 3ad91e31cd0..1884dc1d49d 100644 --- a/mono/mini/mini-arm64.c +++ b/mono/mini/mini-arm64.c @@ -1902,7 +1902,7 @@ mono_arch_create_vars (MonoCompile *cfg) if (cfg->method->save_lmf) { cfg->create_lmf_var = TRUE; cfg->lmf_ir = TRUE; -#ifndef TARGET_MACH +#ifdef HAVE_GET_TLS_ADDR cfg->lmf_ir_mono_lmf = TRUE; #endif } diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c index 68427314ac5..272065388e6 100644 --- a/mono/mini/mini-exceptions.c +++ b/mono/mini/mini-exceptions.c @@ -73,6 +73,7 @@ #include "seq-points.h" #include "llvm-runtime.h" #include "mini-llvm.h" +#include "interp/interp.h" #ifdef ENABLE_LLVM #include "mini-llvm-cpp.h" @@ -220,7 +221,13 @@ mono_exceptions_init (void) #ifdef MONO_ARCH_HAVE_EXCEPTIONS_INIT mono_arch_exceptions_init (); #endif - cbs.mono_walk_stack_with_ctx = mono_runtime_walk_stack_with_ctx; +#ifdef ENABLE_INTERPRETER + if (mono_use_interpreter) + cbs.mono_walk_stack_with_ctx = interp_walk_stack_with_ctx; + else +#endif + cbs.mono_walk_stack_with_ctx = mono_runtime_walk_stack_with_ctx; + cbs.mono_walk_stack_with_state = mono_walk_stack_with_state; if (mono_llvm_only) @@ -1375,7 +1382,7 @@ wrap_non_exception_throws (MonoMethod *m) static MonoArray* build_native_trace (MonoError *error) { - mono_error_init (error); + error_init (error); /* This puppy only makes sense on mobile, IOW, ARM. */ #if defined (HAVE_BACKTRACE_SYMBOLS) && defined (TARGET_ARM) MonoArray *res; @@ -1638,7 +1645,7 @@ mono_handle_exception_internal_first_pass (MonoContext *ctx, MonoObject *obj, gi } MonoError isinst_error; - mono_error_init (&isinst_error); + error_init (&isinst_error); if (ei->flags == MONO_EXCEPTION_CLAUSE_NONE && mono_object_isinst_checked (ex_obj, catch_class, &error)) { setup_stack_trace (mono_ex, dynamic_methods, &trace_ips); g_slist_free (dynamic_methods); @@ -1946,7 +1953,7 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu filter_idx ++; } - mono_error_init (&error); + error_init (&error); if ((ei->flags == MONO_EXCEPTION_CLAUSE_NONE && mono_object_isinst_checked (ex_obj, catch_class, &error)) || filtered) { /* diff --git a/mono/mini/mini-generic-sharing.c b/mono/mini/mini-generic-sharing.c index e29b80e2e30..65ce24f3afc 100644 --- a/mono/mini/mini-generic-sharing.c +++ b/mono/mini/mini-generic-sharing.c @@ -870,7 +870,7 @@ class_get_rgctx_template_oti (MonoClass *klass, int type_argc, guint32 slot, gbo static gpointer class_type_info (MonoDomain *domain, MonoClass *klass, MonoRgctxInfoType info_type, MonoError *error) { - mono_error_init (error); + error_init (error); switch (info_type) { case MONO_RGCTX_INFO_STATIC_DATA: { @@ -1538,7 +1538,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti gpointer data; gboolean temporary; - mono_error_init (error); + error_init (error); if (!oti->data) return NULL; @@ -2320,7 +2320,7 @@ fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContex int rgctx_index; gboolean do_free; - mono_error_init (error); + error_init (error); g_assert (rgctx); @@ -2408,7 +2408,7 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot, MonoRuntimeGenericContext *rgctx; gpointer info; - mono_error_init (error); + error_init (error); mono_domain_lock (domain); diff --git a/mono/mini/mini-ia64.c b/mono/mini/mini-ia64.c index 0e06bf13f89..e60d80a4ff2 100644 --- a/mono/mini/mini-ia64.c +++ b/mono/mini/mini-ia64.c @@ -3782,7 +3782,7 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, { MonoJumpInfo *patch_info; - mono_error_init (error); + error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index 563607f8c0f..46ddd5085bb 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -1431,7 +1431,10 @@ sig_to_llvm_sig_full (EmitContext *ctx, MonoMethodSignature *sig, LLVMCallInfo * pindex ++; break; case LLVMArgAsIArgs: - param_types [pindex] = LLVMArrayType (IntPtrType (), ainfo->nslots); + if (ainfo->esize == 8) + param_types [pindex] = LLVMArrayType (LLVMInt64Type (), ainfo->nslots); + else + param_types [pindex] = LLVMArrayType (IntPtrType (), ainfo->nslots); pindex ++; break; case LLVMArgVtypeByRef: @@ -3490,7 +3493,10 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref, } case LLVMArgAsIArgs: g_assert (addresses [reg]); - args [pindex] = LLVMBuildLoad (ctx->builder, convert (ctx, addresses [reg], LLVMPointerType (LLVMArrayType (IntPtrType (), ainfo->nslots), 0)), ""); + if (ainfo->esize == 8) + args [pindex] = LLVMBuildLoad (ctx->builder, convert (ctx, addresses [reg], LLVMPointerType (LLVMArrayType (LLVMInt64Type (), ainfo->nslots), 0)), ""); + else + args [pindex] = LLVMBuildLoad (ctx->builder, convert (ctx, addresses [reg], LLVMPointerType (LLVMArrayType (IntPtrType (), ainfo->nslots), 0)), ""); break; case LLVMArgVtypeAsScalar: g_assert_not_reached (); @@ -9110,7 +9116,7 @@ emit_dbg_loc (EmitContext *ctx, LLVMBuilderRef builder, const unsigned char *cil MonoDebugSourceLocation *loc; LLVMValueRef loc_md; - loc = mono_debug_symfile_lookup_location (ctx->minfo, cil_code - cfg->header->code); + loc = mono_debug_method_lookup_location (ctx->minfo, cil_code - cfg->header->code); if (loc) { #if LLVM_API_VERSION > 100 @@ -9128,7 +9134,7 @@ emit_dbg_loc (EmitContext *ctx, LLVMBuilderRef builder, const unsigned char *cil loc_md = LLVMMDNode (md_args, nmd_args); LLVMSetCurrentDebugLocation (builder, loc_md); #endif - mono_debug_symfile_free_location (loc); + mono_debug_free_source_location (loc); } } } diff --git a/mono/mini/mini-mips.c b/mono/mini/mini-mips.c index 4742555d851..4eecb95e25b 100644 --- a/mono/mini/mini-mips.c +++ b/mono/mini/mini-mips.c @@ -4539,7 +4539,7 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, { MonoJumpInfo *patch_info; - mono_error_init (error); + error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; diff --git a/mono/mini/mini-ops.h b/mono/mini/mini-ops.h index c65def26bab..bccd97d16a3 100644 --- a/mono/mini/mini-ops.h +++ b/mono/mini/mini-ops.h @@ -1396,9 +1396,7 @@ MINI_OP(OP_ARM64_CBNZX, "arm64_cbnzx", NONE, IREG, NONE) #endif /* Same as OUTARG_VT, but has a dreg */ -#ifdef ENABLE_LLVM MINI_OP(OP_LLVM_OUTARG_VT, "llvm_outarg_vt", IREG, VREG, NONE) -#endif MINI_OP(OP_OBJC_GET_SELECTOR, "objc_get_selector", IREG, NONE, NONE) diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c index e59f98cacca..4af328dc5d7 100644 --- a/mono/mini/mini-ppc.c +++ b/mono/mini/mini-ppc.c @@ -4689,7 +4689,7 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, MonoJumpInfo *patch_info; gboolean compile_aot = !run_cctors; - mono_error_init (error); + error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index ece32339359..9336b94f2d2 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -66,6 +66,7 @@ #include <mono/utils/mono-threads-coop.h> #include <mono/utils/checked-build.h> #include <mono/metadata/w32handle.h> +#include <mono/metadata/threadpool.h> #include "mini.h" #include "seq-points.h" @@ -90,7 +91,7 @@ #endif #ifdef ENABLE_INTERPRETER -#include "interpreter/interp.h" +#include "interp/interp.h" #endif static guint32 default_opt = 0; @@ -1288,7 +1289,7 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code, unsigned char *ip = patch_info->ip.i + code; gconstpointer target = NULL; - mono_error_init (error); + error_init (error); switch (patch_info->type) { case MONO_PATCH_INFO_BB: @@ -1769,7 +1770,7 @@ mono_jit_compile_method_with_opt (MonoMethod *method, guint32 opt, MonoError *er MonoJitICallInfo *callinfo = NULL; WrapperInfo *winfo = NULL; - mono_error_init (error); + error_init (error); #ifdef ENABLE_INTERPRETER if (mono_use_interpreter) @@ -2277,7 +2278,7 @@ mono_llvmonly_runtime_invoke (MonoMethod *method, RuntimeInvokeInfo *info, void gpointer *param_refs; int i, pindex; - mono_error_init (error); + error_init (error); g_assert (info->gsharedvt_invoke); @@ -2366,7 +2367,7 @@ mono_jit_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObjec return mono_interp_runtime_invoke (method, obj, params, exc, error); #endif - mono_error_init (error); + error_init (error); if (obj == NULL && !(method->flags & METHOD_ATTRIBUTE_STATIC) && !method->string_ctor && (method->wrapper_type == 0)) { g_warning ("Ignoring invocation of an instance method on a NULL instance.\n"); @@ -2907,7 +2908,7 @@ mono_jit_create_remoting_trampoline (MonoDomain *domain, MonoMethod *method, Mon MonoMethod *nm; guint8 *addr = NULL; - mono_error_init (error); + error_init (error); if ((method->flags & METHOD_ATTRIBUTE_VIRTUAL) && mono_method_signature (method)->generic_param_count) { return mono_create_specific_trampoline (method, MONO_TRAMPOLINE_GENERIC_VIRTUAL_REMOTING, @@ -3047,6 +3048,10 @@ mini_init_delegate (MonoDelegate *del) { if (mono_llvm_only) del->extra_arg = mini_get_delegate_arg (del->method, del->method_ptr); +#ifdef ENABLE_INTERPRETER + if (mono_use_interpreter) + mono_interp_init_delegate (del); +#endif } char* @@ -4110,6 +4115,8 @@ mini_cleanup (MonoDomain *domain) mono_runtime_cleanup (domain); #endif + mono_threadpool_cleanup (); + mono_profiler_shutdown (); free_jit_tls_data ((MonoJitTlsData *)mono_tls_get_jit_tls ()); diff --git a/mono/mini/mini-s390x.c b/mono/mini/mini-s390x.c index 419c4bf51b5..d6e6bc42408 100644 --- a/mono/mini/mini-s390x.c +++ b/mono/mini/mini-s390x.c @@ -5429,7 +5429,7 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, { MonoJumpInfo *patch_info; - mono_error_init (error); + error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; diff --git a/mono/mini/mini-sparc.c b/mono/mini/mini-sparc.c index d02988845ae..88fd22fe936 100644 --- a/mono/mini/mini-sparc.c +++ b/mono/mini/mini-sparc.c @@ -3682,7 +3682,7 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, { MonoJumpInfo *patch_info; - mono_error_init (error); + error_init (error); /* FIXME: Move part of this to arch independent code */ for (patch_info = ji; patch_info; patch_info = patch_info->next) { diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index 7506b5ce807..92abc196e80 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -167,7 +167,7 @@ mini_resolve_imt_method (MonoVTable *vt, gpointer *vtable_slot, MonoMethod *imt_ g_assert (imt_slot < MONO_IMT_SIZE); - mono_error_init (error); + error_init (error); /* This has to be variance aware since imt_method can be from an interface that vt->klass doesn't directly implement */ interface_offset = mono_class_interface_offset_with_variance (vt->klass, imt_method->klass, &variance_used); if (interface_offset < 0) @@ -523,7 +523,7 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTable * gpointer *orig_vtable_slot, *vtable_slot_to_patch = NULL; MonoJitInfo *ji = NULL; - mono_error_init (error); + error_init (error); virtual_ = vt && (gpointer)vtable_slot > (gpointer)vt; imt_call = vt && (gpointer)vtable_slot < (gpointer)vt; @@ -1133,7 +1133,7 @@ mono_delegate_trampoline (mgreg_t *regs, guint8 *code, gpointer *arg, guint8* tr if (!is_remote) { sig = tramp_info->sig; if (!(sig && method == tramp_info->method)) { - mono_error_init (&err); + error_init (&err); sig = mono_method_signature_checked (method, &err); if (!sig) { mono_error_set_pending_exception (&err); @@ -1167,7 +1167,7 @@ mono_delegate_trampoline (mgreg_t *regs, guint8 *code, gpointer *arg, guint8* tr if (method) { sig = tramp_info->sig; if (!(sig && method == tramp_info->method)) { - mono_error_init (&err); + error_init (&err); sig = mono_method_signature_checked (method, &err); if (!sig) { mono_error_set_pending_exception (&err); @@ -1457,7 +1457,7 @@ mono_create_jump_trampoline (MonoDomain *domain, MonoMethod *method, gboolean ad gpointer code; guint32 code_size = 0; - mono_error_init (error); + error_init (error); code = mono_jit_find_compiled_method_with_jit_info (domain, method, &ji); /* @@ -1515,7 +1515,7 @@ mono_create_jit_trampoline (MonoDomain *domain, MonoMethod *method, MonoError *e { gpointer tramp; - mono_error_init (error); + error_init (error); if (mono_aot_only) { if (mono_llvm_only && method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED) @@ -1609,7 +1609,7 @@ mono_create_delegate_trampoline_info (MonoDomain *domain, MonoClass *klass, Mono tramp_info->impl_nothis = mono_arch_get_delegate_invoke_impl (mono_method_signature (invoke), FALSE); tramp_info->method = method; if (method) { - mono_error_init (&error); + error_init (&error); tramp_info->sig = mono_method_signature_checked (method, &error); tramp_info->need_rgctx_tramp = mono_method_needs_static_rgctx_invoke (method, FALSE); } @@ -1636,7 +1636,7 @@ no_delegate_trampoline (void) gpointer mono_create_delegate_trampoline (MonoDomain *domain, MonoClass *klass) { - if (mono_llvm_only) + if (mono_llvm_only || mono_use_interpreter) return no_delegate_trampoline; return mono_create_delegate_trampoline_info (domain, klass, NULL)->invoke_impl; diff --git a/mono/mini/mini-x86.h b/mono/mini/mini-x86.h index 6e04f7d3758..edc0bb19ecc 100644 --- a/mono/mini/mini-x86.h +++ b/mono/mini/mini-x86.h @@ -34,12 +34,6 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep); #endif /* HOST_WIN32 */ -#ifdef __HAIKU__ -struct sigcontext { - vregs regs; -}; -#endif /* __HAIKU__ */ - #if defined( __linux__) || defined(__sun) || defined(__APPLE__) || defined(__NetBSD__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) #define MONO_ARCH_USE_SIGACTION diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 35d0eadf8be..807cd5dd470 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -3236,7 +3236,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl if (cfg->gen_seq_points) cfg->seq_points = g_ptr_array_new (); - mono_error_init (&cfg->error); + error_init (&cfg->error); if (cfg->compile_aot && !try_generic_shared && (method->is_generic || mono_class_is_gtd (method->klass) || method_is_gshared)) { cfg->exception_type = MONO_EXCEPTION_GENERIC_SHARING_FAILED; @@ -3278,7 +3278,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl } cfg->method_to_register = method_to_register; - mono_error_init (&err); + error_init (&err); sig = mono_method_signature_checked (cfg->method, &err); if (!sig) { cfg->exception_type = MONO_EXCEPTION_TYPE_LOAD; @@ -4066,7 +4066,7 @@ mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, in GTimer *jit_timer; MonoMethod *prof_method, *shared; - mono_error_init (error); + error_init (error); if ((method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) || (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL)) { diff --git a/mono/mini/mini.h b/mono/mini/mini.h index d55825ed383..d8e9f9ca547 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -826,7 +826,7 @@ typedef struct { * in the structure. */ int nslots; - /* Only if storage == LLVMArgAsFpArgs/LLVMArgFpStruct (4/8) */ + /* Only if storage == LLVMArgAsIArgs/LLVMArgAsFpArgs/LLVMArgFpStruct (4/8) */ int esize; /* Parameter index in the LLVM signature */ int pindex; @@ -2085,12 +2085,6 @@ typedef struct { int type; } StackSlot; -#if HAVE_ARRAY_ELEM_INIT -extern const guint8 mono_burg_arity []; -#else -extern guint8 mono_burg_arity []; -#endif - extern const char MONO_ARCH_CPU_SPEC []; #define MONO_ARCH_CPU_SPEC_IDX_COMBINE(a) a ## _idx #define MONO_ARCH_CPU_SPEC_IDX(a) MONO_ARCH_CPU_SPEC_IDX_COMBINE(a) diff --git a/mono/mini/objects.cs b/mono/mini/objects.cs index 3aa8a24aaf4..21fd43e7d43 100644 --- a/mono/mini/objects.cs +++ b/mono/mini/objects.cs @@ -473,7 +473,6 @@ class Tests { return o.GetHashCode (); } - [Category ("!INTERPRETER")] public static int test_0_unbox_trampoline2 () { int i = 12; object o = i; @@ -623,7 +622,6 @@ class Tests { return 0; } - [Category ("!INTERPRETER")] public static int test_0_multi_array_cast () { Duper[,] d = new Duper [1, 1]; object[,] o = d; @@ -876,6 +874,23 @@ class Tests { return 2; } + class InstanceDelegateTest { + public int a; + + public int return_field () { + return a; + } + } + + public static int test_2_instance_delegate_with_field () { + InstanceDelegateTest t = new InstanceDelegateTest () { a = 1337 }; + GetIntDel del = new GetIntDel (t.return_field); + int v = del (); + if (v != 1337) + return 0; + return 2; + } + interface IFaceVirtualDel { int return_field (); } @@ -890,21 +905,18 @@ class Tests { } } - [Category ("!INTERPRETER")] public static int test_42_vtype_delegate () { var s = new VtypeVirtualDelStruct () { f = 42 }; Func<int> f = s.return_field_nonvirt; return f (); } - [Category ("!INTERPRETER")] public static int test_42_vtype_virtual_delegate () { IFaceVirtualDel s = new VtypeVirtualDelStruct () { f = 42 }; Func<int> f = s.return_field; return f (); } - [Category ("!INTERPRETER")] public static int test_1_store_decimal () { decimal[,] a = {{1}}; @@ -1423,7 +1435,6 @@ ncells ) { return 0; } - [Category ("!INTERPRETER")] static int test_0_array_get_set_soft_float () { float[,] arr = new float [2, 2]; arr [0, 0] = 256f; @@ -1584,7 +1595,6 @@ ncells ) { return mInstance; } - [Category ("!INTERPRETER")] static int test_0_synchronized () { getInstance (); return 0; @@ -1753,7 +1763,6 @@ ncells ) { } } - [Category ("!INTERPRETER")] public static int test_0_delegate_to_virtual_generic_on_ifaces () { IComparer2 c = new AClass (); @@ -1776,7 +1785,6 @@ ncells ) { enum Mine { One, Two } - [Category ("!INTERPRETER")] public static int test_0_enum_gethashcode_opt () { int sum = 0; for (int i = 0; i < 1000000; ++i) diff --git a/mono/mini/seq-points.c b/mono/mini/seq-points.c index a0294d7dd46..62378326203 100644 --- a/mono/mini/seq-points.c +++ b/mono/mini/seq-points.c @@ -223,6 +223,8 @@ mono_save_seq_point_info (MonoCompile *cfg) } } + g_free (seq_points); + if (has_debug_data) g_free (next); diff --git a/mono/mini/tramp-amd64.c b/mono/mini/tramp-amd64.c index b143645fb7d..b2b7a7fc5fd 100644 --- a/mono/mini/tramp-amd64.c +++ b/mono/mini/tramp-amd64.c @@ -982,80 +982,144 @@ gpointer mono_arch_get_enter_icall_trampoline (MonoTrampInfo **info) { #ifdef ENABLE_INTERPRETER - const int gregs_num = 6; - guint8 *start = NULL, *code, *exits [gregs_num], *leave_tramp; + const int gregs_num = 8; + const int fregs_num = 3; + guint8 *start = NULL, *code, *label_gexits [gregs_num], *label_fexits [fregs_num], *label_leave_tramp [3], *label_is_float_ret; MonoJumpInfo *ji = NULL; GSList *unwind_ops = NULL; - static int arg_regs[] = {AMD64_ARG_REG1, AMD64_ARG_REG2, AMD64_ARG_REG3, AMD64_ARG_REG4, AMD64_R8, AMD64_R9}; - int i, offset = 0; + static int farg_regs[] = {AMD64_XMM0, AMD64_XMM1, AMD64_XMM2}; + int i, framesize = 0, off_rbp, off_methodargs, off_targetaddr; start = code = (guint8 *) mono_global_codeman_reserve (256); + off_rbp = -framesize; + + framesize += sizeof (mgreg_t); + off_methodargs = -framesize; + + framesize += sizeof (mgreg_t); + off_targetaddr = -framesize; + + framesize += (gregs_num - PARAM_REGS) * sizeof (mgreg_t); + + amd64_push_reg (code, AMD64_RBP); + amd64_mov_reg_reg (code, AMD64_RBP, AMD64_RSP, sizeof (mgreg_t)); + amd64_alu_reg_imm (code, X86_SUB, AMD64_RSP, ALIGN_TO (framesize, MONO_ARCH_FRAME_ALIGNMENT)); + /* save MethodArguments* onto stack */ - amd64_push_reg (code, AMD64_ARG_REG2); + amd64_mov_membase_reg (code, AMD64_RBP, off_methodargs, AMD64_ARG_REG2, sizeof (mgreg_t)); /* save target address on stack */ - amd64_push_reg (code, AMD64_ARG_REG1); - amd64_push_reg (code, AMD64_RAX); + amd64_mov_membase_reg (code, AMD64_RBP, off_targetaddr, AMD64_ARG_REG1, sizeof (mgreg_t)); /* load pointer to MethodArguments* into R11 */ amd64_mov_reg_reg (code, AMD64_R11, AMD64_ARG_REG2, 8); - /* TODO: do float stuff first */ + /* move flen into RAX */ // TODO: struct offset + amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, 16, sizeof (mgreg_t)); + /* load pointer to fregs into R11 */ // TODO: struct offset + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 24, sizeof (mgreg_t)); + + for (i = 0; i < fregs_num; ++i) { + amd64_test_reg_reg (code, AMD64_RAX, AMD64_RAX); + label_fexits [i] = code; + x86_branch8 (code, X86_CC_Z, 0, FALSE); + amd64_sse_movsd_reg_membase (code, farg_regs [i], AMD64_R11, i * sizeof (double)); + amd64_dec_reg_size (code, AMD64_RAX, 1); + } + + for (i = 0; i < fregs_num; i++) { + x86_patch (label_fexits [i], code); + } + + /* load pointer to MethodArguments* into R11 */ + amd64_mov_reg_reg (code, AMD64_R11, AMD64_ARG_REG2, sizeof (mgreg_t)); /* move ilen into RAX */ // TODO: struct offset - amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, 0, 8); - /* load pointer to iregs into R11 */ // TODO: struct offset - amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 8, 8); + amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, 0, sizeof (mgreg_t)); + int stack_offset = 0; for (i = 0; i < gregs_num; i++) { amd64_test_reg_reg (code, AMD64_RAX, AMD64_RAX); - exits [i] = code; - x86_branch8 (code, X86_CC_Z, 0, FALSE); + label_gexits [i] = code; + x86_branch32 (code, X86_CC_Z, 0, FALSE); -#ifdef TARGET_WIN32 - if (i < 4) { -#else - if (i < 6) { -#endif - amd64_mov_reg_membase (code, arg_regs [i], AMD64_R11, i * sizeof (gpointer), 8); + /* load pointer to MethodArguments* into R11 */ + amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, off_methodargs, sizeof (mgreg_t)); + /* load pointer to iregs into R11 */ // TODO: struct offset + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 8, sizeof (mgreg_t)); + + if (i < PARAM_REGS) { + amd64_mov_reg_membase (code, param_regs [i], AMD64_R11, i * sizeof (mgreg_t), sizeof (mgreg_t)); } else { - g_error ("not tested yet."); - amd64_push_reg (code, AMD64_RAX); - amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, i * sizeof (gpointer), 8); - amd64_mov_membase_reg (code, AMD64_RBP, offset, AMD64_RAX, sizeof (gpointer)); - offset += sizeof (gpointer); - amd64_pop_reg (code, AMD64_RAX); + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, i * sizeof (mgreg_t), sizeof (mgreg_t)); + amd64_mov_membase_reg (code, AMD64_RSP, stack_offset, AMD64_R11, sizeof (mgreg_t)); + stack_offset += sizeof (mgreg_t); } amd64_dec_reg_size (code, AMD64_RAX, 1); } for (i = 0; i < gregs_num; i++) { - x86_patch (exits [i], code); + x86_patch (label_gexits [i], code); } - - amd64_pop_reg (code, AMD64_RAX); - amd64_pop_reg (code, AMD64_R11); + /* load target addr */ + amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, off_targetaddr, sizeof (mgreg_t)); /* call into native function */ amd64_call_reg (code, AMD64_R11); /* load MethodArguments */ - amd64_pop_reg (code, AMD64_R11); + amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, off_methodargs, sizeof (mgreg_t)); + + /* load is_float_ret */ // TODO: struct offset + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 0x28, sizeof (mgreg_t)); + + /* check if a float return value is expected */ + amd64_test_reg_reg (code, AMD64_R11, AMD64_R11); + + label_is_float_ret = code; + x86_branch8 (code, X86_CC_NZ, 0, FALSE); + + + + /* greg return */ + /* load MethodArguments */ + amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, off_methodargs, sizeof (mgreg_t)); /* load retval */ // TODO: struct offset - amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 0x20, 8); + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 0x20, sizeof (mgreg_t)); amd64_test_reg_reg (code, AMD64_R11, AMD64_R11); - leave_tramp = code; + label_leave_tramp [0] = code; x86_branch8 (code, X86_CC_Z, 0, FALSE); - amd64_mov_membase_reg (code, AMD64_R11, 0, AMD64_RAX, 8); + amd64_mov_membase_reg (code, AMD64_R11, 0, AMD64_RAX, sizeof (mgreg_t)); - x86_patch (leave_tramp, code); - amd64_ret (code); + label_leave_tramp [1] = code; + x86_jump8 (code, 0); + + /* freg return */ + x86_patch (label_is_float_ret, code); + /* load MethodArguments */ + amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, off_methodargs, sizeof (mgreg_t)); + /* load retval */ // TODO: struct offset + amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 0x20, sizeof (mgreg_t)); + + amd64_test_reg_reg (code, AMD64_R11, AMD64_R11); + label_leave_tramp [2] = code; + x86_branch8 (code, X86_CC_Z, 0, FALSE); + + amd64_sse_movsd_membase_reg (code, AMD64_R11, 0, AMD64_XMM0); + + for (i = 0; i < 3; i++) + x86_patch (label_leave_tramp [i], code); + + amd64_alu_reg_imm (code, X86_ADD, AMD64_RSP, ALIGN_TO (framesize, MONO_ARCH_FRAME_ALIGNMENT)); + amd64_pop_reg (code, AMD64_RBP); + amd64_ret (code); + mono_arch_flush_icache (start, code - start); mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL); diff --git a/mono/sgen/gc-internal-agnostic.h b/mono/sgen/gc-internal-agnostic.h index 62039f72679..dc9b091bf6f 100644 --- a/mono/sgen/gc-internal-agnostic.h +++ b/mono/sgen/gc-internal-agnostic.h @@ -93,6 +93,9 @@ MonoGCDescriptor mono_gc_make_descr_for_array (int vector, gsize *elem_bitmap, i /* simple interface for data structures needed in the runtime */ MonoGCDescriptor mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits); +/* Return a root descriptor for a vector with repeating refs bitmap */ +MonoGCDescriptor mono_gc_make_vector_descr (void); + /* Return a root descriptor for a root with all refs */ MonoGCDescriptor mono_gc_make_root_descr_all_refs (int numbits); diff --git a/mono/sgen/sgen-cardtable.c b/mono/sgen/sgen-cardtable.c index cf89aedad4f..0138669a788 100644 --- a/mono/sgen/sgen-cardtable.c +++ b/mono/sgen/sgen-cardtable.c @@ -412,6 +412,7 @@ sgen_card_table_clear_cards (void) /*XXX we could do this in 2 ways. using mincore or iterating over all sections/los objects */ sgen_major_collector_iterate_block_ranges (clear_cards); sgen_los_iterate_live_block_ranges (clear_cards); + sgen_wbroots_iterate_live_block_ranges (clear_cards); } static void @@ -433,6 +434,7 @@ sgen_card_table_scan_remsets (ScanCopyContext ctx) /*First we copy*/ sgen_major_collector_iterate_block_ranges (move_cards_to_shadow_table); sgen_los_iterate_live_block_ranges (move_cards_to_shadow_table); + sgen_wbroots_iterate_live_block_ranges (move_cards_to_shadow_table); /*Then we clear*/ sgen_card_table_clear_cards (); @@ -446,6 +448,8 @@ sgen_card_table_scan_remsets (ScanCopyContext ctx) SGEN_TV_GETTIME (atv); last_los_scan_time = SGEN_TV_ELAPSED (btv, atv); los_card_scan_time += last_los_scan_time; + + sgen_wbroots_scan_card_table (ctx); } guint8* @@ -488,6 +492,67 @@ sgen_card_table_dump_obj_card (GCObject *object, size_t size, void *dummy) } #endif +/* + * Cardtable scanning + */ + +#define MWORD_MASK (sizeof (mword) - 1) + +static inline int +find_card_offset (mword card) +{ +/*XXX Use assembly as this generates some pretty bad code */ +#if (defined(__i386__) || defined(__arm__)) && defined(__GNUC__) + return (__builtin_ffs (card) - 1) / 8; +#elif (defined(__x86_64__) || defined(__aarch64__)) && defined(__GNUC__) + return (__builtin_ffsll (card) - 1) / 8; +#elif defined(__s390x__) + return (__builtin_ffsll (GUINT64_TO_LE(card)) - 1) / 8; +#else + int i; + guint8 *ptr = (guint8 *) &card; + for (i = 0; i < sizeof (mword); ++i) { + if (ptr[i]) + return i; + } + return 0; +#endif +} + +guint8* +sgen_find_next_card (guint8 *card_data, guint8 *end) +{ + mword *cards, *cards_end; + mword card; + + while ((((mword)card_data) & MWORD_MASK) && card_data < end) { + if (*card_data) + return card_data; + ++card_data; + } + + if (card_data == end) + return end; + + cards = (mword*)card_data; + cards_end = (mword*)((mword)end & ~MWORD_MASK); + while (cards < cards_end) { + card = *cards; + if (card) + return (guint8*)cards + find_card_offset (card); + ++cards; + } + + card_data = (guint8*)cards_end; + while (card_data < end) { + if (*card_data) + return card_data; + ++card_data; + } + + return end; +} + void sgen_cardtable_scan_object (GCObject *obj, mword block_obj_size, guint8 *cards, ScanCopyContext ctx) { diff --git a/mono/sgen/sgen-cardtable.h b/mono/sgen/sgen-cardtable.h index 059fb77fa64..a4fa1e32b6e 100644 --- a/mono/sgen/sgen-cardtable.h +++ b/mono/sgen/sgen-cardtable.h @@ -9,6 +9,7 @@ /*WARNING: This function returns the number of cards regardless of overflow in case of overlapping cards.*/ mword sgen_card_table_number_of_cards_in_range (mword address, mword size); +guint8* sgen_find_next_card (guint8 *card_data, guint8 *end); void sgen_card_table_reset_region (mword start, mword end); void* sgen_card_table_align_pointer (void *ptr); diff --git a/mono/sgen/sgen-debug.c b/mono/sgen/sgen-debug.c index 195894f8cbf..a78fb3dad57 100644 --- a/mono/sgen/sgen-debug.c +++ b/mono/sgen/sgen-debug.c @@ -804,6 +804,15 @@ scan_roots_for_specific_ref (GCObject *key, int root_type) } break; } + case ROOT_DESC_VECTOR: { + void **p; + + for (p = start_root; p < (void**)root->end_root; p++) { + if (*p) + check_root_obj_specific_ref (root, key, (GCObject *)*p); + } + break; + } case ROOT_DESC_USER: { SgenUserRootMarkFunc marker = sgen_get_user_descriptor_func (desc); marker (start_root, check_root_obj_specific_ref_from_marker, NULL); @@ -908,6 +917,15 @@ sgen_scan_for_registered_roots_in_domain (MonoDomain *domain, int root_type) } break; } + case ROOT_DESC_VECTOR: { + void **p; + + for (p = start_root; p < (void**)root->end_root; p++) { + if (*p) + check_obj_not_in_domain ((MonoObject **)*p); + } + break; + } case ROOT_DESC_USER: { SgenUserRootMarkFunc marker = sgen_get_user_descriptor_func (desc); marker (start_root, check_obj_not_in_domain_callback, NULL); diff --git a/mono/sgen/sgen-descriptor.c b/mono/sgen/sgen-descriptor.c index 248b07b8f50..f358c9da429 100644 --- a/mono/sgen/sgen-descriptor.c +++ b/mono/sgen/sgen-descriptor.c @@ -276,6 +276,12 @@ mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits) } SgenDescriptor +mono_gc_make_vector_descr (void) +{ + return MAKE_ROOT_DESC (ROOT_DESC_VECTOR, 0); +} + +SgenDescriptor mono_gc_make_root_descr_all_refs (int numbits) { gsize *gc_bitmap; diff --git a/mono/sgen/sgen-descriptor.h b/mono/sgen/sgen-descriptor.h index 54e1b7681fb..e072ca45d32 100644 --- a/mono/sgen/sgen-descriptor.h +++ b/mono/sgen/sgen-descriptor.h @@ -114,6 +114,7 @@ enum { ROOT_DESC_BITMAP, ROOT_DESC_RUN_LEN, ROOT_DESC_COMPLEX, + ROOT_DESC_VECTOR, ROOT_DESC_USER, ROOT_DESC_TYPE_MASK = 0x7, ROOT_DESC_TYPE_SHIFT = 3, diff --git a/mono/sgen/sgen-gc.c b/mono/sgen/sgen-gc.c index 7c02172c6ee..ec27de4224b 100644 --- a/mono/sgen/sgen-gc.c +++ b/mono/sgen/sgen-gc.c @@ -858,6 +858,7 @@ static void precisely_scan_objects_from (void** start_root, void** end_root, char* n_start, char *n_end, SgenDescriptor desc, ScanCopyContext ctx) { CopyOrMarkObjectFunc copy_func = ctx.ops->copy_or_mark_object; + ScanPtrFieldFunc scan_field_func = ctx.ops->scan_ptr_field; SgenGrayQueue *queue = ctx.queue; switch (desc & ROOT_DESC_TYPE_MASK) { @@ -892,6 +893,15 @@ precisely_scan_objects_from (void** start_root, void** end_root, char* n_start, } break; } + case ROOT_DESC_VECTOR: { + void **p; + + for (p = start_root; p < end_root; p++) { + if (*p) + scan_field_func (NULL, (GCObject**)p, queue); + } + break; + } case ROOT_DESC_USER: { SgenUserRootMarkFunc marker = sgen_get_user_descriptor_func (desc); marker (start_root, single_arg_user_copy_or_mark, &ctx); @@ -1481,13 +1491,16 @@ enqueue_scan_from_roots_jobs (SgenGrayQueue *gc_thread_gray_queue, char *heap_st scrrj->root_type = ROOT_TYPE_NORMAL; sgen_workers_enqueue_job (&scrrj->scan_job.job, enqueue); - scrrj = (ScanFromRegisteredRootsJob*)sgen_thread_pool_job_alloc ("scan from registered roots wbarrier", job_scan_from_registered_roots, sizeof (ScanFromRegisteredRootsJob)); - scrrj->scan_job.ops = ops; - scrrj->scan_job.gc_thread_gray_queue = gc_thread_gray_queue; - scrrj->heap_start = heap_start; - scrrj->heap_end = heap_end; - scrrj->root_type = ROOT_TYPE_WBARRIER; - sgen_workers_enqueue_job (&scrrj->scan_job.job, enqueue); + if (current_collection_generation == GENERATION_OLD) { + /* During minors we scan the cardtable for these roots instead */ + scrrj = (ScanFromRegisteredRootsJob*)sgen_thread_pool_job_alloc ("scan from registered roots wbarrier", job_scan_from_registered_roots, sizeof (ScanFromRegisteredRootsJob)); + scrrj->scan_job.ops = ops; + scrrj->scan_job.gc_thread_gray_queue = gc_thread_gray_queue; + scrrj->heap_start = heap_start; + scrrj->heap_end = heap_end; + scrrj->root_type = ROOT_TYPE_WBARRIER; + sgen_workers_enqueue_job (&scrrj->scan_job.job, enqueue); + } /* Threads */ @@ -2599,6 +2612,94 @@ sgen_deregister_root (char* addr) UNLOCK_GC; } +void +sgen_wbroots_iterate_live_block_ranges (sgen_cardtable_block_callback cb) +{ + void **start_root; + RootRecord *root; + SGEN_HASH_TABLE_FOREACH (&roots_hash [ROOT_TYPE_WBARRIER], void **, start_root, RootRecord *, root) { + cb ((mword)start_root, (mword)root->end_root - (mword)start_root); + } SGEN_HASH_TABLE_FOREACH_END; +} + +/* Root equivalent of sgen_client_cardtable_scan_object */ +static void +sgen_wbroot_scan_card_table (void** start_root, mword size, ScanCopyContext ctx) +{ + ScanPtrFieldFunc scan_field_func = ctx.ops->scan_ptr_field; + guint8 *card_data = sgen_card_table_get_card_scan_address ((mword)start_root); + guint8 *card_base = card_data; + mword card_count = sgen_card_table_number_of_cards_in_range ((mword)start_root, size); + guint8 *card_data_end = card_data + card_count; + mword extra_idx = 0; + char *obj_start = sgen_card_table_align_pointer (start_root); + char *obj_end = (char*)start_root + size; +#ifdef SGEN_HAVE_OVERLAPPING_CARDS + guint8 *overflow_scan_end = NULL; +#endif + +#ifdef SGEN_HAVE_OVERLAPPING_CARDS + /*Check for overflow and if so, setup to scan in two steps*/ + if (card_data_end >= SGEN_SHADOW_CARDTABLE_END) { + overflow_scan_end = sgen_shadow_cardtable + (card_data_end - SGEN_SHADOW_CARDTABLE_END); + card_data_end = SGEN_SHADOW_CARDTABLE_END; + } + +LOOP_HEAD: +#endif + + card_data = sgen_find_next_card (card_data, card_data_end); + + for (; card_data < card_data_end; card_data = sgen_find_next_card (card_data + 1, card_data_end)) { + size_t idx = (card_data - card_base) + extra_idx; + char *start = (char*)(obj_start + idx * CARD_SIZE_IN_BYTES); + char *card_end = start + CARD_SIZE_IN_BYTES; + char *elem = start, *first_elem = start; + + /* + * Don't clean first and last card on 32bit systems since they + * may also be part from other roots. + */ + if (card_data != card_base && card_data != (card_data_end - 1)) + sgen_card_table_prepare_card_for_scanning (card_data); + + card_end = MIN (card_end, obj_end); + + if (elem < (char*)start_root) + first_elem = elem = (char*)start_root; + + for (; elem < card_end; elem += SIZEOF_VOID_P) { + if (*(GCObject**)elem) + scan_field_func (NULL, (GCObject**)elem, ctx.queue); + } + + binary_protocol_card_scan (first_elem, elem - first_elem); + } + +#ifdef SGEN_HAVE_OVERLAPPING_CARDS + if (overflow_scan_end) { + extra_idx = card_data - card_base; + card_base = card_data = sgen_shadow_cardtable; + card_data_end = overflow_scan_end; + overflow_scan_end = NULL; + goto LOOP_HEAD; + } +#endif +} + +void +sgen_wbroots_scan_card_table (ScanCopyContext ctx) +{ + void **start_root; + RootRecord *root; + + SGEN_HASH_TABLE_FOREACH (&roots_hash [ROOT_TYPE_WBARRIER], void **, start_root, RootRecord *, root) { + SGEN_ASSERT (0, (root->root_desc & ROOT_DESC_TYPE_MASK) == ROOT_DESC_VECTOR, "Unsupported root type"); + + sgen_wbroot_scan_card_table (start_root, (mword)root->end_root - (mword)start_root, ctx); + } SGEN_HASH_TABLE_FOREACH_END; +} + /* * ###################################################################### * ######## Thread handling (stop/start code) diff --git a/mono/sgen/sgen-gc.h b/mono/sgen/sgen-gc.h index ba7aee72940..a89a5471dd7 100644 --- a/mono/sgen/sgen-gc.h +++ b/mono/sgen/sgen-gc.h @@ -832,6 +832,9 @@ void sgen_finalize_if (SgenObjectPredicateFunc predicate, void *user_data); void sgen_remove_finalizers_if (SgenObjectPredicateFunc predicate, void *user_data, int generation); void sgen_set_suspend_finalizers (void); +void sgen_wbroots_iterate_live_block_ranges (sgen_cardtable_block_callback cb); +void sgen_wbroots_scan_card_table (ScanCopyContext ctx); + void sgen_register_disappearing_link (GCObject *obj, void **link, gboolean track, gboolean in_gc); GCObject* sgen_weak_link_get (void **link_addr); diff --git a/mono/sgen/sgen-marksweep-drain-gray-stack.h b/mono/sgen/sgen-marksweep-drain-gray-stack.h index 6eb4d266fdc..98d8917593c 100644 --- a/mono/sgen/sgen-marksweep-drain-gray-stack.h +++ b/mono/sgen/sgen-marksweep-drain-gray-stack.h @@ -240,7 +240,7 @@ SCAN_OBJECT_FUNCTION_NAME (GCObject *full_object, SgenDescriptor desc, SgenGrayQ GCObject *__old = *(ptr); \ binary_protocol_scan_process_reference ((full_object), (ptr), __old); \ if (__old && !sgen_ptr_in_nursery (__old)) { \ - if (G_UNLIKELY (!sgen_ptr_in_nursery (ptr) && \ + if (G_UNLIKELY (full_object && !sgen_ptr_in_nursery (ptr) && \ sgen_safe_object_is_small (__old, sgen_obj_get_descriptor (__old) & DESC_TYPE_MASK) && \ major_block_is_evacuating (MS_BLOCK_FOR_OBJ (__old)))) { \ mark_mod_union_card ((full_object), (void**)(ptr), __old); \ @@ -249,7 +249,7 @@ SCAN_OBJECT_FUNCTION_NAME (GCObject *full_object, SgenDescriptor desc, SgenGrayQ COPY_OR_MARK_FUNCTION_NAME ((ptr), __old, queue); \ } \ } else { \ - if (G_UNLIKELY (sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)) && !sgen_cement_is_forced (__old))) \ + if (G_UNLIKELY (full_object && sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)) && !sgen_cement_is_forced (__old))) \ mark_mod_union_card ((full_object), (void**)(ptr), __old); \ } \ } while (0) @@ -261,7 +261,7 @@ SCAN_OBJECT_FUNCTION_NAME (GCObject *full_object, SgenDescriptor desc, SgenGrayQ PREFETCH_READ (__old); \ COPY_OR_MARK_FUNCTION_NAME ((ptr), __old, queue); \ } else { \ - if (G_UNLIKELY (sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)) && !sgen_cement_is_forced (__old))) \ + if (G_UNLIKELY (full_object && sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)) && !sgen_cement_is_forced (__old))) \ mark_mod_union_card ((full_object), (void**)(ptr), __old); \ } \ } while (0) @@ -310,6 +310,12 @@ SCAN_VTYPE_FUNCTION_NAME (GCObject *full_object, char *start, SgenDescriptor des static void SCAN_PTR_FIELD_FUNCTION_NAME (GCObject *full_object, GCObject **ptr, SgenGrayQueue *queue) { + /* + * full_object is NULL if we scan unmanaged memory. This means we can't mark + * mod unions for it, so these types of roots currently don't have support + * for the concurrent collector (aka they need to be scanned as normal roots + * both in the start and finishing pause) + */ HANDLE_PTR (ptr, NULL); } #endif diff --git a/mono/sgen/sgen-marksweep.c b/mono/sgen/sgen-marksweep.c index b280749a46a..5c4ec06a9eb 100644 --- a/mono/sgen/sgen-marksweep.c +++ b/mono/sgen/sgen-marksweep.c @@ -2809,6 +2809,7 @@ sgen_marksweep_init_internal (SgenMajorCollector *collector, gboolean is_concurr collector->major_ops_serial.copy_or_mark_object = major_copy_or_mark_object_canonical; collector->major_ops_serial.scan_object = major_scan_object_with_evacuation; + collector->major_ops_serial.scan_ptr_field = major_scan_ptr_field_with_evacuation; collector->major_ops_serial.drain_gray_stack = drain_gray_stack; if (is_concurrent) { collector->major_ops_concurrent_start.copy_or_mark_object = major_copy_or_mark_object_concurrent_canonical; diff --git a/mono/sgen/sgen-workers.c b/mono/sgen/sgen-workers.c index cc1930bcc2f..77c9413ac6c 100644 --- a/mono/sgen/sgen-workers.c +++ b/mono/sgen/sgen-workers.c @@ -330,7 +330,9 @@ marker_idle_func (void *data_untyped) if (data->private_gray_queue.num_sections > 16 && workers_finished && worker_awakenings < active_workers_num) { /* We bound the number of worker awakenings just to be sure */ worker_awakenings++; + mono_os_mutex_lock (&finished_lock); sgen_workers_ensure_awake (); + mono_os_mutex_unlock (&finished_lock); } } else { worker_try_finish (data); @@ -424,7 +426,13 @@ sgen_workers_start_all_workers (SgenObjectOperations *object_ops_nopar, SgenObje worker_awakenings = 0; mono_memory_write_barrier (); + /* + * We expect workers to start finishing only after all of them were awaken. + * Otherwise we might think that we have fewer workers and use wrong context. + */ + mono_os_mutex_lock (&finished_lock); sgen_workers_ensure_awake (); + mono_os_mutex_unlock (&finished_lock); } void diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am index 58ca018ac9b..5062f48d39c 100644 --- a/mono/tests/Makefile.am +++ b/mono/tests/Makefile.am @@ -65,10 +65,14 @@ MCS = $(MCS_NO_LIB) -lib:$(CLASS) ILASM = $(TOOLS_RUNTIME) $(mcs_topdir)/class/lib/build/ilasm.exe -if FULL_AOT_TESTS -TEST_RUNNER = ./test-runner.exe --runtime $(top_builddir)/runtime/mono-wrapper --mono-path "$(CLASS)" --aot-run-flags "$(AOT_RUN_FLAGS)" --aot-build-flags "$(AOT_BUILD_FLAGS)" -else TEST_RUNNER = ./test-runner.exe --runtime $(top_builddir)/runtime/mono-wrapper --mono-path "$(CLASS)" + +if FULL_AOT_TESTS +TEST_RUNNER += --aot-run-flags "$(AOT_RUN_FLAGS)" --aot-build-flags "$(AOT_BUILD_FLAGS)" +endif + +if HYBRID_AOT_TESTS +TEST_RUNNER += --aot-run-flags "$(AOT_RUN_FLAGS)" --aot-build-flags "$(AOT_BUILD_FLAGS)" endif @@ -930,16 +934,18 @@ EXTRA_DIST=test-driver test-runner.cs $(TEST_CS_SRC_DIST) $(TEST_IL_SRC) \ $(ILASM) -out:$@ $< if !FULL_AOT_TESTS -if !HYBRID_AOT_TESTS TEST_DRIVER_HARD_KILL_FEATURE=-r:Mono.Posix.dll endif -endif if FULL_AOT_TESTS TEST_DRIVER_DEPEND=TestDriver.dll$(PLATFORM_AOT_SUFFIX) else +if HYBRID_AOT_TESTS +TEST_DRIVER_DEPEND=TestDriver.dll$(PLATFORM_AOT_SUFFIX) +else TEST_DRIVER_DEPEND=TestDriver.dll endif +endif %.exe: %.cs $(TEST_DRIVER_DEPEND) $(MCS) -r:System.dll -r:System.Xml.dll -r:System.Core.dll -r:TestDriver.dll $(TEST_DRIVER_HARD_KILL_FEATURE) -out:$@ $< @@ -995,8 +1001,12 @@ bug-81466-lib.dll$(PLATFORM_AOT_SUFFIX) if FULL_AOT_TESTS prereqs: $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS) else +if HYBRID_AOT_TESTS +prereqs: $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS) +else prereqs: $(PREREQSI_IL) $(PREREQSI_CS) endif +endif # Target to precompile the test executables tests: $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la prereqs $(GSHARED_TESTS) @@ -1040,6 +1050,9 @@ compile-tests: if FULL_AOT_TESTS $(MAKE) $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS) endif +if HYBRID_AOT_TESTS + $(MAKE) $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS) +endif # Remove empty .stdout and .stderr files for wrench rm-empty-logs: @@ -1462,6 +1475,9 @@ test-inline-call-stack-library.dll: $(TEST_DRIVER_DEPEND) $(srcdir)/test-inline- if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif test-inline-call-stack.exe: $(TEST_DRIVER_DEPEND) test-inline-call-stack-library.dll $(srcdir)/test-inline-call-stack.cs $(MCS) -r:TestDriver.dll -r:test-inline-call-stack-library.dll -out:test-inline-call-stack.exe $(srcdir)/test-inline-call-stack.cs @@ -1509,6 +1525,9 @@ bug-81673.exe bug-81673-interface.dll: $(srcdir)/bug-81673.cs $(srcdir)/bug-8167 if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif EXTRA_DIST += bug-36848-a.cs bug-36848.exe bug-36848-a.dll: $(srcdir)/bug-36848.cs $(srcdir)/bug-36848-a.cs @@ -1518,6 +1537,9 @@ bug-36848.exe bug-36848-a.dll: $(srcdir)/bug-36848.cs $(srcdir)/bug-36848-a.cs if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif EXTRA_DIST += bug-81691-a.cs bug-81691-b.cs bug-81691.exe bug-81691-b.dll: $(srcdir)/bug-81691.cs $(srcdir)/bug-81691-a.cs $(srcdir)/bug-81691-b.cs @@ -1533,6 +1555,9 @@ bug-81466-lib.dll: bug-81466-lib.il if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif bug-81466.exe: bug-81466.il bug-81466-lib.dll $(ILASM) /exe /output:bug-81466.exe $(srcdir)/bug-81466.il @@ -1542,6 +1567,9 @@ bug-324535-il.dll : bug-324535-il.il if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif bug-324535.exe : bug-324535.cs bug-324535-il.dll $(MCS) -r:bug-324535-il.dll -out:bug-324535.exe $(srcdir)/bug-324535.cs @@ -1551,6 +1579,9 @@ custom-modifiers-lib.dll: custom-modifiers-lib.il if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif custom-modifiers.2.exe: custom-modifiers.2.cs custom-modifiers-lib.dll $(MCS) -r:custom-modifiers-lib.dll -out:custom-modifiers.2.exe $(srcdir)/custom-modifiers.2.cs @@ -1560,6 +1591,9 @@ bug-382986-lib.dll: bug-382986-lib.cs if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif bug-382986.exe: bug-382986.cs bug-382986-lib.dll $(MCS) -out:$@ -r:bug-382986-lib.dll $(srcdir)/bug-382986.cs @@ -1587,6 +1621,9 @@ generic-unboxing.2.dll : generic-unboxing.2.il if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif EXTRA_DIST += generic-boxing.2.il generic-boxing.2.dll : generic-boxing.2.il generic-unboxing.2.dll @@ -1594,6 +1631,9 @@ generic-boxing.2.dll : generic-boxing.2.il generic-unboxing.2.dll if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif EXTRA_DIST += generic-unbox.2.cs generic-unbox.2.exe : generic-unbox.2.cs generic-unboxing.2.dll @@ -1609,6 +1649,9 @@ generic-delegate2-lib.2.dll : generic-delegate2-lib.2.il if FULL_AOT_TESTS $(RUNTIME) $(AOT_BUILD_FLAGS) $@ endif +if HYBRID_AOT_TESTS + $(RUNTIME) $(AOT_BUILD_FLAGS) $@ +endif generic-delegate2.2.exe : generic-delegate2.2.cs generic-delegate2-lib.2.dll $(MCS) -r:generic-delegate2-lib.2.dll -out:$@ $(srcdir)/generic-delegate2.2.cs @@ -1763,7 +1806,8 @@ UNHANDLED_EXCEPTION_255_TESTS = \ unhandled-exception-4.exe \ unhandled-exception-5.exe \ unhandled-exception-6.exe \ - unhandled-exception-7.exe + unhandled-exception-7.exe \ + unhandled-exception-8.exe test-unhandled-exception-2: $(UNHANDLED_EXCEPTION_1_TESTS) $(UNHANDLED_EXCEPTION_255_TESTS) $(MAKE) test-unhandled-exception-2-1-with-managed-handler diff --git a/mono/tests/unhandled-exception-8.cs b/mono/tests/unhandled-exception-8.cs new file mode 100644 index 00000000000..7b4de0e97bf --- /dev/null +++ b/mono/tests/unhandled-exception-8.cs @@ -0,0 +1,24 @@ + +using System; +using System.Threading; + +class CustomException : Exception +{ +} + +class Driver +{ + /* expected exit code: 255 */ + public static void Main () + { + if (Environment.GetEnvironmentVariable ("TEST_UNHANDLED_EXCEPTION_HANDLER") != null) + AppDomain.CurrentDomain.UnhandledException += (s, e) => {}; + + ManualResetEvent mre = new ManualResetEvent(false); + + ThreadPool.RegisterWaitForSingleObject (mre, (state, timedOut) => { throw new CustomException (); }, null, -1, true); + mre.Set(); + + Thread.Sleep (5000); + } +}
\ No newline at end of file diff --git a/mono/tests/verifier/make_tests.sh b/mono/tests/verifier/make_tests.sh index 25dd54a9257..ccad6f00ddb 100755 --- a/mono/tests/verifier/make_tests.sh +++ b/mono/tests/verifier/make_tests.sh @@ -3414,7 +3414,7 @@ done ./make_exception_overlap_test.sh exception_entry_overlap_try_over_filter invalid ".try TRY_BLOCK_1 to FILTER_BLOCK_3_A filter FILTER_BLOCK_3 handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" "yes" -#blocks start in the middle of an intruction +#blocks start in the middle of an instruction ./make_exception_overlap_test.sh try_block_start_in_the_middle_of_a_instruction invalid ".try AFTER_PREFIX_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" ./make_exception_overlap_test.sh catch_block_start_in_the_middle_of_a_instruction invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler AFTER_PREFIX_2 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" diff --git a/mono/utils/Makefile.am b/mono/utils/Makefile.am index 2172b996ba0..4b051613420 100644 --- a/mono/utils/Makefile.am +++ b/mono/utils/Makefile.am @@ -134,6 +134,7 @@ monoutils_sources = \ mono-threads-netbsd.c \ mono-threads-openbsd.c \ mono-threads-android.c \ + mono-threads-haiku.c \ mono-threads.h \ mono-threads-debug.h \ mono-threads-api.h \ diff --git a/mono/utils/mono-conc-hashtable.c b/mono/utils/mono-conc-hashtable.c index 9b92493191e..9f5fd6addb1 100644 --- a/mono/utils/mono-conc-hashtable.c +++ b/mono/utils/mono-conc-hashtable.c @@ -114,7 +114,7 @@ mono_conc_hashtable_new (GHashFunc hash_func, GEqualFunc key_equal_func) { MonoConcurrentHashTable *res = g_new0 (MonoConcurrentHashTable, 1); res->hash_func = hash_func ? hash_func : g_direct_hash; - res->equal_func = key_equal_func ? key_equal_func : g_direct_equal; + res->equal_func = key_equal_func; // res->equal_func = g_direct_equal; res->table = conc_table_new (INITIAL_SIZE); res->element_count = 0; diff --git a/mono/utils/mono-context.h b/mono/utils/mono-context.h index 0d474ecf484..6e7cf7bd442 100644 --- a/mono/utils/mono-context.h +++ b/mono/utils/mono-context.h @@ -47,6 +47,13 @@ typedef struct __darwin_xmm_reg MonoContextSimdReg; #undef MONO_SIGNAL_USE_UCONTEXT_T #endif +#ifdef __HAIKU__ +/* sigcontext surrogate */ +struct sigcontext { + vregs regs; +}; +#endif + #ifdef HOST_WIN32 /* sigcontext surrogate */ struct sigcontext { @@ -74,14 +81,14 @@ struct sigcontext { # define SC_ESI sc_esi #elif defined(__HAIKU__) # define SC_EAX regs.eax -# define SC_EBX regs._reserved_2[2] +# define SC_EBX regs.ebx # define SC_ECX regs.ecx # define SC_EDX regs.edx # define SC_EBP regs.ebp # define SC_EIP regs.eip # define SC_ESP regs.esp -# define SC_EDI regs._reserved_2[0] -# define SC_ESI regs._reserved_2[1] +# define SC_EDI regs.edi +# define SC_ESI regs.esi #else # define SC_EAX eax # define SC_EBX ebx @@ -139,7 +146,8 @@ typedef struct { } \ } while (0) #else -#define MONO_CONTEXT_GET_CURRENT(ctx) \ + +#define MONO_CONTEXT_GET_CURRENT_GREGS(ctx) \ __asm__ __volatile__( \ "movl $0x0, %c[eax](%0)\n" \ "mov %%ebx, %c[ebx](%0)\n" \ @@ -162,6 +170,40 @@ typedef struct { [esi] MONO_CONTEXT_OFFSET (esi, 0, mgreg_t), \ [edi] MONO_CONTEXT_OFFSET (edi, 0, mgreg_t) \ : "memory") + +#ifdef UCONTEXT_REG_XMM +#define MONO_CONTEXT_GET_CURRENT_FREGS(ctx) \ + do { \ + __asm__ __volatile__ ( \ + "movups %%xmm0, %c[xmm0](%0)\n" \ + "movups %%xmm1, %c[xmm1](%0)\n" \ + "movups %%xmm2, %c[xmm2](%0)\n" \ + "movups %%xmm3, %c[xmm3](%0)\n" \ + "movups %%xmm4, %c[xmm4](%0)\n" \ + "movups %%xmm5, %c[xmm5](%0)\n" \ + "movups %%xmm6, %c[xmm6](%0)\n" \ + "movups %%xmm7, %c[xmm7](%0)\n" \ + : \ + : "a" (&(ctx)), \ + [xmm0] MONO_CONTEXT_OFFSET (fregs, X86_XMM0, MonoContextSimdReg), \ + [xmm1] MONO_CONTEXT_OFFSET (fregs, X86_XMM1, MonoContextSimdReg), \ + [xmm2] MONO_CONTEXT_OFFSET (fregs, X86_XMM2, MonoContextSimdReg), \ + [xmm3] MONO_CONTEXT_OFFSET (fregs, X86_XMM3, MonoContextSimdReg), \ + [xmm4] MONO_CONTEXT_OFFSET (fregs, X86_XMM4, MonoContextSimdReg), \ + [xmm5] MONO_CONTEXT_OFFSET (fregs, X86_XMM5, MonoContextSimdReg), \ + [xmm6] MONO_CONTEXT_OFFSET (fregs, X86_XMM6, MonoContextSimdReg), \ + [xmm7] MONO_CONTEXT_OFFSET (fregs, X86_XMM7, MonoContextSimdReg), \ + } while (0) +#else +#define MONO_CONTEXT_GET_CURRENT_FREGS(ctx) +#endif + +#define MONO_CONTEXT_GET_CURRENT(ctx) \ + do { \ + MONO_CONTEXT_GET_CURRENT_GREGS(ctx); \ + MONO_CONTEXT_GET_CURRENT_FREGS(ctx); \ + } while (0) + #endif #define MONO_ARCH_HAS_MONO_CONTEXT 1 diff --git a/mono/utils/mono-error.c b/mono/utils/mono-error.c index 55f84ffd8e8..2afe7fae2de 100644 --- a/mono/utils/mono-error.c +++ b/mono/utils/mono-error.c @@ -584,7 +584,7 @@ mono_error_prepare_exception (MonoError *oerror, MonoError *error_out) MonoString *assembly_name = NULL, *type_name = NULL, *method_name = NULL, *field_name = NULL, *msg = NULL; MonoDomain *domain = mono_domain_get (); - mono_error_init (error_out); + error_init (error_out); switch (error->error_code) { case MONO_ERROR_NONE: @@ -780,7 +780,7 @@ void mono_error_move (MonoError *dest, MonoError *src) { memcpy (dest, src, sizeof (MonoErrorInternal)); - mono_error_init (src); + error_init (src); } /** diff --git a/mono/utils/mono-error.h b/mono/utils/mono-error.h index fa9caa6759e..88f986c5094 100644 --- a/mono/utils/mono-error.h +++ b/mono/utils/mono-error.h @@ -57,6 +57,7 @@ typedef struct _MonoErrorBoxed MonoErrorBoxed; MONO_BEGIN_DECLS +MONO_RT_EXTERNAL_ONLY MONO_API void mono_error_init (MonoError *error); diff --git a/mono/utils/mono-lazy-init.h b/mono/utils/mono-lazy-init.h index 7deca1275f5..046ef46d6b1 100644 --- a/mono/utils/mono-lazy-init.h +++ b/mono/utils/mono-lazy-init.h @@ -52,7 +52,7 @@ enum { MONO_LAZY_INIT_STATUS_CLEANED, }; -static inline void +static inline gboolean mono_lazy_initialize (mono_lazy_init_t *lazy_init, void (*initialize) (void)) { gint32 status; @@ -62,7 +62,7 @@ mono_lazy_initialize (mono_lazy_init_t *lazy_init, void (*initialize) (void)) status = *lazy_init; if (status >= MONO_LAZY_INIT_STATUS_INITIALIZED) - return; + return status == MONO_LAZY_INIT_STATUS_INITIALIZED; if (status == MONO_LAZY_INIT_STATUS_INITIALIZING || InterlockedCompareExchange (lazy_init, MONO_LAZY_INIT_STATUS_INITIALIZING, MONO_LAZY_INIT_STATUS_NOT_INITIALIZED) != MONO_LAZY_INIT_STATUS_NOT_INITIALIZED @@ -70,12 +70,13 @@ mono_lazy_initialize (mono_lazy_init_t *lazy_init, void (*initialize) (void)) while (*lazy_init == MONO_LAZY_INIT_STATUS_INITIALIZING) mono_thread_info_yield (); g_assert (InterlockedRead (lazy_init) >= MONO_LAZY_INIT_STATUS_INITIALIZED); - return; + return status == MONO_LAZY_INIT_STATUS_INITIALIZED; } initialize (); mono_atomic_store_release (lazy_init, MONO_LAZY_INIT_STATUS_INITIALIZED); + return TRUE; } static inline void diff --git a/mono/utils/mono-proclib.c b/mono/utils/mono-proclib.c index 515104efaf6..5f6d145b6da 100644 --- a/mono/utils/mono-proclib.c +++ b/mono/utils/mono-proclib.c @@ -20,7 +20,9 @@ #endif #if defined(_POSIX_VERSION) +#ifdef HAVE_SYS_ERRNO_H #include <sys/errno.h> +#endif #include <sys/param.h> #include <errno.h> #ifdef HAVE_SYS_TYPES_H @@ -31,6 +33,9 @@ #endif #include <sys/resource.h> #endif +#if defined(__HAIKU__) +#include <os/kernel/OS.h> +#endif #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) #include <sys/proc.h> #if defined(__APPLE__) @@ -155,9 +160,20 @@ mono_process_list (int *size) *size = res; return buf; #elif defined(__HAIKU__) - /* FIXME: Add back the code from 9185fcc305e43428d0f40f3ee37c8a405d41c9ae */ - g_assert_not_reached (); - return NULL; + int32 cookie = 0; + int32 i = 0; + team_info ti; + system_info si; + + get_system_info(&si); + void **buf = g_calloc(si.used_teams, sizeof(void*)); + + while (get_next_team_info(&cookie, &ti) == B_OK && i < si.used_teams) { + buf[i++] = GINT_TO_POINTER (ti.team); + } + *size = i; + + return buf; #else const char *name; void **buf = NULL; diff --git a/mono/utils/mono-rand-windows.c b/mono/utils/mono-rand-windows.c index 97f57cee4ee..4ac99a84685 100644 --- a/mono/utils/mono-rand-windows.c +++ b/mono/utils/mono-rand-windows.c @@ -127,7 +127,7 @@ mono_rand_try_get_bytes (gpointer *handle, guchar *buffer, gint buffer_size, Mon { MONO_WIN32_CRYPT_PROVIDER_HANDLE provider; - mono_error_init (error); + error_init (error); g_assert (handle); provider = (MONO_WIN32_CRYPT_PROVIDER_HANDLE) *handle; diff --git a/mono/utils/mono-rand.c b/mono/utils/mono-rand.c index 884dc7f1600..a51253c1d86 100644 --- a/mono/utils/mono-rand.c +++ b/mono/utils/mono-rand.c @@ -51,7 +51,7 @@ get_entropy_from_egd (const char *path, guchar *buffer, int buffer_size, MonoErr guint offset = 0; int err = 0; - mono_error_init (error); + error_init (error); socket_fd = socket (PF_UNIX, SOCK_STREAM, 0); if (socket_fd < 0) { @@ -155,7 +155,7 @@ mono_rand_try_get_bytes (gpointer *handle, guchar *buffer, gint buffer_size, Mon { g_assert (handle); - mono_error_init (error); + error_init (error); if (use_egd) { const char *socket_path = g_getenv ("MONO_EGD_SOCKET"); @@ -224,7 +224,7 @@ mono_rand_try_get_bytes (gpointer *handle, guchar *buffer, gint buffer_size, Mon { gint count = 0; - mono_error_init (error); + error_init (error); do { if (buffer_size - count >= sizeof (gint32) && RAND_MAX >= 0xFFFFFFFF) { diff --git a/mono/utils/mono-threads-coop.c b/mono/utils/mono-threads-coop.c index 7f274853683..ed6b1807a3a 100644 --- a/mono/utils/mono-threads-coop.c +++ b/mono/utils/mono-threads-coop.c @@ -288,6 +288,12 @@ mono_threads_exit_gc_safe_region_unbalanced (gpointer cookie, gpointer *stackdat default: g_error ("Unknown thread state"); } + + if (info->async_target) { + info->async_target (info->user_data); + info->async_target = NULL; + info->user_data = NULL; + } } void @@ -355,6 +361,12 @@ mono_threads_enter_gc_unsafe_region_unbalanced_with_info (MonoThreadInfo *info, g_error ("Unknown thread state"); } + if (info->async_target) { + info->async_target (info->user_data); + info->async_target = NULL; + info->user_data = NULL; + } + return info; } diff --git a/mono/utils/mono-threads-haiku.c b/mono/utils/mono-threads-haiku.c new file mode 100644 index 00000000000..231ff3be8f4 --- /dev/null +++ b/mono/utils/mono-threads-haiku.c @@ -0,0 +1,25 @@ +#include <config.h> + +#if defined(__HAIKU__) + +#include <mono/utils/mono-threads.h> +#include <pthread.h> +#include <os/kernel/OS.h> + +void +mono_threads_platform_reset_priority(pthread_attr_t *attr) +{ + /* FIXME: Implement this on Haiku */ +} + +void +mono_threads_platform_get_stack_bounds (guint8 **staddr, size_t *stsize) +{ + thread_info ti; + get_thread_info(get_pthread_thread_id(pthread_self()), &ti); + + *staddr = ti.stack_base; + *stsize = ti.stack_end - ti.stack_base; +} + +#endif diff --git a/mono/utils/mono-threads-posix.c b/mono/utils/mono-threads-posix.c index dcb7e27d2a1..2b48be021d9 100644 --- a/mono/utils/mono-threads-posix.c +++ b/mono/utils/mono-threads-posix.c @@ -35,8 +35,9 @@ extern int tkill (pid_t tid, int signal); #include <sys/resource.h> -static void -reset_priority (pthread_attr_t *attr) +#ifdef MONO_THREADS_PLATFORM_HAS_ATTR_SETSCHED +void +mono_threads_platform_reset_priority (pthread_attr_t *attr) { struct sched_param param; gint res; @@ -82,6 +83,7 @@ reset_priority (pthread_attr_t *attr) if (res != 0) g_error ("%s: pthread_attr_setschedparam failed, error: \"%s\" (%d)", __func__, g_strerror (res), res); } +#endif int mono_threads_platform_create_thread (MonoThreadStart thread_fn, gpointer thread_data, gsize* const stack_size, MonoNativeThreadId *out_tid) @@ -121,7 +123,7 @@ mono_threads_platform_create_thread (MonoThreadStart thread_fn, gpointer thread_ g_assert (!res); #endif /* HAVE_PTHREAD_ATTR_SETSTACKSIZE */ - reset_priority (&attr); + mono_threads_platform_reset_priority (&attr); if (stack_size) { res = pthread_attr_getstacksize (&attr, &min_stack_size); diff --git a/mono/utils/mono-threads.c b/mono/utils/mono-threads.c index b0e98d43f28..76821d0d359 100644 --- a/mono/utils/mono-threads.c +++ b/mono/utils/mono-threads.c @@ -1005,8 +1005,12 @@ currently used only to deliver exceptions. void mono_thread_info_setup_async_call (MonoThreadInfo *info, void (*target_func)(void*), void *user_data) { - /* An async call can only be setup on an async suspended thread */ - g_assert (mono_thread_info_run_state (info) == STATE_ASYNC_SUSPENDED); + if (!mono_threads_is_coop_enabled ()) { + /* In non-coop mode, an async call can only be setup on an async suspended thread, but in coop mode, a thread + * may be in blocking state, and will execute the async call when leaving the safepoint, leaving a gc safe + * region or entering a gc unsafe region */ + g_assert (mono_thread_info_run_state (info) == STATE_ASYNC_SUSPENDED); + } /*FIXME this is a bad assert, we probably should do proper locking and fail if one is already set*/ g_assert (!info->async_target); info->async_target = target_func; diff --git a/mono/utils/mono-threads.h b/mono/utils/mono-threads.h index 0e77e395663..344fbdec3c8 100644 --- a/mono/utils/mono-threads.h +++ b/mono/utils/mono-threads.h @@ -62,6 +62,10 @@ typedef gsize mono_thread_start_return_t; typedef gsize (*MonoThreadStart)(gpointer); +#if !defined(__HAIKU__) +#define MONO_THREADS_PLATFORM_HAS_ATTR_SETSCHED +#endif /* !defined(__HAIKU__) */ + #endif /* #ifdef HOST_WIN32 */ #ifndef MONO_INFINITE_WAIT @@ -478,6 +482,9 @@ gint mono_threads_suspend_get_suspend_signal (void); gint mono_threads_suspend_get_restart_signal (void); gint mono_threads_suspend_get_abort_signal (void); +#if defined(USE_POSIX_BACKEND) +void mono_threads_platform_reset_priority (pthread_attr_t *attr); +#endif /* defined(USE_POSIX_BACKEND) */ int mono_threads_platform_create_thread (MonoThreadStart thread_fn, gpointer thread_data, gsize* const stack_size, MonoNativeThreadId *out_tid); void mono_threads_platform_get_stack_bounds (guint8 **staddr, size_t *stsize); void mono_threads_platform_init (void); diff --git a/mono/utils/monobitset.c b/mono/utils/monobitset.c index b86ab331dbf..2f6b6c50103 100644 --- a/mono/utils/monobitset.c +++ b/mono/utils/monobitset.c @@ -211,10 +211,10 @@ mono_bitset_count (const MonoBitSet *set) { for (i = 0; i < set->size / BITS_PER_CHUNK; ++i) { d = set->data [i]; #ifdef __GNUC__ - if (sizeof (gsize) == sizeof (unsigned long)) - count += __builtin_popcountl (d); - else + if (sizeof (gsize) == sizeof (unsigned int)) count += __builtin_popcount (d); + else + count += __builtin_popcountll (d); #else while (d) { count ++; diff --git a/msvc/scripts/order.xml b/msvc/scripts/order.xml index 625cd5c8e9f..dda2aafb936 100644 --- a/msvc/scripts/order.xml +++ b/msvc/scripts/order.xml @@ -68,7 +68,7 @@ </project> <project dir="class/System.Numerics" library="System.Numerics-basic"> <boot>true</boot> - <flags>/codepage:65001 /nologo /noconfig -d:NET_4_0 -d:NET_4_5 -d:MONO -d:WIN_PLATFORM -d:BOOTSTRAP_BASIC -nowarn:1699 -nostdlib -r:./../../class/lib/basic/mscorlib.dll -optimize /unsafe -nowarn:414 -nowarn:436 -r:./../../class/lib/basic/System.dll</flags> + <flags>/codepage:65001 /nologo /noconfig -d:NET_4_0 -d:NET_4_5 -d:MONO -d:WIN_PLATFORM -d:BOOTSTRAP_BASIC -nowarn:1699 -nostdlib -r:./../../class/lib/basic/mscorlib.dll -optimize /unsafe -r:./../../class/lib/basic/System.dll</flags> <output>System.Numerics.dll</output> <built_sources></built_sources> <library_output>./../../class/lib/basic/System.Numerics.dll</library_output> @@ -574,7 +574,7 @@ </project> <project dir="class/System.Numerics" library="System.Numerics-build"> <boot>false</boot> - <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/build/mscorlib.dll -optimize /unsafe -nowarn:414 -nowarn:436 -r:./../../class/lib/build/System.dll</flags> + <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/build/mscorlib.dll -optimize /unsafe -r:./../../class/lib/build/System.dll</flags> <output>System.Numerics.dll</output> <built_sources></built_sources> <library_output>./../../class/lib/build/System.Numerics.dll</library_output> @@ -1443,7 +1443,7 @@ </project> <project dir="class/System.Numerics" library="System.Numerics-net_4_x"> <boot>false</boot> - <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize /unsafe -nowarn:414 -nowarn:436 -r:./../../class/lib/net_4_x/System.dll</flags> + <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize /unsafe -r:./../../class/lib/net_4_x/System.dll</flags> <output>System.Numerics.dll</output> <built_sources></built_sources> <library_output>./../../class/lib/net_4_x/System.Numerics.dll</library_output> @@ -1454,7 +1454,7 @@ </project> <project dir="class/System.Numerics" library="System.Numerics-tests-net_4_x"> <boot>false</boot> - <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize -r:./../../class/lib/net_4_x/System.Numerics.dll /unsafe -nowarn:414 -nowarn:436 -r:./../../class/lib/net_4_x/System.dll</flags> + <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize -r:./../../class/lib/net_4_x/System.Numerics.dll /unsafe -r:./../../class/lib/net_4_x/System.dll</flags> <output>net_4_x_System.Numerics_test.dll</output> <built_sources></built_sources> <library_output>net_4_x_System.Numerics_test.dll</library_output> @@ -2345,7 +2345,7 @@ </project> <project dir="class/Microsoft.CSharp" library="Microsoft.CSharp-net_4_x"> <boot>false</boot> - <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize -r:./../../class/lib/net_4_x/System.Core.dll -r:./../../class/lib/net_4_x/Mono.CSharp.dll</flags> + <flags>/codepage:65001 /nologo /noconfig /deterministic -d:NET_4_0 -d:NET_4_5 -d:NET_4_6 -d:MONO -d:WIN_PLATFORM -nowarn:1699 -nostdlib -r:./../../class/lib/net_4_x/mscorlib.dll /debug:portable -optimize -r:./../../class/lib/net_4_x/System.Core.dll -r:./../../class/lib/net_4_x/System.dll</flags> <output>Microsoft.CSharp.dll</output> <built_sources></built_sources> <library_output>./../../class/lib/net_4_x/Microsoft.CSharp.dll</library_output> diff --git a/po/mcs/.gitattributes b/po/mcs/.gitattributes new file mode 100644 index 00000000000..813b603f82e --- /dev/null +++ b/po/mcs/.gitattributes @@ -0,0 +1 @@ +LINGUAS eol=lf diff --git a/po/mcs/LINGUAS b/po/mcs/LINGUAS index 5751de4be9b..2f03aa0e2ec 100644 --- a/po/mcs/LINGUAS +++ b/po/mcs/LINGUAS @@ -1,4 +1 @@ -es -ja -de -pt_BR
\ No newline at end of file +es ja de pt_BR
\ No newline at end of file diff --git a/runtime/.gitattributes b/runtime/.gitattributes new file mode 100644 index 00000000000..943f7e1dbfb --- /dev/null +++ b/runtime/.gitattributes @@ -0,0 +1,3 @@ +monodis-wrapper.in crlf=input +mono-wrapper.in crlf=input + diff --git a/scripts/.gitattributes b/scripts/.gitattributes index 30238150d93..2166c5ce95c 100644 --- a/scripts/.gitattributes +++ b/scripts/.gitattributes @@ -6,3 +6,17 @@ monodocs2slashdoc crlf=input mono-heapviz crlf=input mono-package-runtime crlf=input mono-test-install crlf=input +csc.in crlf=input +dmcs.in crlf=input +gmcs.in crlf=input +mcs.in crlf=input +mod.in crlf=input +mono-configuration-crypto.in crlf=input +mono-find-provides.in crlf=input +mono-find-requires.in crlf=input +mono-service.in crlf=input +mono-symbolicate.in crlf=input +peverify.in crlf=input +script.in crlf=input +script_umask.in crlf=input +xbuild.in crlf=input diff --git a/support/serial.c b/support/serial.c index ec02e48b5e8..5e3d732c005 100644 --- a/support/serial.c +++ b/support/serial.c @@ -175,6 +175,11 @@ discard_buffer (int fd, gboolean input) gint32 get_bytes_in_buffer (int fd, gboolean input) { +#if defined(__HAIKU__) + /* FIXME: Haiku doesn't support TIOCOUTQ nor FIONREAD on fds */ + return -1; +#define TIOCOUTQ 0 +#endif gint32 retval; if (ioctl (fd, input ? FIONREAD : TIOCOUTQ, &retval) == -1) { diff --git a/support/sys-mman.c b/support/sys-mman.c index 1dd61bc372b..afbe4662444 100644 --- a/support/sys-mman.c +++ b/support/sys-mman.c @@ -88,17 +88,25 @@ Mono_Posix_Syscall_msync (void *start, mph_size_t len, int flags) int Mono_Posix_Syscall_mlock (void *start, mph_size_t len) { +#if !defined(HAVE_MINCORE) + return ENOSYS; +#else mph_return_if_size_t_overflow (len); return mlock (start, (size_t) len); +#endif } int Mono_Posix_Syscall_munlock (void *start, mph_size_t len) { +#if defined(__HAIKU__) + return ENOSYS; +#else mph_return_if_size_t_overflow (len); return munlock (start, (size_t) len); +#endif } #ifdef HAVE_MREMAP @@ -129,9 +137,13 @@ Mono_Posix_Syscall_mremap (void *old_address, mph_size_t old_size, int Mono_Posix_Syscall_mincore (void *start, mph_size_t length, unsigned char *vec) { +#if defined(__HAIKU__) + return ENOSYS; +#else mph_return_if_size_t_overflow (length); return mincore (start, (size_t) length, (void*)vec); +#endif } #ifdef HAVE_POSIX_MADVISE diff --git a/support/sys-time.c b/support/sys-time.c index a1c0ba0b184..83afa0c8466 100644 --- a/support/sys-time.c +++ b/support/sys-time.c @@ -47,6 +47,11 @@ Mono_Posix_Syscall_settimeofday ( struct Mono_Posix_Timeval *tv, struct Mono_Posix_Timezone *tz) { +#if defined(__HAIKU__) + /* FIXME: Haiku doesn't support this either, consider + using set_real_time_clock instead? */ + return -1; +#else struct timeval _tv = {0}; struct timeval *ptv = NULL; struct timezone _tz = {0}; @@ -67,6 +72,7 @@ Mono_Posix_Syscall_settimeofday ( r = settimeofday (ptv, ptz); return r; +#endif } static inline struct timeval* |