Changed TryPeek to handle race condition with Dequeue.
# ensure LF endings on all checkouts
-configure.in crlf=input
+configure.ac crlf=input
# ensure native line endings on checkout
*.c crlf
ACLOCAL_AMFLAGS = -I m4
+AM_CFLAGS = $(WERROR_CFLAGS)
+
MONOTOUCH_SUBDIRS = $(libgc_dir) eglib/src mono
if CROSS_COMPILING
test -d $(distdir)/mcs || mkdir $(distdir)/mcs
d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive
rm -rf `find $(top_distdir)/external -path '*\.git' -and -type d`
+ cp mcs/class/lib/basic/System.Configuration.dll mcs/class/lib/monolite/
+ cp mcs/class/lib/basic/System.Security.dll mcs/class/lib/monolite/
# Disable this for now because it is very slow and causes wrench to timeout:
# test ! -d $(GIT_DIR) || ./scripts/commits-to-changelog.py --root=$(distdir) last-commit-with-compulsory-changelog-entry
done
echo "</root>" >> msvc/scripts/order.xml
-# Update llvm version in configure.in to the output of $LLVM_DIR/bin/llvm-config --version
+# Update llvm version in configure.ac to the output of $LLVM_DIR/bin/llvm-config --version
update-llvm-version:
if test "x$$LLVM_DIR" = "x"; then echo "Set the make variable LLVM_DIR to the directory containing the LLVM installation."; exit 1; fi
- REV=`$(LLVM_DIR)/bin/llvm-config --version` && sed -e "s,expected_llvm_version=.*,expected_llvm_version=\"$$REV\"," < configure.in > tmp && mv tmp configure.in && echo "Version set to $$REV."
+ REV=`$(LLVM_DIR)/bin/llvm-config --version` && sed -e "s,expected_llvm_version=.*,expected_llvm_version=\"$$REV\"," < configure.ac > tmp && mv tmp configure.ac && echo "Version set to $$REV."
* libzlib - This library and the development headers are required for compression
file support in the 2.0 profile.
+ 4. Mono is required to build Mono. Use a system package or monolite (explained further below)
+
+ 5. If you have a system Mono (not monolite), you will need to read this: http://mono-project.com/Parallel_Mono_Environments#Setting_up_a_Build_Environment
+
b. Building the Software
------------------------
dolt_supported=no
fi
case $host in
-i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
+i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
pic_options='-fPIC'
;;
tagok=false
for arg in "$[]@"; do
case "$arg" in
- --silent) ;;
+ --silent) ;;
--mode=compile) modeok=true ;;
--tag=CC|--tag=CXX) tagok=true ;;
--quiet) ;;
fi
fi
-(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
+(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && {
($LIBTOOL --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`libtool' installed to compile Mono."
}
}
-grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
- grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && {
+ grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \
(gettext --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`gettext' installed to compile Mono."
esac
-if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
+if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then
if test -z "$NO_LIBTOOLIZE" ; then
echo "Running libtoolize..."
${LIBTOOL}ize --force --copy
exit 1
}
-if grep "^AC_CONFIG_HEADERS" configure.in >/dev/null; then
+if grep "^AC_CONFIG_HEADERS" configure.ac >/dev/null; then
echo "Running autoheader..."
autoheader || { echo "**Error**: autoheader failed."; exit 1; }
fi
CROSS_DLL_DIR="$CROSS_DIR/bin"
PATH=$CROSS_BIN_DIR:$PATH
- MONO_VERSION=`grep AC_INIT configure.in | cut -d ',' -f 2|tr -d '\[ \]'`
+ MONO_VERSION=`grep AC_INIT configure.ac | cut -d ',' -f 2|tr -d '\[ \]'`
if [ -d ./.git ]; then
MONO_GIT_COMMIT="`git log -1 --format=format:%t`"
--- /dev/null
+# Process this file with autoconf to produce a configure script.
+#AC_PREREQ([2.62])
+
+AC_INIT(mono, [3.6.1],
+ [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
+
+AC_CONFIG_SRCDIR([README.md])
+AC_CONFIG_MACRO_DIR([m4])
+AC_CANONICAL_SYSTEM
+AC_CANONICAL_HOST
+
+# Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
+# The extra brackets are to foil regex-based scans.
+m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
+
+AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects])
+AC_CONFIG_HEADERS([config.h])
+AM_MAINTAINER_MODE
+
+API_VER=2.0
+AC_SUBST(API_VER)
+
+AC_PROG_LN_S
+
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+case $host_os in
+*cygwin* )
+ echo "Run configure using ./configure --host=i686-pc-mingw32"
+ exit 1
+esac
+
+# In case of cygwin, override LN_S, irrespective of what it determines.
+# The build uses cygwin, but the actual runtime doesn't.
+case $host_os in
+*cygwin* ) LN_S='cp -p';;
+esac
+
+dnl
+dnl libgc checks
+dnl
+
+gc_headers=no
+gc=included
+gc_msg="included Boehm"
+use_included_gc=no
+libgc_configure_args=
+
+if test -d $srcdir/libgc ; then
+ gc_default=included
+else
+ gc_default=boehm
+fi
+
+# These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
+# libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
+CPPFLAGS_FOR_LIBGC=$CPPFLAGS
+CFLAGS_FOR_LIBGC=$CFLAGS
+CPPFLAGS_FOR_EGLIB=$CPPFLAGS
+CFLAGS_FOR_EGLIB=$CFLAGS
+
+# libgc uses some deprecated APIs
+CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
+
+#
+# These are the flags that need to be stored in the mono.pc file for
+# compiling code that will embed Mono
+#
+libmono_cflags=""
+libmono_ldflags=""
+AC_SUBST(libmono_cflags)
+AC_SUBST(libmono_ldflags)
+
+# Variable to have relocatable .pc files (lib, or lib64)
+reloc_libdir=`basename ${libdir}`
+AC_SUBST(reloc_libdir)
+
+dnl if linker handles the version script
+no_version_script=no
+
+# Set to yes if Unix sockets cannot be created in an anonymous namespace
+need_link_unlink=no
+
+#Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
+extra_runtime_ldflags=""
+
+# Thread configuration inspired by sleepycat's db
+AC_MSG_CHECKING([host platform characteristics])
+libgc_threads=no
+has_dtrace=no
+parallel_mark=yes
+ikvm_native=yes
+
+case "$host" in
+ powerpc*-*-linux*)
+ # https://bugzilla.novell.com/show_bug.cgi?id=504411
+ disable_munmap=yes
+ ;;
+esac
+
+host_win32=no
+target_win32=no
+platform_android=no
+platform_darwin=no
+case "$host" in
+ *-mingw*|*-*-cygwin*)
+ AC_DEFINE(HOST_WIN32,1,[Host Platform is Win32])
+ AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
+ AC_DEFINE(PLATFORM_NO_SYMLINKS,1,[This platform does not support symlinks])
+ host_win32=yes
+ mono_cv_clang=no
+ if test "x$cross_compiling" = "xno"; then
+ target_win32=yes
+ if test "x$host" == "x$build" -a "x$host" == "x$target"; then
+ AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32])
+ fi
+ else
+ target_win32=yes
+ AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32/MinGW])
+ AC_DEFINE(MINGW_CROSS_COMPILE,1,[Cross-compiling using MinGW])
+ fi
+ HOST_CC="gcc"
+ # Windows 2000 is required that includes Internet Explorer 5.01
+ CPPFLAGS="$CPPFLAGS -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
+ LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32"
+ libmono_cflags="-mms-bitfields -mwindows"
+ libmono_ldflags="-mms-bitfields -mwindows"
+ libdl=
+ libgc_threads=win32
+ gc_default=included
+ with_sigaltstack=no
+ LN_S=cp
+ # This forces libgc to use the DllMain based thread registration code on win32
+ libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
+ ;;
+ *-*-*netbsd*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
+ libmono_cflags="-D_REENTRANT"
+ LDFLAGS="$LDFLAGS -pthread"
+ CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
+ libmono_ldflags="-pthread"
+ need_link_unlink=yes
+ libdl="-ldl"
+ libgc_threads=pthreads
+ with_sigaltstack=no
+ use_sigposix=yes
+ ;;
+ *-*-*freebsd*)
+ host_win32=no
+ if test "x$PTHREAD_CFLAGS" = "x"; then
+ CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
+ libmono_cflags=
+ else
+ CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
+ libmono_cflags="$PTHREAD_CFLAGS"
+ fi
+ if test "x$PTHREAD_LIBS" = "x"; then
+ LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
+ libmono_ldflags="-pthread"
+ else
+ LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
+ libmono_ldflags="$PTHREAD_LIBS"
+ fi
+ CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
+ need_link_unlink=yes
+ AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
+ libdl=
+ libgc_threads=pthreads
+ use_sigposix=yes
+ has_dtrace=yes
+ ;;
+ *-*-*openbsd*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DPLATFORM_BSD -D_REENTRANT -DUSE_MMAP"
+ if test "x$disable_munmap" != "xyes"; then
+ CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
+ fi
+ libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
+ LDFLAGS="$LDFLAGS -pthread"
+ need_link_unlink=yes
+ AC_DEFINE(PTHREAD_POINTER_ID)
+ libdl=
+ gc_default=boehm
+ libgc_threads=pthreads
+ with_sigaltstack=no
+ use_sigposix=yes
+ ;;
+ *-*-linux-android*)
+ host_win32=no
+ platform_android=yes
+ AC_DEFINE(PLATFORM_ANDROID,1,[Targeting the Android platform])
+ AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
+
+ CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
+ if test "x$disable_munmap" != "xyes"; then
+ CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
+ fi
+ libmono_cflags="-D_REENTRANT"
+ libdl="-ldl"
+ libgc_threads=pthreads
+ use_sigposix=yes
+
+ with_tls=pthread
+ with_sigaltstack=no
+ with_static_mono=no
+
+ # Android doesn't support boehm, as it's missing <link.h>
+ support_boehm=no
+ with_gc=sgen
+
+ # isinf(3) requires -lm; see isinf check below
+ LDFLAGS="$LDFLAGS -lm"
+
+ # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
+ # PAGE_SIZE; breaks mono/io-layer/collection.c
+ # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
+ CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
+ CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
+
+ # The configure check can't detect this
+ AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
+
+ # to bypass the underscore linker check, can't work when cross-compiling
+ mono_cv_uscore=yes
+ mono_cv_clang=no
+ ;;
+ *-*-linux*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
+ if test "x$disable_munmap" != "xyes"; then
+ CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
+ fi
+ libmono_cflags="-D_REENTRANT"
+ libdl="-ldl"
+ libgc_threads=pthreads
+ use_sigposix=yes
+ if test "x$cross_compiling" != "xno"; then
+ # to bypass the underscore linker check, not
+ # available during cross-compilation
+ mono_cv_uscore=no
+ fi
+ case "$host" in
+ aarch64-*)
+ support_boehm=no
+ with_gc=sgen
+ ;;
+ esac
+ ;;
+ *-*-nacl*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
+ if test "x$disable_munmap" != "xyes"; then
+ CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
+ fi
+ libmono_cflags="-D_REENTRANT"
+ libdl=
+ libgc_threads=pthreads
+ gc_default=boehm
+ use_sigposix=yes
+ ikvm_native=no
+ AC_DEFINE(DISABLE_SOCKETS,1,[Disable sockets support])
+ AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
+ ;;
+ *-*-hpux*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
+ # +ESdbgasm only valid on bundled cc on RISC
+ # silently ignored for ia64
+ if test $GCC != "yes"; then
+ CFLAGS="$CFLAGS +ESdbgasm"
+ # Arrange for run-time dereferencing of null
+ # pointers to produce a SIGSEGV signal.
+ LDFLAGS="$LDFLAGS -z"
+ fi
+ CFLAGS="$CFLAGS +ESdbgasm"
+ LDFLAGS="$LDFLAGS -z"
+ libmono_cflags="-D_REENTRANT"
+ libmono_ldflags="-lpthread"
+ libgc_threads=pthreads
+ need_link_unlink=yes
+ use_sigposix=yes
+ ;;
+ *-*-solaris*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DPLATFORM_SOLARIS"
+ need_link_unlink=yes
+ libmono_cflags="-D_REENTRANT"
+ libgc_threads=pthreads
+ # This doesn't seem to work on solaris/x86, but the configure test runs
+ with_tls=pthread
+ has_dtrace=yes
+ use_sigposix=yes
+ enable_solaris_tar_check=yes
+ ;;
+ *-*-darwin*)
+ parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
+ host_win32=no
+ platform_darwin=yes
+ target_mach=yes
+ CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS -DPLATFORM_MACOSX -DUSE_MMAP -DUSE_MUNMAP"
+ CPPFLAGS="$CPPFLAGS -DGetCurrentProcess=MonoGetCurrentProcess -DGetCurrentThread=MonoGetCurrentThread -DCreateEvent=MonoCreateEvent"
+ libmono_cflags="-D_THREAD_SAFE"
+ need_link_unlink=yes
+ AC_DEFINE(PTHREAD_POINTER_ID)
+ AC_DEFINE(USE_MACH_SEMA, 1, [...])
+ no_version_script=yes
+ libdl=
+ libgc_threads=pthreads
+ has_dtrace=yes
+ if test "x$cross_compiling" = "xyes"; then
+ has_broken_apple_cpp=yes
+ fi
+ dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
+ dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
+ dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
+ case "$host" in
+ dnl Snow Leopard and newer config.guess reports as this
+ i*86-*-darwin*)
+ BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
+ BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
+ CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
+ CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
+ CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
+ CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
+ CPPFLAGS_FOR_EGLIB="$CPPFLAGS_FOR_EGLIB $BROKEN_DARWIN_CPPFLAGS"
+ CFLAGS_FOR_EGLIB="$CFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS"
+ ;;
+ x*64-*-darwin*)
+ ;;
+ arm*-darwin*)
+ has_dtrace=no
+ ;;
+ esac
+ ;;
+ *-*-haiku*)
+ host_win32=no
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
+ libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
+ libdl=
+ LIBS="$LIBS -lnetwork"
+ need_link_unlink=yes
+ AC_DEFINE(PTHREAD_POINTER_ID)
+ libgc_threads=pthreads
+ use_sigposix=yes
+ ;;
+ *)
+ AC_MSG_WARN([*** Please add $host to configure.ac checks!])
+ host_win32=no
+ libdl="-ldl"
+ ;;
+esac
+AC_MSG_RESULT(ok)
+
+if test x$need_link_unlink = xyes; then
+ AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
+fi
+
+AC_SUBST(extra_runtime_ldflags)
+AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
+AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
+AM_CONDITIONAL(PLATFORM_LINUX, echo x$target_os | grep -q linux)
+AM_CONDITIONAL(PLATFORM_DARWIN, test x$platform_darwin = xyes)
+AM_CONDITIONAL(PLATFORM_SIGPOSIX, test x$use_sigposix = xyes)
+AM_CONDITIONAL(PLATFORM_ANDROID, test x$platform_android = xyes)
+
+AC_CHECK_TOOL(CC, gcc, gcc)
+AC_PROG_CC
+AC_CHECK_TOOL(CXX, g++, g++)
+AC_PROG_CXX
+AM_PROG_AS
+AC_PROG_INSTALL
+AC_PROG_AWK
+AM_PROG_CC_C_O
+dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
+: ${CCAS='$(CC)'}
+# Set ASFLAGS if not already set.
+: ${CCASFLAGS='$(CFLAGS)'}
+AC_SUBST(CCAS)
+AC_SUBST(CCASFLAGS)
+
+# AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
+# GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
+if test "x$CXX" = "xg++"; then
+ if test "x$GXX" != "xyes"; then
+ # automake/libtool is so broken, it requires g++ even if the c++ sources
+ # are inside automake conditionals
+ AC_MSG_ERROR([You need to install g++])
+ fi
+fi
+
+dnl may require a specific autoconf version
+dnl AC_PROG_CC_FOR_BUILD
+dnl CC_FOR_BUILD not automatically detected
+CC_FOR_BUILD=$CC
+CFLAGS_FOR_BUILD=$CFLAGS
+BUILD_EXEEXT=
+if test "x$cross_compiling" = "xyes"; then
+ CC_FOR_BUILD=cc
+ CFLAGS_FOR_BUILD=
+ BUILD_EXEEXT=""
+fi
+AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(HOST_CC)
+AC_SUBST(BUILD_EXEEXT)
+
+AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
+AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
+
+# Set STDC_HEADERS
+AC_HEADER_STDC
+AC_LIBTOOL_WIN32_DLL
+# This causes monodis to not link correctly
+#AC_DISABLE_FAST_INSTALL
+AM_PROG_LIBTOOL
+# Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
+DOLT
+
+export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+AC_SUBST(export_ldflags)
+
+# Test whenever ld supports -version-script
+AC_PROG_LD
+AC_PROG_LD_GNU
+if test "x$lt_cv_prog_gnu_ld" = "xno"; then
+ no_version_script=yes
+fi
+
+AM_ICONV()
+
+AM_CONDITIONAL(NO_VERSION_SCRIPT, test x$no_version_script = xyes)
+
+AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h libproc.h)
+AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h)
+AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
+ [], [], [#include <stddef.h>
+ #include <sys/socket.h>
+ #include <linux/socket.h>])
+
+AC_CHECK_HEADERS(sys/user.h, [], [],
+[
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+])
+
+AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
+if test x$have_zlib = xyes; then
+ AC_TRY_COMPILE([#include <zlib.h>], [
+ #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
+ return 0;
+ #else
+ #error No good zlib found
+ #endif
+ ],[
+ AC_MSG_RESULT(Using system zlib)
+ zlib_msg="system zlib"
+ AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
+ ],[
+ AC_MSG_RESULT(Using embedded zlib)
+ have_zlib=no
+ zlib_msg="bundled zlib"
+ ])
+fi
+
+AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
+AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
+
+# for mono/metadata/debug-symfile.c
+AC_CHECK_HEADERS(elf.h)
+
+# for support
+AC_CHECK_HEADERS(poll.h)
+AC_CHECK_HEADERS(sys/poll.h)
+AC_CHECK_HEADERS(sys/wait.h)
+AC_CHECK_HEADERS(grp.h)
+AC_CHECK_HEADERS(syslog.h)
+
+# for mono/dis
+AC_CHECK_HEADERS(wchar.h)
+AC_CHECK_HEADERS(ieeefp.h)
+AC_MSG_CHECKING(for isinf)
+AC_TRY_LINK([#include <math.h>], [
+ int f = isinf (1.0);
+], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_ISINF, 1, [isinf available])
+], [
+ # We'll have to use signals
+ AC_MSG_RESULT(no)
+])
+# mingw
+AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
+ AC_TRY_LINK([#include <math.h>],
+ [ _finite(0.0); ],
+ AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no)))
+
+# for Linux statfs support
+AC_CHECK_HEADERS(linux/magic.h)
+
+# not 64 bit clean in cross-compile
+AC_CHECK_SIZEOF(void *, 4)
+
+AC_CACHE_CHECK([for clang],
+ mono_cv_clang,[
+ AC_TRY_COMPILE([], [
+ #ifdef __clang__
+ #else
+ #error "FAILED"
+ #endif
+ return 0;
+ ],
+ [mono_cv_clang=yes],
+ [mono_cv_clang=no],
+ [])
+])
+
+WARN=''
+if test x"$GCC" = xyes; then
+ WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value'
+ # The runtime code does not respect ANSI C strict aliasing rules
+ CFLAGS="$CFLAGS -fno-strict-aliasing"
+
+ # We rely on signed overflow to behave
+ CFLAGS="$CFLAGS -fwrapv"
+
+ ORIG_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+ AC_MSG_CHECKING(for -Wdeclaration-after-statement option to gcc)
+ AC_TRY_COMPILE([],[
+ return 0;
+ ], [
+ AC_MSG_RESULT(yes)
+ ], [
+ AC_MSG_RESULT(no)
+ CFLAGS=$ORIG_CFLAGS
+ ])
+
+ ORIG_CFLAGS=$CFLAGS
+ # Check for the normal version, since gcc ignores unknown -Wno options
+ CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
+ AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
+ AC_TRY_COMPILE([],[
+ return 0;
+ ], [
+ AC_MSG_RESULT(yes)
+ CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
+ ], [
+ AC_MSG_RESULT(no)
+ CFLAGS=$ORIG_CFLAGS
+ ])
+
+ if test "x$mono_cv_clang" = "xyes"; then
+ # https://bugzilla.samba.org/show_bug.cgi?id=8118
+ WARN="$WARN -Qunused-arguments"
+ WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign"
+ fi
+else
+ # The Sun Forte compiler complains about inline functions that access static variables
+ # so disable all inlining.
+ case "$host" in
+ *-*-solaris*)
+ CFLAGS="$CFLAGS -Dinline="
+ ;;
+ esac
+fi
+CFLAGS="$CFLAGS -g $WARN"
+CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
+
+# Where's the 'mcs' source tree?
+if test -d $srcdir/mcs; then
+ mcsdir=mcs
+else
+ mcsdir=../mcs
+fi
+
+AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
+ if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
+ mcsdir=$with_mcs_path
+ fi
+)
+
+AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
+
+#
+# A sanity check to catch cases where the package was unpacked
+# with an ancient tar program (Solaris)
+#
+AC_ARG_ENABLE(solaris-tar-check,
+[ --disable-solaris-tar-check disable solaris tar check],
+ do_solaris_tar_check=no, do_solaris_tar_check=yes)
+
+if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
+ AC_MSG_CHECKING(integrity of package)
+ if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
+ then
+ AC_MSG_RESULT(ok)
+ else
+ errorm="Your mono distribution is incomplete; if unpacking from a tar file, make sure you use GNU tar; see http://www.mono-project.com/IncompletePackage for more details"
+ AC_MSG_ERROR([$errorm])
+ fi
+fi
+
+if test "x$with_mcs_path" != "x"; then
+mcs_topdir=$(cd "$mcsdir" && pwd)
+mcs_topdir_from_srcdir=$mcs_topdir
+else
+mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
+mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
+fi
+
+# Convert mcs_topdir* paths to Windows syntax.
+if test x$cross_compiling$host_win32 = xnoyes; then
+ mcs_topdir=$(cygpath -m $mcs_topdir)
+ case $mcs_topdir_from_srcdir in
+ /cygdrive/*)
+ mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
+ ;;
+ esac
+fi
+
+AC_SUBST([mcs_topdir])
+AC_SUBST([mcs_topdir_from_srcdir])
+
+# Where's the 'olive' source tree?
+if test -d $srcdir/olive; then
+ olivedir=olive
+else
+ olivedir=../olive
+fi
+
+if test -d $srcdir/$olivedir; then
+olive_topdir='$(top_srcdir)/'$olivedir
+fi
+
+# gettext: prepare the translation directories.
+# we do not configure the full gettext, as we consume it dynamically from C#
+AM_PO_SUBDIRS
+
+if test "x$USE_NLS" = "xyes"; then
+ AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
+
+ if test "x$HAVE_MSGFMT" = "xno"; then
+ AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
+ fi
+fi
+
+AC_ARG_WITH([libgdiplus],
+ [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
+ [], [with_libgdiplus=installed])
+
+case $with_libgdiplus in
+no|installed) libgdiplus_loc= ;;
+yes|sibling) libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la ;;
+/*) libgdiplus_loc=$with_libgdiplus ;;
+*) libgdiplus_loc=`pwd`/$with_libgdiplus ;;
+esac
+AC_SUBST([libgdiplus_loc])
+
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+pkg_config_path=
+AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
+ if test x$with_crosspkgdir = "x"; then
+ if test -s $PKG_CONFIG_PATH; then
+ pkg_config_path=$PKG_CONFIG_PATH
+ fi
+ else
+ pkg_config_path=$with_crosspkgdir
+ PKG_CONFIG_PATH=$pkg_config_path
+ export PKG_CONFIG_PATH
+ fi
+)
+
+AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
+if test x$werror_flag = xyes; then
+ WERROR_CFLAGS="-Werror"
+fi
+AC_SUBST([WERROR_CFLAGS])
+
+ac_configure_args="$ac_configure_args \"CPPFLAGS_FOR_EGLIB=$EGLIB_CPPFLAGS\" \"CFLAGS_FOR_EGLIB=$CFLAGS_FOR_EGLIB\""
+AC_CONFIG_SUBDIRS(eglib)
+
+GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
+GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
+BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
+BUILD_GLIB_LIBS="$GLIB_LIBS"
+GMODULE_CFLAGS="$GLIB_CFLAGS"
+GMODULE_LIBS="$GLIB_LIBS"
+
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GMODULE_CFLAGS)
+AC_SUBST(GMODULE_LIBS)
+AC_SUBST(BUILD_GLIB_CFLAGS)
+AC_SUBST(BUILD_GLIB_LIBS)
+
+AC_ARG_WITH(gc, [ --with-gc=boehm,included,none Controls the Boehm GC config, default=included],[gc=$with_gc],[gc=$gc_default])
+
+# Enable support for fast thread-local storage
+# Some systems have broken support, so we allow to disable it.
+AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
+
+# Enable support for using sigaltstack for SIGSEGV and stack overflow handling
+# This does not work on some platforms (bug #55253)
+AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
+
+AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
+AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
+# Same as --with-shared_mono=no
+AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
+
+if test "x$enable_static" = "xno"; then
+ with_static_mono=no
+fi
+
+if test "x$enable_shared" = "xno"; then
+ with_shared_mono=no
+fi
+
+if test "x$enable_libraries" = "xno"; then
+ with_shared_mono=no
+fi
+
+AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
+
+case $host in
+*nacl* ) with_shared_mono=yes;;
+esac
+
+if test "x$host_win32" = "xyes"; then
+ # Boehm GC requires the runtime to be in its own dll
+ with_static_mono=no
+fi
+
+AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
+AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
+AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
+
+AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
+if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
+ AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
+ ORIG_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
+ AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
+ AC_TRY_COMPILE([], [
+ return 0;
+ ], [
+ AC_MSG_RESULT(yes)
+ # Pass it to libgc as well
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
+ ], [
+ AC_MSG_RESULT(no)
+ CFLAGS=$ORIG_CFLAGS
+ ])
+fi
+
+AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
+
+if test x$enable_small_config = xyes; then
+ AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
+fi
+
+AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
+
+DISABLED_FEATURES=none
+
+AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
+ LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
+ reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, perfcounters, normalization, assembly_remapping, shared_perfcounters, remoting,
+ security, sgen_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying.],
+[
+ for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
+ eval "mono_feature_disable_$feature='yes'"
+ done
+ DISABLED_FEATURES=$enable_minimal
+ disabled="Disabled: $enable_minimal"
+],[])
+
+AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
+
+if test "x$mono_feature_disable_aot" = "xyes"; then
+ AC_DEFINE(DISABLE_AOT_COMPILER, 1, [Disable AOT Compiler])
+ AC_MSG_NOTICE([Disabled AOT compiler])
+fi
+
+if test "x$mono_feature_disable_profiler" = "xyes"; then
+ AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
+ AC_MSG_NOTICE([Disabled support for the profiler])
+fi
+AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
+
+if test "x$mono_feature_disable_decimal" = "xyes"; then
+ AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
+ AC_MSG_NOTICE([Disabled support for decimal])
+fi
+
+if test "x$mono_feature_disable_pinvoke" = "xyes"; then
+ AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
+ AC_MSG_NOTICE([Disabled support for P/Invoke])
+fi
+
+if test "x$mono_feature_disable_debug" = "xyes"; then
+ AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
+ AC_MSG_NOTICE([Disabled support for runtime debugging])
+fi
+
+if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
+ AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
+ mono_feature_disable_reflection_emit_save=yes
+ AC_MSG_NOTICE([Disabled support for Reflection.Emit])
+fi
+
+if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
+ AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
+ AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
+fi
+
+if test "x$mono_feature_disable_large_code" = "xyes"; then
+ AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
+ AC_MSG_NOTICE([Disabled support for large assemblies])
+fi
+
+if test "x$mono_feature_disable_logging" = "xyes"; then
+ AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
+ AC_MSG_NOTICE([Disabled support for logging])
+fi
+
+if test "x$mono_feature_disable_com" = "xyes"; then
+ AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
+ AC_MSG_NOTICE([Disabled COM support])
+fi
+
+if test "x$mono_feature_disable_ssa" = "xyes"; then
+ AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
+ AC_MSG_NOTICE([Disabled SSA JIT optimizations])
+fi
+
+if test "x$mono_feature_disable_generics" = "xyes"; then
+ AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
+ AC_MSG_NOTICE([Disabled Generics Support])
+fi
+
+if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
+ AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
+ AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
+fi
+
+if test "x$mono_feature_disable_portability" = "xyes"; then
+ AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
+ AC_MSG_NOTICE([Disabled IO Portability layer])
+fi
+
+if test "x$mono_feature_disable_attach" = "xyes"; then
+ AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
+ AC_MSG_NOTICE([Disabled agent attach])
+fi
+
+if test "x$mono_feature_disable_full_messages" = "xyes"; then
+ AC_DEFINE(DISABLE_FULL_MESSAGES, 1, [Disables building in the full table of WAPI messages])
+ AC_MSG_NOTICE([Disabled full messages for Win32 errors, only core message strings shipped])
+fi
+
+if test "x$mono_feature_disable_verifier" = "xyes"; then
+ AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
+ AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
+fi
+
+if test "x$mono_feature_disable_jit" = "xyes"; then
+ AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode will be supported by the runtime.])
+ AC_MSG_NOTICE([Disabled the JIT engine, only full AOT will be supported])
+fi
+
+AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
+
+if test "x$mono_feature_disable_simd" = "xyes"; then
+ AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
+ AC_MSG_NOTICE([Disabled SIMD support])
+fi
+
+if test "x$mono_feature_disable_soft_debug" = "xyes"; then
+ AC_DEFINE(DISABLE_SOFT_DEBUG, 1, [Disable Soft Debugger Agent.])
+ AC_MSG_NOTICE([Disabled Soft Debugger.])
+fi
+
+if test "x$mono_feature_disable_perfcounters" = "xyes"; then
+ AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
+ AC_MSG_NOTICE([Disabled Performance Counters.])
+fi
+if test "x$mono_feature_disable_normalization" = "xyes"; then
+ AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
+ AC_MSG_NOTICE([Disabled String normalization support.])
+fi
+
+if test "x$mono_feature_disable_assembly_remapping" = "xyes"; then
+ AC_DEFINE(DISABLE_ASSEMBLY_REMAPPING, 1, [Disable assembly remapping.])
+ AC_MSG_NOTICE([Disabled Assembly remapping.])
+fi
+
+if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
+ AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
+ AC_MSG_NOTICE([Disabled Shared perfcounters.])
+fi
+
+if test "x$mono_feature_disable_appdomains" = "xyes"; then
+ AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
+ AC_MSG_NOTICE([Disabled support for multiple appdomains.])
+fi
+
+if test "x$mono_feature_disable_remoting" = "xyes"; then
+ AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
+ AC_MSG_NOTICE([Disabled remoting])
+fi
+
+if test "x$mono_feature_disable_security" = "xyes"; then
+ AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
+ AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
+fi
+
+if test "x$mono_feature_disable_sgen_remset" = "xyes"; then
+ AC_DEFINE(DISABLE_SGEN_REMSET, 1, [Disable wbarrier=remset support in SGEN.])
+ AC_MSG_NOTICE([Disabled wbarrier=remset support in SGEN.])
+fi
+
+if test "x$mono_feature_disable_sgen_marksweep_par" = "xyes"; then
+ AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_PAR, 1, [Disable major=marksweep-par support in SGEN.])
+ AC_MSG_NOTICE([Disabled major=marksweep-par support in SGEN.])
+fi
+
+if test "x$mono_feature_disable_sgen_marksweep_fixed" = "xyes"; then
+ AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED, 1, [Disable major=marksweep-fixed support in SGEN.])
+ AC_MSG_NOTICE([Disabled major=marksweep-fixed support in SGEN.])
+fi
+
+if test "x$mono_feature_disable_sgen_marksweep_fixed_par" = "xyes"; then
+ AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED_PAR, 1, [Disable major=marksweep-fixed-par support in SGEN.])
+ AC_MSG_NOTICE([Disabled major=marksweep-fixed-par support in SGEN.])
+fi
+
+if test "x$mono_feature_disable_sgen_copying" = "xyes"; then
+ AC_DEFINE(DISABLE_SGEN_MAJOR_COPYING, 1, [Disable major=copying support in SGEN.])
+ AC_MSG_NOTICE([Disabled major=copying support in SGEN.])
+fi
+
+AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
+AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
+
+has_extension_module=no
+AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
+[
+ for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
+ if test x$extension = xdefault ; then
+ has_extension_module=yes;
+ fi
+ done
+ if test x$enable_extension_module = xyes; then
+ has_extension_module=yes;
+ fi
+], [])
+
+AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
+
+if test x$has_extension_module != xno ; then
+ AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
+ AC_MSG_NOTICE([Enabling mono extension module.])
+fi
+
+AC_ARG_ENABLE(gsharing, [ --enable-gsharing Enable gsharing], enable_gsharing=$enableval, enable_gsharing=no)
+if test x$enable_gsharing = xyes; then
+ AC_DEFINE(ENABLE_GSHAREDVT,1,[Gsharing])
+fi
+
+AC_ARG_ENABLE(native-types, [ --enable-native-types Enable native types], enable_native_types=$enableval, enable_native_types=no)
+if test x$enable_native_types = xyes; then
+ AC_DEFINE(MONO_NATIVE_TYPES,1,[native types])
+fi
+
+AC_MSG_CHECKING(for visibility __attribute__)
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([[
+ void __attribute__ ((visibility ("hidden"))) doit (void) {}
+ int main () { doit (); return 0; }
+ ]])
+], [
+ have_visibility_hidden=yes
+ AC_MSG_RESULT(yes)
+], [
+ have_visibility_hidden=no
+ AC_MSG_RESULT(no)
+])
+
+AC_MSG_CHECKING(for deprecated __attribute__)
+AC_TRY_COMPILE([
+ int doit (void) __attribute__ ((deprecated));
+ int doit (void) { return 0; }
+], [
+ return 0;
+], [
+ have_deprecated=yes
+ AC_MSG_RESULT(yes)
+], [
+ have_deprecated=no
+ AC_MSG_RESULT(no)
+])
+
+AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
+if test x$enable_parallel_mark = xyes; then
+ libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
+fi
+
+AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
+AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
+
+dnl
+dnl Boehm GC configuration
+dnl
+LIBGC_CPPFLAGS=
+LIBGC_LIBS=
+LIBGC_STATIC_LIBS=
+libgc_dir=
+case "x$gc" in
+ xboehm|xbohem|xyes)
+ AC_CHECK_HEADERS(gc.h gc/gc.h, gc_headers=yes)
+ AC_CHECK_LIB(gc, GC_malloc, found_boehm="yes",,$libdl)
+
+ if test "x$found_boehm" != "xyes"; then
+ AC_MSG_ERROR("GC requested but libgc not found! Install libgc or run configure with --with-gc=none.")
+ fi
+ if test "x$gc_headers" != "xyes"; then
+ AC_MSG_ERROR("GC requested but header files not found! You may need to install them by hand.")
+ fi
+
+ LIBGC_LIBS="-lgc $libdl"
+ LIBGC_STATIC_LIBS="$LIBGC_LIBS"
+ libmono_ldflags="$libmono_ldflags -lgc"
+ BOEHM_DEFINES="-DHAVE_BOEHM_GC"
+
+ # AC_CHECK_FUNCS does not work for some reason...
+ AC_CHECK_LIB(gc, GC_gcj_malloc, found_gcj_malloc="yes",,$libdl)
+ if test "x$found_gcj_malloc" = "xyes"; then
+ BOEHM_DEFINES="-DHAVE_GC_GCJ_MALLOC $BOEHM_DEFINES"
+ AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "System Boehm (with typed GC)", [GC description])
+ gc_msg="System Boehm with typed GC"
+ else
+ AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "System Boehm (no typed GC)", [GC description])
+ gc_msg="System Boehm (without typed GC)"
+ fi
+ AC_CHECK_LIB(gc, GC_enable, found_gc_enable="yes",,$libdl)
+ if test "x$found_gc_enable" = "xyes"; then
+ BOEHM_DEFINES="-DHAVE_GC_ENABLE $BOEHM_DEFINES"
+ fi
+
+ # check whether we need to explicitly allow
+ # thread registering
+ AC_CHECK_LIB(gc, GC_allow_register_threads, found_allow_register_threads="yes",,$libdl)
+ if test "x$found_allow_register_threads" = "xyes"; then
+ AC_DEFINE(HAVE_GC_ALLOW_REGISTER_THREADS, 1, [GC requires thread registration])
+ fi
+
+ ;;
+
+ xincluded)
+ use_included_gc=yes
+ libgc_dir=libgc
+
+ LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
+ LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
+ LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
+
+ BOEHM_DEFINES="-DHAVE_BOEHM_GC -DHAVE_GC_H -DUSE_INCLUDED_LIBGC -DHAVE_GC_GCJ_MALLOC -DHAVE_GC_ENABLE"
+
+ if test x$target_win32 = xyes; then
+ BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
+ fi
+
+ gc_msg="bundled Boehm GC with typed GC"
+ if test x$enable_parallel_mark = xyes; then
+ AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
+ gc_msg="$gc_msg and parallel mark"
+ else
+ AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
+ fi
+ ;;
+
+ xsgen)
+ AC_MSG_WARN("Use --with-sgen instead, --with-gc= controls Boehm configuration")
+ ;;
+
+ xnone)
+ AC_MSG_WARN("Compiling mono without GC.")
+ AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
+ AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
+ gc_msg="none"
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid argument to --with-gc.])
+ ;;
+esac
+
+AC_ARG_WITH(large-heap, [ --with-large-heap=yes,no Enable support for GC heaps larger than 3GB (defaults to no)], [large_heap=$withval], [large_heap=no])
+if test "x$large_heap" = "xyes"; then
+ CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
+fi
+
+AM_CONDITIONAL(INCLUDED_LIBGC, test x$use_included_gc = xyes)
+AC_SUBST(LIBGC_CPPFLAGS)
+AC_SUBST(LIBGC_LIBS)
+AC_SUBST(LIBGC_STATIC_LIBS)
+AC_SUBST(libgc_dir)
+AC_SUBST(BOEHM_DEFINES)
+
+dnl
+dnl End of libgc checks
+dnl
+
+dnl *************************************
+dnl *** Checks for zero length arrays ***
+dnl *************************************
+AC_MSG_CHECKING(whether $CC supports zero length arrays)
+AC_TRY_COMPILE([
+ struct s {
+ int length;
+ char data [0];
+ };
+], [], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
+], [
+ AC_MSG_RESULT(no)
+ AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
+])
+
+AC_CHECK_HEADERS(nacl/nacl_dyncode.h)
+
+if test x$target_win32 = xno; then
+
+ dnl hires monotonic clock support
+ AC_SEARCH_LIBS(clock_gettime, rt)
+
+ dnl dynamic loader support
+ AC_CHECK_FUNC(dlopen, DL_LIB="",
+ AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
+ )
+ if test x$dl_support = xno; then
+ AC_MSG_WARN([No dynamic loading support available])
+ else
+ LIBS="$LIBS $DL_LIB"
+ AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
+ dnl from glib's configure.ac
+ AC_CACHE_CHECK([for preceeding underscore in symbols],
+ mono_cv_uscore,[
+ AC_TRY_RUN([#include <dlfcn.h>
+ int mono_underscore_test (void) { return 42; }
+ int main() {
+ void *f1 = (void*)0, *f2 = (void*)0, *handle;
+ handle = dlopen ((void*)0, 0);
+ if (handle) {
+ f1 = dlsym (handle, "mono_underscore_test");
+ f2 = dlsym (handle, "_mono_underscore_test");
+ } return (!f2 || f1);
+ }],
+ [mono_cv_uscore=yes],
+ [mono_cv_uscore=no],
+ [])
+ ])
+ if test "x$mono_cv_uscore" = "xyes"; then
+ MONO_DL_NEED_USCORE=1
+ else
+ MONO_DL_NEED_USCORE=0
+ fi
+ AC_SUBST(MONO_DL_NEED_USCORE)
+ AC_CHECK_FUNC(dlerror)
+ fi
+
+ dnl ******************************************************************
+ dnl *** Checks for the IKVM JNI interface library ***
+ dnl ******************************************************************
+ AC_ARG_WITH(ikvm-native, [ --with-ikvm-native=yes,no build the IKVM JNI interface library (defaults to yes)],[with_ikvm_native=$withval],[with_ikvm_native=$ikvm_native])
+
+ ikvm_native_dir=
+ if test x$with_ikvm_native = xyes; then
+ ikvm_native_dir=ikvm-native
+ jdk_headers_found="IKVM Native"
+ fi
+
+ AC_SUBST(ikvm_native_dir)
+
+ AC_CHECK_HEADERS(execinfo.h)
+
+ AC_CHECK_HEADERS(sys/auxv.h)
+
+ 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)
+ AC_CHECK_FUNCS(backtrace_symbols)
+ AC_CHECK_FUNCS(mkstemp)
+ AC_CHECK_FUNCS(mmap)
+ AC_CHECK_FUNCS(madvise)
+ AC_CHECK_FUNCS(getrusage)
+ AC_CHECK_FUNCS(getpriority)
+ AC_CHECK_FUNCS(setpriority)
+ AC_CHECK_FUNCS(dl_iterate_phdr)
+ AC_CHECK_FUNCS(dladdr)
+ AC_CHECK_FUNCS(sysconf)
+
+ AC_CHECK_FUNCS(sched_setaffinity)
+ AC_CHECK_FUNCS(sched_getcpu)
+
+ dnl ****************************************************************
+ dnl *** Check for sched_setaffinity from glibc versions before ***
+ dnl *** 2.3.4. The older versions of the function only take 2 ***
+ dnl *** parameters, not 3. ***
+ dnl *** ***
+ dnl *** Because the interface change was not made in a minor ***
+ dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
+ dnl *** won't always indicate the interface sched_affinity has. ***
+ dnl ****************************************************************
+ AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
+ AC_TRY_COMPILE([#include <sched.h>], [
+ int mask = 1;
+ sched_setaffinity(0, &mask);
+ return 0;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
+ ], [
+ # We have the new, three-parameter version
+ AC_MSG_RESULT(no)
+ ])
+
+
+ dnl ******************************************************************
+ dnl *** Check for large file support ***
+ dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
+ dnl ******************************************************************
+
+ # Check that off_t can represent 2**63 - 1 correctly, working around
+ # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
+ # CPPFLAGS and sets $large_offt to yes if the test succeeds
+ large_offt=no
+ AC_DEFUN([LARGE_FILES], [
+ large_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $1"
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <limits.h>
+ ], [
+ /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
+ #define COMPILE_TIME_ASSERT(pred) \
+ switch(0){case 0:case pred:;}
+ COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
+ ], [
+ AC_MSG_RESULT(ok)
+ AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
+ large_CPPFLAGS="$large_CPPFLAGS $1"
+ large_offt=yes
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ CPPFLAGS=$large_CPPFLAGS
+ ])
+
+ AC_MSG_CHECKING(if off_t is 64 bits wide)
+ LARGE_FILES("")
+ if test $large_offt = no; then
+ AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
+ LARGE_FILES("-D_FILE_OFFSET_BITS=64")
+ fi
+ if test $large_offt = no; then
+ AC_MSG_WARN([No 64 bit file size support available])
+ fi
+
+ dnl *****************************
+ dnl *** Checks for libsocket ***
+ dnl *****************************
+ AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
+
+ case "$host" in
+ *-*-*freebsd*)
+ dnl *****************************
+ dnl *** Checks for libinotify ***
+ dnl *****************************
+ AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
+ esac
+
+ dnl *******************************
+ dnl *** Checks for MSG_NOSIGNAL ***
+ dnl *******************************
+ AC_MSG_CHECKING(for MSG_NOSIGNAL)
+ AC_TRY_COMPILE([#include <sys/socket.h>], [
+ int f = MSG_NOSIGNAL;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
+ ], [
+ # We'll have to use signals
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for IPPROTO_IP ***
+ dnl *****************************
+ AC_MSG_CHECKING(for IPPROTO_IP)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ int level = IPPROTO_IP;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *******************************
+ dnl *** Checks for IPPROTO_IPV6 ***
+ dnl *******************************
+ AC_MSG_CHECKING(for IPPROTO_IPV6)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ int level = IPPROTO_IPV6;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl ******************************
+ dnl *** Checks for IPPROTO_TCP ***
+ dnl ******************************
+ AC_MSG_CHECKING(for IPPROTO_TCP)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ int level = IPPROTO_TCP;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for SOL_IP ***
+ dnl *****************************
+ AC_MSG_CHECKING(for SOL_IP)
+ AC_TRY_COMPILE([#include <netdb.h>], [
+ int level = SOL_IP;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for SOL_IPV6 ***
+ dnl *****************************
+ AC_MSG_CHECKING(for SOL_IPV6)
+ AC_TRY_COMPILE([#include <netdb.h>], [
+ int level = SOL_IPV6;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for SOL_TCP ***
+ dnl *****************************
+ AC_MSG_CHECKING(for SOL_TCP)
+ AC_TRY_COMPILE([#include <netdb.h>], [
+ int level = SOL_TCP;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
+ ], [
+ # We'll have to use getprotobyname
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for IP_PKTINFO ***
+ dnl *****************************
+ AC_MSG_CHECKING(for IP_PKTINFO)
+ AC_TRY_COMPILE([#include <linux/in.h>], [
+ int level = IP_PKTINFO;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for IPV6_PKTINFO ***
+ dnl *****************************
+ AC_MSG_CHECKING(for IPV6_PKTINFO)
+ AC_TRY_COMPILE([#include <netdb.h>], [
+ int level = IPV6_PKTINFO;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** Checks for IP_DONTFRAG ***
+ dnl **********************************
+ AC_MSG_CHECKING(for IP_DONTFRAG)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ int level = IP_DONTFRAG;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** Checks for IP_DONTFRAGMENT ***
+ dnl **********************************
+ AC_MSG_CHECKING(for IP_DONTFRAGMENT)
+ AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
+ int level = IP_DONTFRAGMENT;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** Checks for IP_MTU_DISCOVER ***
+ dnl **********************************
+ AC_MSG_CHECKING(for IP_MTU_DISCOVER)
+ AC_TRY_COMPILE([#include <linux/in.h>], [
+ int level = IP_MTU_DISCOVER;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** Checks for IP_PMTUDISC_DO ***
+ dnl **********************************
+ AC_MSG_CHECKING(for IP_PMTUDISC_DO)
+ AC_TRY_COMPILE([#include <linux/in.h>], [
+ int level = IP_PMTUDISC_DO;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *********************************
+ dnl *** Check for struct ip_mreqn ***
+ dnl *********************************
+ AC_MSG_CHECKING(for struct ip_mreqn)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ struct ip_mreqn mreq;
+ mreq.imr_address.s_addr = 0;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
+ ], [
+ # We'll just have to try and use struct ip_mreq
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for struct ip_mreq)
+ AC_TRY_COMPILE([#include <netinet/in.h>], [
+ struct ip_mreq mreq;
+ mreq.imr_interface.s_addr = 0;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
+ ], [
+ # No multicast support
+ AC_MSG_RESULT(no)
+ ])
+ ])
+
+ dnl **********************************
+ dnl *** Check for gethostbyname2_r ***
+ dnl **********************************
+ AC_MSG_CHECKING(for gethostbyname2_r)
+ AC_TRY_LINK([#include <netdb.h>], [
+ gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl *****************************
+ dnl *** Checks for libnsl ***
+ dnl *****************************
+ AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
+
+ AC_CHECK_FUNCS(inet_pton inet_aton)
+
+ dnl ***********************************************
+ dnl *** Checks for size of sockaddr_un.sun_path ***
+ dnl ***********************************************
+ # AC_CHECK_SIZEOF can't cope with struct members :-(
+ AC_MSG_CHECKING(size of sockaddr_un.sun_path)
+ AC_CACHE_VAL(mono_cv_sizeof_sunpath,
+ [AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include <sys/un.h>
+
+ int main(void) {
+ struct sockaddr_un sock_un;
+ FILE *f=fopen("conftestval", "w");
+ if(!f) exit(1);
+ fprintf(f, "%d\n", sizeof(sock_un.sun_path));
+ exit(0);
+ }
+ ], mono_cv_sizeof_sunpath=`cat conftestval`,
+ mono_cv_sizeof_sunpath=0,
+ mono_cv_sizeof_sunpath=0)])dnl
+ AC_MSG_RESULT($mono_cv_sizeof_sunpath)
+ AC_DEFINE_UNQUOTED(MONO_SIZEOF_SUNPATH, $mono_cv_sizeof_sunpath, [Sizeof sock_un.sun_path])
+
+ dnl *****************************
+ dnl *** Checks for libxnet ***
+ dnl *****************************
+ case "${host}" in
+ *solaris* )
+ AC_MSG_CHECKING(for Solaris XPG4 support)
+ if test -f /usr/lib/libxnet.so; then
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
+ CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
+ LIBS="$LIBS -lxnet"
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ if test "$GCC" = "yes"; then
+ CFLAGS="$CFLAGS -Wno-char-subscripts"
+ fi
+ ;;
+ esac
+
+ dnl *****************************
+ dnl *** Checks for libpthread ***
+ dnl *****************************
+# on FreeBSD -STABLE, the pthreads functions all reside in libc_r
+# and libpthread does not exist
+#
+ case "${host}" in
+ *-*-*freebsd*)
+ AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
+ ;;
+ *-*-*openbsd*)
+ AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
+ ;;
+ *)
+ AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
+ ;;
+ esac
+ AC_CHECK_HEADERS(pthread.h)
+ AC_CHECK_HEADERS(pthread_np.h)
+ AC_CHECK_FUNCS(pthread_mutex_timedlock)
+ AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np)
+ AC_CHECK_FUNCS(pthread_kill)
+ AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
+ AC_TRY_COMPILE([ #include <pthread.h>], [
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+ ], [
+ AC_MSG_RESULT(ok)
+ ], [
+ AC_MSG_RESULT(no)
+ AC_ERROR(Posix system lacks support for recursive mutexes)
+ ])
+ AC_CHECK_FUNCS(pthread_attr_setstacksize)
+ AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
+ AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
+
+ dnl ***********************************
+ dnl *** Checks for signals
+ dnl ***********************************
+ AC_CHECK_HEADERS(signal.h)
+ AC_CHECK_FUNCS(sigaction)
+
+ dnl ***********************************
+ dnl *** Checks for working __thread ***
+ dnl ***********************************
+ AC_MSG_CHECKING(for working __thread)
+ if test "x$with_tls" != "x__thread"; then
+ AC_MSG_RESULT(disabled)
+ elif test "x$cross_compiling" = "xyes"; then
+ AC_MSG_RESULT(cross compiling, assuming yes)
+ else
+ AC_TRY_RUN([
+ #if defined(__APPLE__) && defined(__clang__)
+ #error "__thread does not currently work with clang on Mac OS X"
+ #endif
+
+ #include <pthread.h>
+ __thread int i;
+ static int res1, res2;
+
+ void thread_main (void *arg)
+ {
+ i = arg;
+ sleep (1);
+ if (arg == 1)
+ res1 = (i == arg);
+ else
+ res2 = (i == arg);
+ }
+
+ int main () {
+ pthread_t t1, t2;
+
+ i = 5;
+
+ pthread_create (&t1, NULL, thread_main, 1);
+ pthread_create (&t2, NULL, thread_main, 2);
+
+ pthread_join (t1, NULL);
+ pthread_join (t2, NULL);
+
+ return !(res1 + res2 == 2);
+ }
+ ], [
+ AC_MSG_RESULT(yes)
+ ], [
+ AC_MSG_RESULT(no)
+ with_tls=pthread
+ ])
+ fi
+
+ dnl **************************************
+ dnl *** Checks for working sigaltstack ***
+ dnl **************************************
+ AC_MSG_CHECKING(for working sigaltstack)
+ if test "x$with_sigaltstack" != "xyes"; then
+ AC_MSG_RESULT(disabled)
+ elif test "x$cross_compiling" = "xyes"; then
+ AC_MSG_RESULT(cross compiling, assuming yes)
+ else
+ AC_TRY_RUN([
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <signal.h>
+ #include <pthread.h>
+ #include <sys/wait.h>
+ #if defined(__FreeBSD__) || defined(__NetBSD__)
+ #define SA_STACK SA_ONSTACK
+ #endif
+ static void
+ sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
+ {
+ exit (0);
+ }
+
+ volatile char*__ptr = NULL;
+ static void *
+ loop (void *ignored)
+ {
+ *__ptr = 0;
+ return NULL;
+ }
+
+ static void
+ child ()
+ {
+ struct sigaction sa;
+ #ifdef __APPLE__
+ stack_t sas;
+ #else
+ struct sigaltstack sas;
+ #endif
+ pthread_t id;
+ pthread_attr_t attr;
+
+ sa.sa_sigaction = sigsegv_signal_handler;
+ sigemptyset (&sa.sa_mask);
+ sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
+ if (sigaction (SIGSEGV, &sa, NULL) == -1) {
+ perror ("sigaction");
+ return;
+ }
+
+ /* x86 darwin deliver segfaults using SIGBUS */
+ if (sigaction (SIGBUS, &sa, NULL) == -1) {
+ perror ("sigaction");
+ return;
+ }
+ sas.ss_sp = malloc (SIGSTKSZ);
+ sas.ss_size = SIGSTKSZ;
+ sas.ss_flags = 0;
+ if (sigaltstack (&sas, NULL) == -1) {
+ perror ("sigaltstack");
+ return;
+ }
+
+ pthread_attr_init (&attr);
+ if (pthread_create(&id, &attr, loop, &attr) != 0) {
+ printf ("pthread_create\n");
+ return;
+ }
+
+ sleep (100);
+ }
+
+ int
+ main ()
+ {
+ pid_t son;
+ int status;
+ int i;
+
+ son = fork ();
+ if (son == -1) {
+ return 1;
+ }
+
+ if (son == 0) {
+ child ();
+ return 0;
+ }
+
+ for (i = 0; i < 300; ++i) {
+ waitpid (son, &status, WNOHANG);
+ if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
+ return 0;
+ usleep (10000);
+ }
+
+ kill (son, SIGKILL);
+ return 1;
+ }
+
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
+ ], [
+ with_sigaltstack=no
+ AC_MSG_RESULT(no)
+ ])
+ fi
+
+ dnl ********************************
+ dnl *** Checks for semaphore lib ***
+ dnl ********************************
+ # 'Real Time' functions on Solaris
+ # posix4 on Solaris 2.6
+ # pthread (first!) on Linux
+ AC_SEARCH_LIBS(sem_init, pthread rt posix4)
+
+ AC_SEARCH_LIBS(shm_open, pthread rt posix4)
+ AC_CHECK_FUNCS(shm_open)
+
+ dnl ********************************
+ dnl *** Checks for timezone stuff **
+ dnl ********************************
+ AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ struct tm tm;
+ tm.tm_gmtoff = 1;
+ ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
+ if test $ac_cv_struct_tm_gmtoff = yes; then
+ AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
+ else
+ AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ timezone = 1;
+ ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
+ if test $ac_cv_var_timezone = yes; then
+ AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
+ else
+ AC_ERROR(unable to find a way to determine timezone)
+ fi
+ fi
+
+ dnl *********************************
+ dnl *** Checks for math functions ***
+ dnl *********************************
+ AC_SEARCH_LIBS(sqrtf, m)
+ if test "x$has_broken_apple_cpp" != "xyes"; then
+ AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
+ AC_TRY_LINK([#include <math.h>],
+ [ finite(0.0); ],
+ AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no)))
+ fi
+ AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
+ AC_TRY_LINK([#include <math.h>],
+ [ isfinite(0.0); ],
+ AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no)))
+
+ dnl ****************************************************************
+ dnl *** Checks for working poll() (macosx defines it but doesn't ***
+ dnl *** have it in the library (duh)) ***
+ dnl ****************************************************************
+ AC_CHECK_FUNCS(poll)
+
+ dnl *************************
+ dnl *** Check for signbit ***
+ dnl *************************
+ AC_MSG_CHECKING(for signbit)
+ AC_TRY_LINK([#include <math.h>], [
+ int s = signbit(1.0);
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** epoll ***
+ dnl **********************************
+ if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xno"; then
+ AC_CHECK_HEADERS(sys/epoll.h)
+ haveepoll=no
+ AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
+ if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
+ AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
+ fi
+ fi
+
+ havekqueue=no
+
+ AC_CHECK_HEADERS(sys/event.h)
+ AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
+
+ dnl **************************************
+ dnl * Darwin has a race that prevents us from using reliably:
+ dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
+ dnl * Since kqueue is mostly used for scaling large web servers,
+ dnl * and very few folks run Mono on large web servers on OSX, falling
+ dnl * back
+ dnl **************************************
+ if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
+ if test "x$platform_darwin" = "xno"; then
+ AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
+ fi
+ fi
+
+ dnl ******************************
+ dnl *** Checks for SIOCGIFCONF ***
+ dnl ******************************
+ AC_CHECK_HEADERS(sys/ioctl.h)
+ AC_CHECK_HEADERS(net/if.h, [], [],
+ [
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ])
+ AC_MSG_CHECKING(for ifreq)
+ AC_TRY_COMPILE([
+ #include <stdio.h>
+ #include <sys/ioctl.h>
+ #include <net/if.h>
+ ], [
+ struct ifconf ifc;
+ struct ifreq *ifr;
+ void *x;
+ ifc.ifc_len = 0;
+ ifc.ifc_buf = NULL;
+ x = (void *) &ifr->ifr_addr;
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ dnl **********************************
+ dnl *** Checks for sin_len ***
+ dnl **********************************
+ AC_MSG_CHECKING(for sockaddr_in.sin_len)
+ AC_TRY_COMPILE([
+ #include <netinet/in.h>
+ ], [
+ struct sockaddr_in saddr;
+ saddr.sin_len = sizeof (saddr);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ dnl **********************************
+ dnl *** Checks for sin6_len ***
+ dnl **********************************
+ AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
+ AC_TRY_COMPILE([
+ #include <netinet/in.h>
+ ], [
+ struct sockaddr_in6 saddr6;
+ saddr6.sin6_len = sizeof (saddr6);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ dnl **********************************
+ dnl *** Check for getifaddrs ***
+ dnl **********************************
+ AC_MSG_CHECKING(for getifaddrs)
+ AC_TRY_LINK([
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <ifaddrs.h>
+ ], [
+ getifaddrs(NULL);
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ dnl **********************************
+ dnl *** Check for if_nametoindex ***
+ dnl **********************************
+ AC_MSG_CHECKING(for if_nametoindex)
+ AC_TRY_LINK([
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <net/if.h>
+ ], [
+ if_nametoindex(NULL);
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+
+ dnl **********************************
+ dnl *** Checks for MonoPosixHelper ***
+ dnl **********************************
+ AC_CHECK_HEADERS(checklist.h)
+ AC_CHECK_HEADERS(pathconf.h)
+ AC_CHECK_HEADERS(fstab.h)
+ AC_CHECK_HEADERS(attr/xattr.h)
+ AC_CHECK_HEADERS(sys/extattr.h)
+ AC_CHECK_HEADERS(sys/sendfile.h)
+ AC_CHECK_HEADERS(sys/statvfs.h)
+ AC_CHECK_HEADERS(sys/statfs.h)
+ AC_CHECK_HEADERS(sys/vfstab.h)
+ AC_CHECK_HEADERS(sys/xattr.h)
+ AC_CHECK_HEADERS(sys/mman.h)
+ AC_CHECK_HEADERS(sys/param.h)
+ AC_CHECK_HEADERS(sys/mount.h, [], [],
+ [
+ #ifdef HAVE_SYS_PARAM_H
+ # include <sys/param.h>
+ #endif
+ ])
+ AC_CHECK_HEADERS(sys/mount.h)
+ AC_CHECK_FUNCS(confstr)
+ AC_CHECK_FUNCS(seekdir telldir)
+ AC_CHECK_FUNCS(getdomainname)
+ AC_CHECK_FUNCS(setdomainname)
+ AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
+ AC_CHECK_FUNCS(setgroups)
+ AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
+ AC_CHECK_FUNCS(getfsstat)
+ AC_CHECK_FUNCS(lutimes futimes)
+ AC_CHECK_FUNCS(mremap)
+ AC_CHECK_FUNCS(remap_file_pages)
+ AC_CHECK_FUNCS(posix_fadvise)
+ AC_CHECK_FUNCS(posix_fallocate)
+ AC_CHECK_FUNCS(posix_madvise)
+ AC_CHECK_FUNCS(vsnprintf)
+ AC_CHECK_FUNCS(sendfile)
+ AC_CHECK_FUNCS(gethostid sethostid)
+ AC_CHECK_FUNCS(sethostname)
+ AC_CHECK_FUNCS(statfs)
+ AC_CHECK_FUNCS(fstatfs)
+ AC_CHECK_FUNCS(statvfs)
+ AC_CHECK_FUNCS(fstatvfs)
+ AC_CHECK_FUNCS(stime)
+ AC_CHECK_FUNCS(strerror_r)
+ AC_CHECK_FUNCS(ttyname_r)
+ AC_CHECK_FUNCS(psignal)
+ AC_CHECK_FUNCS(getlogin_r)
+ AC_CHECK_FUNCS(lockf)
+ AC_CHECK_FUNCS(swab)
+ AC_CHECK_FUNCS(setusershell endusershell)
+ AC_CHECK_FUNCS(futimens utimensat)
+ AC_CHECK_FUNCS(fstatat mknodat readlinkat)
+ AC_CHECK_FUNCS(readv writev preadv pwritev)
+ AC_CHECK_FUNCS(setpgid)
+ AC_CHECK_SIZEOF(size_t)
+ AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
+ [#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>])
+ AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
+ [#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>])
+ AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
+ [#include <sys/time.h>])
+ AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
+ [#include <unistd.h>
+ #include <fcntl.h>])
+ AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
+ [#include <sys/uio.h>])
+ AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
+ [#include <sys/poll.h>])
+ AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
+ [#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>])
+ AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
+ [#include <time.h>])
+ AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
+ [#include <sys/time.h>
+ #include <sys/types.h>
+ #include <utime.h>])
+ AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
+ [#include <sys/time.h>])
+ AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
+ [#include <sys/types.h>
+ #include <utime.h>])
+ AC_CHECK_MEMBERS(
+ [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
+ [#include <sys/types.h>
+ #include <dirent.h>])
+ AC_CHECK_MEMBERS(
+ [struct passwd.pw_gecos],,,
+ [#include <sys/types.h>
+ #include <pwd.h>])
+ AC_CHECK_MEMBERS(
+ [struct statfs.f_flags],,,
+ [#include <sys/types.h>
+ #include <sys/vfs.h>])
+ AC_CHECK_MEMBERS(
+ [struct stat.st_atim, struct stat.st_mtim, struct stat.st_ctim],,,
+ [#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>])
+
+ dnl Favour xattr through glibc, but use libattr if we have to
+ AC_CHECK_FUNC(lsetxattr, ,
+ AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
+ )
+ AC_SUBST(XATTR_LIB)
+
+ dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
+ AC_CHECK_MEMBERS(
+ [struct kinfo_proc.kp_proc],,,
+ [#include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/sysctl.h>
+ #include <sys/proc.h>
+ ])
+
+ dnl *********************************
+ dnl *** Checks for Windows compilation ***
+ dnl *********************************
+ AC_CHECK_HEADERS(sys/time.h)
+ AC_CHECK_HEADERS(sys/param.h)
+ AC_CHECK_HEADERS(dirent.h)
+
+ dnl ******************************************
+ dnl *** Checks for OSX and iOS compilation ***
+ dnl ******************************************
+ AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
+
+ dnl *********************************
+ dnl *** Check for Console 2.0 I/O ***
+ dnl *********************************
+ AC_CHECK_HEADERS([curses.h])
+ AC_CHECK_HEADERS([term.h], [], [],
+ [#if HAVE_CURSES_H
+ #include <curses.h>
+ #endif
+ ])
+ AC_CHECK_HEADERS([termios.h])
+
+ dnl * This is provided in io-layer, but on windows it's only available
+ dnl * on xp+
+ AC_DEFINE(HAVE_GETPROCESSID, 1, [Define if GetProcessId is available])
+else
+ dnl *********************************
+ dnl *** Checks for Windows compilation ***
+ dnl *********************************
+ AC_CHECK_HEADERS(winternl.h)
+
+ jdk_headers_found=no
+ AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
+ AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
+
+ dnl *********************************
+ dnl *** Check for struct ip_mreqn ***
+ dnl *********************************
+ AC_MSG_CHECKING(for struct ip_mreqn)
+ AC_TRY_COMPILE([#include <ws2tcpip.h>], [
+ struct ip_mreqn mreq;
+ mreq.imr_address.s_addr = 0;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_IP_MREQN)
+ ], [
+ # We'll just have to try and use struct ip_mreq
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for struct ip_mreq)
+ AC_TRY_COMPILE([#include <ws2tcpip.h>], [
+ struct ip_mreq mreq;
+ mreq.imr_interface.s_addr = 0;
+ ], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_IP_MREQ)
+ ], [
+ # No multicast support
+ AC_MSG_RESULT(no)
+ ])
+ ])
+ AC_CHECK_FUNCS(GetProcessId)
+ AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
+ AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
+fi
+
+dnl socklen_t check
+AC_MSG_CHECKING(for socklen_t)
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+],[
+ socklen_t foo;
+],[
+ac_cv_c_socklen_t=yes
+ AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
+ AC_MSG_RESULT(yes)
+],[
+ AC_MSG_RESULT(no)
+])
+
+AC_MSG_CHECKING(for array element initializer support)
+AC_TRY_COMPILE([#include <sys/socket.h>], [
+ const int array[] = {[1] = 2,};
+], [
+ # Yes, we have it...
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
+], [
+ # We'll have to use signals
+ AC_MSG_RESULT(no)
+])
+
+AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
+ # Simply calling trunc (0.0) is no good since gcc will optimize the call away
+ AC_TRY_LINK([#include <math.h>],
+ [ static void *p = &trunc; ],
+ [
+ AC_DEFINE(HAVE_TRUNC)
+ AC_MSG_RESULT(yes)
+ ac_cv_trunc=yes
+ ],
+ AC_MSG_RESULT(no)))
+
+if test "x$ac_cv_truncl" != "xyes"; then
+ AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
+fi
+
+AC_CHECK_FUNCS(round)
+AC_CHECK_FUNCS(rint)
+AC_CHECK_FUNCS(execvp)
+
+dnl ****************************
+dnl *** Look for /dev/random ***
+dnl ****************************
+
+AC_MSG_CHECKING([if usage of random device is requested])
+AC_ARG_ENABLE(dev-random,
+[ --disable-dev-random disable the use of the random device (enabled by default)],
+try_dev_random=$enableval, try_dev_random=yes)
+
+AC_MSG_RESULT($try_dev_random)
+
+case "{$build}" in
+ *-openbsd*)
+ NAME_DEV_RANDOM="/dev/srandom"
+ ;;
+
+dnl Win32 does not have /dev/random, they have their own method...
+
+ *-mingw*|*-*-cygwin*)
+ ac_cv_have_dev_random=no
+ ;;
+
+dnl Everywhere else, it's /dev/random
+
+ *)
+ NAME_DEV_RANDOM="/dev/random"
+ ;;
+esac
+
+AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
+
+dnl Now check if the device actually exists
+
+if test "x$try_dev_random" = "xyes"; then
+ AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
+ [if test -r "$NAME_DEV_RANDOM" ; then
+ ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
+ if test "x$ac_cv_have_dev_random" = "xyes"; then
+ AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
+ fi
+else
+ AC_MSG_CHECKING(for random device)
+ ac_cv_have_dev_random=no
+ AC_MSG_RESULT(has been disabled)
+fi
+
+if test "x$host_win32" = "xyes"; then
+ AC_DEFINE(HAVE_CRYPT_RNG)
+fi
+
+if test "x$ac_cv_have_dev_random" = "xno" \
+ && test "x$host_win32" = "xno"; then
+ AC_MSG_WARN([[
+***
+*** A system-provided entropy source was not found on this system.
+*** Because of this, the System.Security.Cryptography random number generator
+*** will throw a NotImplemented exception.
+***
+*** If you are seeing this message, and you know your system DOES have an
+*** entropy collection in place, please contact <crichton@gimp.org> and
+*** provide information about the system and how to access the random device.
+***
+*** Otherwise you can install either egd or prngd and set the environment
+*** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
+***]])
+fi
+
+AC_MSG_CHECKING([if inter-process shared handles are requested])
+AC_ARG_ENABLE(shared-handles, [ --disable-shared-handles disable inter-process shared handles], try_shared_handles=$enableval, try_shared_handles=yes)
+AC_MSG_RESULT($try_shared_handles)
+if test "x$try_shared_handles" != "xyes"; then
+ AC_DEFINE(DISABLE_SHARED_HANDLES, 1, [Disable inter-process shared handles])
+ AC_SUBST(DISABLE_SHARED_HANDLES)
+fi
+
+AC_ARG_ENABLE(bcl-opt, [ --disable-bcl-opt BCL is compiled with no optimizations (allows accurate BCL debugging)], test_bcl_opt=$enableval, test_bcl_opt=yes)
+
+AC_ARG_ENABLE(nunit-tests, [ --enable-nunit-tests Run the nunit tests of the class library on 'make check'])
+AM_CONDITIONAL(ENABLE_NUNIT_TESTS, [test x$enable_nunit_tests = xyes])
+
+AC_MSG_CHECKING([if big-arrays are to be enabled])
+AC_ARG_ENABLE(big-arrays, [ --enable-big-arrays Enable the allocation and indexing of arrays greater than Int32.MaxValue], enable_big_arrays=$enableval, enable_big_arrays=no)
+if test "x$enable_big_arrays" = "xyes" ; then
+ if test "x$ac_cv_sizeof_void_p" = "x8"; then
+ AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
+ else
+ AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
+ fi
+fi
+AC_MSG_RESULT($enable_big_arrays)
+
+dnl **************
+dnl *** DTRACE ***
+dnl **************
+
+AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
+
+if test "x$enable_dtrace" = "xyes"; then
+ if test "x$has_dtrace" = "xno"; then
+ AC_MSG_ERROR([DTrace probes are not supported on this platform.])
+ fi
+ AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
+ if test "x$DTRACE" = "xno"; then
+ AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
+ enable_dtrace=no
+ elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
+ AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
+ enable_dtrace=no
+ fi
+fi
+
+dtrace_g=no
+if test "x$enable_dtrace" = "xyes"; then
+ AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
+ DTRACEFLAGS=
+ if test "x$ac_cv_sizeof_void_p" = "x8"; then
+ case "$host" in
+ powerpc-*-darwin*)
+ DTRACEFLAGS="-arch ppc64"
+ ;;
+ i*86-*-darwin*)
+ DTRACEFLAGS="-arch x86_64"
+ ;;
+ *)
+ DTRACEFLAGS=-64
+ ;;
+ esac
+ else
+ case "$host" in
+ powerpc-*-darwin*)
+ DTRACEFLAGS="-arch ppc"
+ ;;
+ i*86-*-darwin*)
+ DTRACEFLAGS="-arch i386"
+ ;;
+ *)
+ DTRACEFLAGS=-32
+ ;;
+ esac
+ fi
+ AC_SUBST(DTRACEFLAGS)
+ case "$host" in
+ *-*-solaris*)
+ dtrace_g=yes
+ ;;
+ esac
+ AC_CHECK_HEADERS([sys/sdt.h])
+fi
+AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
+AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
+
+dnl **************
+dnl *** NaCl ***
+dnl **************
+
+AC_ARG_ENABLE(nacl_codegen, [ --enable-nacl-codegen Enable Native Client code generation], enable_nacl_codegen=$enableval, enable_nacl_codegen=no)
+AC_ARG_ENABLE(nacl_gc, [ --enable-nacl-gc Enable Native Client garbage collection], enable_nacl_gc=$enableval, enable_nacl_gc=no)
+
+AM_CONDITIONAL(NACL_CODEGEN, test x$enable_nacl_codegen != xno)
+
+dnl
+dnl Hack to use system mono for operations in build/install not allowed in NaCl.
+dnl
+nacl_self_host=""
+if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xyes"; then
+ nacl_self_host="nacl_self_host"
+fi
+AC_SUBST(nacl_self_host)
+
+if test "x$enable_nacl_codegen" = "xyes"; then
+ MONO_NACL_ALIGN_MASK_OFF=1
+ AC_DEFINE(TARGET_NACL, 1, [...])
+ AC_DEFINE(__native_client_codegen__, 1, [...])
+else
+ MONO_NACL_ALIGN_MASK_OFF=0
+ AC_DEFINE(__default_codegen__, 1, [...])
+fi
+if test "x$enable_nacl_gc" = "xyes"; then
+ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
+ INSTRUMENT_CFLAG="-finstrument-for-thread-suspension"
+ else
+ # Not yet implemented
+ INSTRUMENT_CFLAG=""
+ fi
+ CPPFLAGS="$CPPFLAGS $INSTRUMENT_CFLAG -D__native_client_gc__"
+fi
+AC_SUBST(MONO_NACL_ALIGN_MASK_OFF)
+
+dnl **************
+dnl *** LLVM ***
+dnl **************
+
+AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=no)
+AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
+AC_ARG_ENABLE(llvm-version-check,[ --enable-llvm-version-check Check that the LLVM matches the version expected by mono], enable_llvm_version_check=$enableval, enable_llvm_version_check=no)
+
+AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
+
+if test "x$enable_llvm" = "xyes"; then
+ if test "x$with_llvm" != "x"; then
+ LLVM_CONFIG=$with_llvm/bin/llvm-config
+ if test ! -x $LLVM_CONFIG; then
+ AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
+ fi
+ else
+ AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
+ if test "x$LLVM_CONFIG" = "xno"; then
+ AC_MSG_ERROR([llvm-config not found.])
+ fi
+ fi
+
+ llvm_codegen="x86codegen"
+ case "$target" in
+ arm*)
+ llvm_codegen="armcodegen"
+ ;;
+ esac
+
+ # The output of --cflags seems to include optimizations flags too
+ LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
+ # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
+ # from LLVM classes.
+ LLVM_CXXFLAGS="`$LLVM_CONFIG --cxxflags` -fno-rtti"
+ LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
+ # This might include empty lines
+ LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
+ if test "x$host" != "x$target"; then
+ # No need for jit libs
+ LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter`
+ else
+ LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit mcjit $llvm_codegen`
+ fi
+ LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS -lstdc++"
+
+ expected_llvm_version="3.4svn-mono-mono/e656cac"
+
+ # Should be something like '2.6' or '2.7svn'
+ llvm_version=`$LLVM_CONFIG --version`
+ major_version=`echo $llvm_version | cut -c 1`
+ minor_version=`echo $llvm_version | cut -c 3`
+ llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
+ AC_MSG_CHECKING(LLVM version)
+ AC_MSG_RESULT($llvm_version)
+ if echo $llvm_version | grep -q 'mono'; then
+ if test "x$enable_llvm_version_check" == "xyes"; then
+ if test "$llvm_version" != "$expected_llvm_version"; then
+ AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
+ fi
+ fi
+ if test "x$llvm_api_version" = "x"; then
+ LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
+ LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
+ else
+ LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
+ LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
+ fi
+ else
+ AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
+ fi
+
+ AC_DEFINE_UNQUOTED(LLVM_MAJOR_VERSION, $major_version, [Major version of LLVM libraries])
+ AC_DEFINE_UNQUOTED(LLVM_MINOR_VERSION, $minor_version, [Minor version of LLVM libraries])
+ AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraties])
+
+ # Have to pass these on the command line since mini-llvm-cpp.h already includes
+ # llvm's config.h
+ LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_MAJOR_VERSION=$major_version -DLLVM_MINOR_VERSION=$minor_version"
+
+ AC_SUBST(LLVM_CFLAGS)
+ AC_SUBST(LLVM_CXXFLAGS)
+ AC_SUBST(LLVM_LIBS)
+ AC_SUBST(LLVM_LDFLAGS)
+ AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
+fi
+
+AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
+if test "x$enable_loadedllvm" = "xyes"; then
+ AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
+fi
+AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
+
+TARGET="unknown"
+ACCESS_UNALIGNED="yes"
+
+JIT_SUPPORTED=no
+INTERP_SUPPORTED=no
+LIBC="libc.so.6"
+INTL="libc.so.6"
+SQLITE="libsqlite.so.0"
+SQLITE3="libsqlite3.so.0"
+X11="libX11.so"
+GDKX11="libgdk-x11-2.0.so.0"
+GTKX11="libgtk-x11-2.0.so.0"
+XINERAMA="libXinerama.so"
+
+sizeof_register="SIZEOF_VOID_P"
+
+jit_wanted=true
+interp_wanted=false
+sgen_supported=false
+boehm_supported=true
+case "$host" in
+ mips*)
+ TARGET=MIPS;
+ arch_target=mips;
+ sgen_supported=true
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+
+ AC_MSG_CHECKING(for mips n32)
+ AC_TRY_COMPILE([],[
+ #if _MIPS_SIM != _ABIN32
+ #error Not mips n32
+ #endif
+ return 0;
+ ],[
+ AC_MSG_RESULT(yes)
+ sizeof_register=8
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ ;;
+ i*86-*-*)
+ TARGET=X86;
+ arch_target=x86;
+ JIT_SUPPORTED=yes
+ case $host_os in
+ solaris*)
+ LIBC="libc.so"
+ INTL="libintl.so"
+ if test "x$ac_cv_sizeof_void_p" = "x8"; then
+ TARGET=AMD64
+ arch_target=amd64
+ fi
+
+ # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
+ # int astruct __attribute__ ((visibility ("hidden")));
+ # void foo ()
+ # {
+ # void *p = &astruct;
+ # }
+ # gcc -fPIC --shared -o libfoo.so foo.c
+ # yields:
+ # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
+ # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
+ have_visibility_hidden=no
+ sgen_supported=true
+ ;;
+ mingw*|cygwin*)
+ sgen_supported=true
+ have_visibility_hidden=no
+ ;;
+ haiku*)
+ LIBC=libroot.so
+ ;;
+ linux*)
+ sgen_supported=true
+ AOT_SUPPORTED="yes"
+ ;;
+ darwin*)
+ sgen_supported=true
+ AOT_SUPPORTED="yes"
+ ;;
+ darwin*|openbsd*|freebsd*)
+ sgen_supported=true
+ ;;
+ esac
+ ;;
+ x86_64-*-* | amd64-*-*)
+ TARGET=AMD64;
+ arch_target=amd64;
+ JIT_SUPPORTED=yes
+ if test "x$ac_cv_sizeof_void_p" = "x4"; then
+ AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
+ sizeof_register=8
+ fi
+ case $host_os in
+ linux*)
+ sgen_supported=true
+ AOT_SUPPORTED="yes"
+ ;;
+ darwin*|openbsd*|freebsd*)
+ sgen_supported=true
+ ;;
+ esac
+ case "$host" in
+ x86_64-*-nacl*)
+ AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
+ sizeof_register=8
+ ;;
+ esac
+ ;;
+ ia64-*-*)
+ TARGET=IA64
+ arch_target=ia64
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+ LIBC="libc.so.6.1"
+ INTL="libc.so.6.1"
+ AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
+ libmono_ldflags="-lunwind"
+ ;;
+ sparc*-*-*)
+ if test "x$ac_cv_sizeof_void_p" = "x8"; then
+ TARGET=SPARC64
+ else
+ TARGET=SPARC
+ fi
+ arch_target=sparc;
+ JIT_SUPPORTED=yes
+ ACCESS_UNALIGNED="no"
+ case $host_os in
+ linux*) ;;
+ *)
+ LIBC="libc.so"
+ INTL="libintl.so"
+ esac
+ if test x"$GCC" = xyes; then
+ # We don't support v8 cpus
+ CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
+ fi
+ if test x"$AR" = xfalse; then
+ AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
+ fi
+ sgen_supported=true
+ ;;
+ *-mingw*|*-*-cygwin*)
+ # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
+ have_visibility_hidden=no
+ INTL="intl"
+ ;;
+ macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
+ powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | powerpc-*-freebsd* )
+ if test "x$ac_cv_sizeof_void_p" = "x8"; then
+ TARGET=POWERPC64;
+ CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
+ CFLAGS="$CFLAGS -mminimal-toc"
+ else
+ TARGET=POWERPC;
+ CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
+ fi
+ arch_target=ppc;
+ JIT_SUPPORTED=yes
+ case $host_os in
+ linux*|darwin*)
+ sgen_supported=true
+ ;;
+ esac
+ ;;
+ arm*-darwin*)
+ TARGET=ARM;
+ arch_target=arm;
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+ CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
+ # libgc's gc_locks.h depends on this
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC"
+ sgen_supported=true
+ ;;
+ arm*-linux*)
+ TARGET=ARM;
+ arch_target=arm;
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+ sgen_supported=true
+ AOT_SUPPORTED="yes"
+ CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
+ ;;
+# TODO: make proper support for NaCl host.
+# arm*-*nacl)
+# TARGET=ARM;
+# arch_target=arm;
+# ACCESS_UNALIGNED="no"
+# JIT_SUPPORTED=yes
+# sgen_supported=true
+# AOT_SUPPORTED="no"
+# ;;
+ aarch64-*)
+ # https://lkml.org/lkml/2012/7/15/133
+ TARGET=ARM64
+ arch_target=arm64
+ JIT_SUPPORTED=yes
+ sgen_supported=true
+ boehm_supported=false
+ ;;
+ s390x-*-linux*)
+ TARGET=S390X;
+ arch_target=s390x;
+ ACCESS_UNALIGNED="yes"
+ JIT_SUPPORTED=yes
+ sgen_supported=true
+ CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
+ ;;
+esac
+
+HOST=$TARGET
+
+if test "x$host" != "x$target"; then
+ AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
+ enable_mcs_build=no
+ case "$target" in
+ arm*-darwin*)
+ TARGET=ARM;
+ arch_target=arm;
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+ CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
+ jit_wanted=true
+ # Can't use tls, since it depends on the runtime detection of tls offsets
+ # in mono-compiler.h
+ with_tls=pthread
+ ;;
+ powerpc64-ps3-linux-gnu)
+ TARGET=POWERPC64
+ arch_target=powerpc64
+ AC_DEFINE(TARGET_PS3, 1, [...])
+ # It would be better to just use TARGET_POWERPC64, but lots of code already
+ # uses this define
+ AC_DEFINE(__mono_ppc64__, 1, [...])
+ AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
+ sizeof_register=8
+ target_byte_order=G_BIG_ENDIAN
+ ;;
+
+ powerpc64-xbox360-linux-gnu)
+ TARGET=POWERPC64
+ arch_target=powerpc64
+ AC_DEFINE(TARGET_XBOX360, 1, [...])
+ # It would be better to just use TARGET_POWERPC64, but lots of code already
+ # uses this define
+ sizeof_register=8
+ target_byte_order=G_BIG_ENDIAN
+ ;;
+ x86_64-*-nacl)
+ TARGET=AMD64
+ arch_target=amd64
+ AC_DEFINE(TARGET_AMD64, 1, [...])
+ AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
+ sizeof_register=8
+ ;;
+# TODO: make proper support for NaCl target.
+# arm*-*nacl)
+# TARGET=ARM
+# arch_target=arm
+# AC_DEFINE(TARGET_ARM, 1, [...])
+# ACCESS_UNALIGNED="no"
+# JIT_SUPPORTED=yes
+# sizeof_register=4
+# CPPFLAGS="$CPPFLAGS \
+# -D__ARM_EABI__ \
+# -D__arm__ \
+# -D__portable_native_client__ \
+# -Dtimezone=_timezone \
+# -DDISABLE_SOCKETS \
+# -DDISABLE_ATTACH \
+# -DUSE_NEWLIB"
+# jit_wanted=true
+ # Can't use tls, since it depends on the runtime detection of tls offsets
+ # in mono-compiler.h
+# with_tls=pthread
+# ;;
+ i686-*-nacl)
+ TARGET=X86
+ arch_target=x86
+ AC_DEFINE(TARGET_X86, 1, [...])
+ sizeof_register=4
+ ;;
+ arm*-linux-*)
+ TARGET=ARM;
+ arch_target=arm;
+ AC_DEFINE(TARGET_ARM, 1, [...])
+ AC_DEFINE(TARGET_ANDROID, 1, [...])
+ ACCESS_UNALIGNED="no"
+ JIT_SUPPORTED=yes
+ CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
+ jit_wanted=true
+ # 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
+ armv7l-unknown-linux-gnueabi*)
+ # TEGRA
+ CPPFLAGS="$CPPFLAGS"
+ ;;
+ armv5-*-linux-androideabi*)
+ CPPFLAGS="$CPPFLAGS"
+ ;;
+ esac
+ ;;
+ aarch64-*)
+ TARGET=ARM64
+ JIT_SUPPORTED=yes
+ jit_wanted=true
+ ;;
+ *)
+ AC_MSG_ERROR([Cross compiling is not supported for target $target])
+ esac
+fi
+
+case "$TARGET" in
+X86)
+ AC_DEFINE(TARGET_X86, 1, [...])
+ ;;
+AMD64)
+ AC_DEFINE(TARGET_AMD64, 1, [...])
+ ;;
+ARM)
+ AC_DEFINE(TARGET_ARM, 1, [...])
+ ;;
+ARM64)
+ AC_DEFINE(TARGET_ARM64, 1, [...])
+ ;;
+POWERPC)
+ AC_DEFINE(TARGET_POWERPC, 1, [...])
+ ;;
+POWERPC64)
+ AC_DEFINE(TARGET_POWERPC, 1, [...])
+ AC_DEFINE(TARGET_POWERPC64, 1, [...])
+ ;;
+S390X)
+ AC_DEFINE(TARGET_S390X, 1, [...])
+ ;;
+MIPS)
+ AC_DEFINE(TARGET_MIPS, 1, [...])
+ ;;
+IA64)
+ AC_DEFINE(TARGET_IA64, 1, [...])
+ ;;
+SPARC)
+ AC_DEFINE(TARGET_SPARC, 1, [...])
+ ;;
+SPARC64)
+ AC_DEFINE(TARGET_SPARC64, 1, [...])
+ ;;
+esac
+
+dnl Use GCC atomic ops if they work on the target.
+if test x$GCC = "xyes"; then
+ case $TARGET in
+ X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
+ AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
+ ;;
+ esac
+fi
+
+if test "x$target_mach" = "xyes"; then
+ if test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
+ AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
+ else
+ AC_TRY_COMPILE([#include "TargetConditionals.h"],[
+ #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
+ #error fail this for ios
+ #endif
+ return 0;
+ ], [
+ AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
+ ], [
+ AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
+ CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
+ ])
+ fi
+ AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
+fi
+
+if test "x$sizeof_register" = "x4"; then
+ AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
+elif test "x$sizeof_register" = "x8"; then
+ AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
+else
+ AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
+fi
+
+if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
+ AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
+elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
+ AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
+else
+ AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
+fi
+
+if test "x$have_visibility_hidden" = "xyes"; then
+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
+fi
+
+if test "x$have_deprecated" = "xyes"; then
+ AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
+fi
+
+dnl
+dnl Simple Generational checks (sgen)
+dnl
+if $sgen_supported; then
+ build_sgen_default=yes
+else
+ build_sgen_default=no
+fi
+SGEN_DEFINES=
+AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=$build_sgen_default])
+if test x$buildsgen = xyes; then
+ if $sgen_supported; then
+ SGEN_DEFINES="-DHAVE_SGEN_GC -DHAVE_MOVING_COLLECTOR"
+ gc_msg="sgen and $gc_msg"
+ else
+ buildsgen=no
+ AC_MSG_WARN("Sgen is not supported on this platform")
+ fi
+fi
+AC_SUBST(SGEN_DEFINES)
+AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
+
+USEJIT=false
+if test x$JIT_SUPPORTED = xyes; then
+ if $jit_wanted; then
+ USEJIT=true
+ jit_status="Building and using the JIT"
+ else
+ if $interp_wanted; then
+ jit_status="Building the JIT, defaulting to the interpreter"
+ else
+ AC_ERROR(No JIT or interpreter support available or selected.)
+ fi
+ fi
+else
+ if test x$interp_wanted = xtrue; then
+ jit_status="interpreter"
+ else
+ AC_ERROR(No JIT or interpreter support available or selected.)
+ fi
+fi
+
+AM_CONDITIONAL(USE_JIT, test x$USEJIT = xtrue)
+
+libsuffix=".so"
+
+case "$host" in
+ *-*-darwin*)
+ libsuffix=".dylib"
+ LIBC="libc.dylib"
+ INTL="libintl.dylib"
+ SQLITE="libsqlite.0.dylib"
+ SQLITE3="libsqlite3.0.dylib"
+ X11="libX11.dylib"
+ GDKX11="libgdk-x11-2.0.dylib"
+ GTKX11="libgtk-x11-2.0.dylib"
+ ;;
+ *-*-*netbsd*)
+ LIBC="libc.so.12"
+ INTL="libintl.so.0"
+ ;;
+ *-*-*freebsd*)
+ LIBC="libc.so"
+ INTL="libintl.so"
+ SQLITE="libsqlite.so"
+ SQLITE3="libsqlite3.so"
+ ;;
+ *-*-*openbsd*)
+ LIBC="libc.so"
+ INTL="libintl.so"
+ SQLITE="libsqlite.so"
+ SQLITE3="libsqlite3.so"
+ ;;
+ *-*-*linux*)
+ AC_PATH_X
+ dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
+ AC_MSG_CHECKING(for the soname of libX11.so)
+ for i in $x_libraries $dlsearch_path; do
+ for r in 4 5 6; do
+ if test -f $i/libX11.so.$r; then
+ X11=libX11.so.$r
+ AC_MSG_RESULT($X11)
+ fi
+ done
+ done
+
+ if test "x$X11" = "xlibX11.so"; then
+ AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? Assuming libX11.so.6...]);
+ X11=libX11.so.6
+ fi
+ AC_MSG_CHECKING(for the soname of libXinerama.so)
+ for i in $x_libraries $dlsearch_path; do
+ for r in 1 2 3; do
+ if test -f $i/libXinerama.so.$r; then
+ XINERAMA=libXinerama.so.$r
+ AC_MSG_RESULT($XINERAMA)
+ fi
+ done
+ done
+ if test "x$XINERAMA" = "xlibXinerama.so"; then
+ AC_MSG_WARN([Could not find Xinerama development libs. Support for multiple monitors might not work...]);
+ fi
+ ;;
+esac
+
+
+AC_SUBST(libsuffix)
+
+if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
+ if test "x$with_tls" = "x__thread"; then
+ #
+ # On some linux distributions, TLS works in executables, but linking
+ # against a shared library containing TLS fails with:
+ # undefined reference to `__tls_get_addr'
+ #
+ rm -f conftest.c conftest.so conftest
+ echo "static __thread int foo; int main () { foo = 5; return 0; }" > conftest.c
+ $CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
+ $CC -o conftest conftest.so > /dev/null 2>&1
+ if test ! -f conftest; then
+ AC_MSG_WARN([Disabling usage of __thread.]);
+ with_tls=pthread
+ fi
+ rm -f conftest.c conftest.so conftest
+ fi
+fi
+
+AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
+if test "x$icall_symbol_map" = "xyes"; then
+ AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
+fi
+
+AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
+if test "x$icall_export" = "xyes"; then
+ AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
+fi
+
+AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
+if test "x$icall_tables" = "xno"; then
+ AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
+fi
+
+if test "x$with_tls" = "x__thread"; then
+ AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
+ # Pass the information to libgc
+ CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
+ AC_MSG_CHECKING(if the tls_model attribute is supported)
+ AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+fi
+
+if test ${TARGET} = ARM; then
+ dnl ******************************************
+ dnl *** Check to see what FPU is available ***
+ dnl ******************************************
+ AC_MSG_CHECKING(which FPU to use)
+
+ #
+ # This is a bit tricky:
+ #
+ # if (__ARM_PCS_VFP) {
+ # /* mfloat-abi=hard == VFP with hard ABI */
+ # } elif (!__SOFTFP__) {
+ # /* mfloat-abi=softfp == VFP with soft ABI */
+ # } else {
+ # /* mfloat-abi=soft == no VFP */
+ # }
+ #
+ # The exception is iOS (w/ GCC) where none of the above
+ # are defined (but iOS always uses the 'softfp' ABI).
+ #
+ # No support for FPA.
+ #
+
+ fpu=NONE
+
+ # iOS GCC always uses the 'softfp' ABI.
+ if test x"$GCC" = xyes && test x$platform_darwin = xyes; then
+ fpu=VFP
+ fi
+
+ # Are we using the 'hard' ABI?
+ if test x$fpu = xNONE; then
+ AC_TRY_COMPILE([], [
+ #ifndef __ARM_PCS_VFP
+ #error "Float ABI is not 'hard'"
+ #endif
+ return 0;
+ ], [
+ fpu=VFP_HARD
+ ], [
+ fpu=NONE
+ ])
+ fi
+
+ # No 'hard' ABI. 'soft' or 'softfp'?
+ if test x$fpu = xNONE; then
+ AC_TRY_COMPILE([], [
+ #ifdef __SOFTFP__
+ #error "Float ABI is not 'softfp'"
+ #endif
+ return 0;
+ ], [
+ fpu=VFP
+ ], [
+ fpu=NONE
+ ])
+ fi
+
+ AC_MSG_RESULT($fpu)
+ CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
+ unset fpu
+
+ dnl *********************************************
+ dnl *** Check which ARM version(s) we can use ***
+ dnl *********************************************
+ AC_MSG_CHECKING(which ARM version to use)
+
+ AC_TRY_COMPILE([], [
+ #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
+ #error Not on ARM v5.
+ #endif
+ return 0;
+ ], [
+ arm_v5=yes
+
+ arm_ver=ARMv5
+ ], [])
+
+ AC_TRY_COMPILE([], [
+ #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
+ #error Not on ARM v6.
+ #endif
+ return 0;
+ ], [
+ arm_v5=yes
+ arm_v6=yes
+
+ arm_ver=ARMv6
+ ], [])
+
+ AC_TRY_COMPILE([], [
+ #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
+ #error Not on ARM v7.
+ #endif
+ return 0;
+ ], [
+ arm_v5=yes
+ arm_v6=yes
+ arm_v7=yes
+
+ arm_ver=ARMv7
+ ], [])
+
+ AC_MSG_RESULT($arm_ver)
+
+ if test x$arm_v5 = xyes; then
+ AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
+ fi
+
+ if test x$arm_v6 = xyes; then
+ AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
+ fi
+
+ if test x$arm_v7 = xyes; then
+ AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
+ CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
+ fi
+fi
+
+if test ${TARGET} = ARM; then
+ if test "x${with_jumptables}" = "xyes"; then
+ AC_DEFINE(USE_JUMP_TABLES, 1, Use jump tables in JIT)
+ fi
+fi
+
+if test ${TARGET} = unknown; then
+ CPPFLAGS="$CPPFLAGS -DNO_PORT"
+ AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
+fi
+
+if test ${ACCESS_UNALIGNED} = no; then
+ CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
+fi
+
+case "x$gc" in
+ xincluded)
+ # Pass CPPFLAGS to libgc configure
+ # We should use a separate variable for this to avoid passing useless and
+ # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
+ # This should be executed late so we pick up the final version of CPPFLAGS
+ # The problem with this approach, is that during a reconfigure, the main
+ # configure scripts gets invoked with these arguments, so we use separate
+ # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
+ TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
+ if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
+ TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
+ fi
+ # Don't pass -finstrument-for-thread-suspension in,
+ # if these are instrumented it will be very bad news
+ # (infinite recursion, undefined parking behavior, etc)
+ TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
+ ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
+ AC_CONFIG_SUBDIRS(libgc)
+ ;;
+esac
+
+AC_ARG_WITH(profile2, [ --with-profile2=yes,no If you want to install the 2.0/3.5 FX (defaults to yes)], [], [with_profile2=yes])
+AC_ARG_WITH(profile4, [ --with-profile4=yes,no If you want to install the 4.0 FX (defaults to yes)], [], [with_profile4=yes])
+AC_ARG_WITH(profile4_5,[ --with-profile4_5=yes,no If you want to install the 4.5 FX (defaults to yes)], [], [with_profile4_5=yes])
+AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=no])
+AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no,only If you want to build the MonoTouch assemblies (defaults to no)], [], [with_monotouch=no])
+AC_ARG_WITH(xammac, [ --with-xammac=yes,no,only If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=no])
+
+OPROFILE=no
+AC_ARG_WITH(oprofile,[ --with-oprofile=no,<oprofile install dir> Enable oprofile support (defaults to no)],[
+ if test x$with_oprofile != xno; then
+ oprofile_include=$with_oprofile/include
+ if test ! -f $oprofile_include/opagent.h; then
+ AC_MSG_ERROR([oprofile include file not found at $oprofile_include/opagent.h])
+ fi
+ OPROFILE=yes
+ OPROFILE_CFLAGS="-I$oprofile_include"
+ OPROFILE_LIBS="-L$with_oprofile/lib/oprofile -lopagent"
+ AC_DEFINE(HAVE_OPROFILE,1,[Have oprofile support])
+ fi
+])
+
+MALLOC_MEMPOOLS=no
+AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
+ if test x$with_malloc_mempools = xyes; then
+ MALLOC_MEMPOOLS=yes
+ AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
+ fi
+])
+
+
+DISABLE_MCS_DOCS=no
+AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
+ if test x$with_mcs_docs != xyes; then
+ DISABLE_MCS_DOCS=yes
+ fi
+])
+if test x$with_profile4 != xyes; then
+ DISABLE_MCS_DOCS=yes
+fi
+
+AC_ARG_WITH(lazy_gc_thread_creation, [ --with-lazy-gc-thread-creation=yes|no Enable lazy runtime thread creation, embedding host must do it explicitly (defaults to no)],[
+ if test x$with_lazy_gc_thread_creation != xno ; then
+ AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
+ fi
+], [with_lazy_gc_thread_creation=no])
+
+AC_CHECK_HEADER([malloc.h],
+ [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
+ [Define to 1 if you have /usr/include/malloc.h.])],,)
+
+if test x"$GCC" = xyes; then
+ # Implicit function declarations are not 64 bit safe
+ # Do this late, since this causes lots of configure tests to fail
+ CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
+ # jay has a lot of implicit declarations
+ JAY_CFLAGS="-Wno-implicit-function-declaration"
+fi
+
+# When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
+# instead of libmono-static.a
+if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
+ LIBMONO_LA=libmini-static.la
+else
+ if test x$buildsgen = xyes; then
+ LIBMONO_LA=libmonosgen-$API_VER.la
+ else
+ LIBMONO_LA=libmonoboehm-$API_VER.la
+ fi
+fi
+AC_SUBST(LIBMONO_LA)
+
+dnl
+dnl Consistency settings
+dnl
+if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
+ DISABLE_MCS_DOCS=yes
+ with_profile2=no
+ with_profile4=no
+ with_profile4_5=no
+ with_monodroid=no
+ with_monotouch=no
+ with_xammac=no
+fi
+
+if test x$DISABLE_MCS_DOCS = xyes; then
+ docs_dir=""
+else
+ docs_dir=docs
+fi
+AC_SUBST(docs_dir)
+
+## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
+AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
+
+AM_CONDITIONAL(HAVE_OPROFILE, test x$OPROFILE = xyes)
+AC_SUBST(OPROFILE_CFLAGS)
+AC_SUBST(OPROFILE_LIBS)
+
+libmono_ldflags="$libmono_ldflags $LIBS"
+
+AM_CONDITIONAL(INSTALL_2_0, [test "x$with_profile2" = xyes])
+AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
+AM_CONDITIONAL(INSTALL_4_5, [test "x$with_profile4_5" = xyes])
+AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
+AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
+AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
+AM_CONDITIONAL(ONLY_MONOTOUCH, [test "x$with_monotouch" = "xonly"])
+AM_CONDITIONAL(ONLY_XAMMAC, [test "x$with_xammac" = "xonly"])
+
+AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
+AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
+AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
+AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
+AM_CONDITIONAL(X86, test x$TARGET = xX86)
+AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
+AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
+AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
+AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
+AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
+AM_CONDITIONAL(ARM, test x$TARGET = xARM)
+AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
+AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
+AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
+AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
+AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
+AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
+AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
+
+AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
+AM_CONDITIONAL(INTERP_SUPPORTED, test x$interp_wanted = xtrue)
+AM_CONDITIONAL(INCLUDED_LIBGC, test x$gc = xincluded)
+
+AC_SUBST(LIBC)
+AC_SUBST(INTL)
+AC_SUBST(SQLITE)
+AC_SUBST(SQLITE3)
+AC_SUBST(X11)
+AC_SUBST(GDKX11)
+AC_SUBST(GTKX11)
+AC_SUBST(XINERAMA)
+AC_DEFINE_UNQUOTED(ARCHITECTURE,"$arch_target",[The architecture this is running on])
+AC_SUBST(arch_target)
+AC_SUBST(CFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(LDFLAGS)
+
+mono_build_root=`pwd`
+AC_SUBST(mono_build_root)
+
+if test x$USEJIT = xtrue; then
+ mono_runtime=mono/mini/mono
+else
+ mono_runtime=mono/interpreter/mint
+fi
+AC_SUBST(mono_runtime)
+
+mono_cfg_root=$mono_build_root/runtime
+if test x$host_win32 = xyes; then
+ if test "x$cross_compiling" = "xno"; then
+ mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
+ else
+ mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
+ fi
+else
+ mono_cfg_dir=$mono_cfg_root/etc
+fi
+AC_SUBST(mono_cfg_dir)
+
+AC_CONFIG_FILES([po/mcs/Makefile.in])
+
+AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
+AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
+ cd runtime/etc/mono/1.0
+ rm -f machine.config
+ $LN_S $reldir/data/net_1_1/machine.config machine.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
+ cd runtime/etc/mono/2.0
+ rm -f machine.config
+ $LN_S $reldir/data/net_2_0/machine.config machine.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
+ cd runtime/etc/mono/2.0
+ rm -f web.config
+ $LN_S $reldir/data/net_2_0/web.config web.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
+[ depth=../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/
+ cd runtime/etc/mono/
+ rm -f browscap.ini
+ $LN_S $reldir/data/browscap.ini browscap.ini
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
+[ depth=../../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
+ cd runtime/etc/mono/2.0/Browsers
+ rm -f Compat.browser
+ $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
+[ depth=../../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
+ cd runtime/etc/mono/4.0/Browsers
+ rm -f Compat.browser
+ $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
+[ depth=../../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
+ cd runtime/etc/mono/4.5/Browsers
+ rm -f Compat.browser
+ $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
+ cd runtime/etc/mono/4.0
+ rm -f machine.config
+ $LN_S $reldir/data/net_4_0/machine.config machine.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
+ cd runtime/etc/mono/4.0
+ rm -f web.config
+ $LN_S $reldir/data/net_4_0/web.config web.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+ cd runtime/etc/mono/4.5
+ rm -f machine.config
+ $LN_S $reldir/data/net_4_5/machine.config machine.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
+[ depth=../../../..
+ case $srcdir in
+ [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+ .) reldir=$depth ;;
+ *) reldir=$depth/$srcdir ;;
+ esac
+ $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+ cd runtime/etc/mono/4.5
+ rm -f web.config
+ $LN_S $reldir/data/net_4_5/web.config web.config
+ cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
+
+AC_OUTPUT([
+Makefile
+mono-core.spec
+mono-uninstalled.pc
+scripts/mono-find-provides
+scripts/mono-find-requires
+mono/Makefile
+mono/utils/Makefile
+mono/metadata/Makefile
+mono/dis/Makefile
+mono/cil/Makefile
+mono/arch/Makefile
+mono/arch/x86/Makefile
+mono/arch/amd64/Makefile
+mono/arch/ppc/Makefile
+mono/arch/sparc/Makefile
+mono/arch/s390x/Makefile
+mono/arch/arm/Makefile
+mono/arch/arm64/Makefile
+mono/arch/ia64/Makefile
+mono/arch/mips/Makefile
+mono/interpreter/Makefile
+mono/tests/Makefile
+mono/tests/tests-config
+mono/tests/assemblyresolve/Makefile
+mono/tests/cas/Makefile
+mono/tests/cas/assembly/Makefile
+mono/tests/cas/demand/Makefile
+mono/tests/cas/inheritance/Makefile
+mono/tests/cas/linkdemand/Makefile
+mono/tests/cas/threads/Makefile
+mono/tests/gc-descriptors/Makefile
+mono/unit-tests/Makefile
+mono/benchmark/Makefile
+mono/monograph/Makefile
+mono/io-layer/Makefile
+mono/mini/Makefile
+mono/profiler/Makefile
+m4/Makefile
+ikvm-native/Makefile
+scripts/Makefile
+man/Makefile
+docs/Makefile
+data/Makefile
+data/net_2_0/Makefile
+data/net_4_0/Makefile
+data/net_4_5/Makefile
+data/net_2_0/Browsers/Makefile
+data/net_4_0/Browsers/Makefile
+data/net_4_5/Browsers/Makefile
+data/mint.pc
+data/mono-2.pc
+data/monosgen-2.pc
+data/mono.pc
+data/mono-cairo.pc
+data/mono-nunit.pc
+data/mono-options.pc
+data/mono-lineeditor.pc
+data/monodoc.pc
+data/dotnet.pc
+data/dotnet35.pc
+data/wcf.pc
+data/cecil.pc
+data/system.web.extensions_1.0.pc
+data/system.web.extensions.design_1.0.pc
+data/system.web.mvc.pc
+data/system.web.mvc2.pc
+data/system.web.mvc3.pc
+data/aspnetwebstack.pc
+data/reactive.pc
+samples/Makefile
+support/Makefile
+data/config
+tools/Makefile
+tools/locale-builder/Makefile
+tools/sgen/Makefile
+runtime/Makefile
+msvc/Makefile
+po/Makefile
+])
+
+# Update all submodules recursively to ensure everything is checked out
+$srcdir/scripts/update_submodules
+
+if test x$host_win32 = xyes; then
+ # Get rid of 'cyg' prefixes in library names
+ sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
+ # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
+ # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
+ # executable doesn't work...
+ sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
+fi
+
+if test x$platform_darwin = xyes; then
+ # This doesn't seem to be required and it slows down parallel builds
+ sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
+fi
+
+(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix='${prefix}' ;;
+ esac
+
+ #
+ # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
+ # any existing config.make. This allows people to share the same source tree
+ # with different build directories, one native and one cross
+ #
+ if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
+
+ test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
+
+ echo "prefix=$prefix" > $mcs_topdir/build/config.make
+ echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
+ echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
+ echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
+ echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
+ echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
+ echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
+ echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
+
+ case $INSTALL in
+ [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
+ *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
+ esac
+
+ echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
+
+ export VERSION
+ [myver=$($AWK 'BEGIN {
+ split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
+ if(length(vsplit [1]) > 4) {
+ split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
+ }
+ print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
+ }')]
+
+ echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
+
+ if test x$platform_darwin = xyes; then
+ echo "PLATFORM = darwin" >> $mcs_topdir/build/config.make
+ fi
+
+ if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
+ enable_system_aot=yes
+ fi
+
+ if test "x$enable_loadedllvm" = "xyes"; then
+ # This seems to fail on the x86 buildbots
+ enable_system_aot=no
+ fi
+
+ if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
+ echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
+ fi
+
+ if test x$DISABLE_MCS_DOCS = xyes; then
+ echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
+ fi
+
+ if test x$has_extension_module != xno; then
+ echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
+ fi
+
+ default_profile=net_2_0
+ if test -z "$INSTALL_4_0_TRUE"; then :
+ default_profile=net_4_0
+ fi
+ if test -z "$INSTALL_MONODROID_TRUE"; then :
+ default_profile=monodroid
+ fi
+ if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
+ default_profile=monotouch
+ fi
+ if test -z "$INSTALL_XAMMAC_TRUE"; then :
+ default_profile=xammac
+ fi
+ if test -z "$INSTALL_4_5_TRUE"; then :
+ default_profile=net_4_5
+ fi
+
+ echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
+
+ if test "x$test_bcl_opt" = "xyes"; then
+ echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
+ fi
+
+ fi
+
+ # if we have an olive folder, override the default settings
+ if test -d $olivedir; then
+
+ if test x$cross_compiling = xno && test x$enable_olive_build != xno; then
+
+ test -w $srcdir/$olivedir/build || chmod +w $srcdir/$olivedir/build
+
+ echo "prefix=$prefix" > $srcdir/$olivedir/build/config.make
+ echo "exec_prefix=$exec_prefix" >> $srcdir/$olivedir/build/config.make
+ echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$olivedir/build/config.make
+ echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$olivedir/build/config.make
+ echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$olivedir/build/config.make
+ echo "MONO_VERSION = $myver" >> $srcdir/$olivedir/build/config.make
+ fi
+ fi
+
+)
+
+libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
+
+echo "
+ mcs source: $mcsdir
+
+ Engine:
+ GC: $gc_msg
+ TLS: $with_tls
+ SIGALTSTACK: $with_sigaltstack
+ Engine: $jit_status
+ oprofile: $OPROFILE
+ BigArrays: $enable_big_arrays
+ DTrace: $enable_dtrace
+ LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
+
+ Libraries:
+ .NET 2.0/3.5: $with_profile2
+ .NET 4.0: $with_profile4
+ .NET 4.5: $with_profile4_5
+ MonoDroid: $with_monodroid
+ MonoTouch: $with_monotouch
+ Xamarin.Mac: $with_xammac
+ JNI support: $jdk_headers_found
+ libgdiplus: $libgdiplus_msg
+ zlib: $zlib_msg
+ $disabled
+"
+if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
+ AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)
+fi
+++ /dev/null
-# Process this file with autoconf to produce a configure script.
-#AC_PREREQ([2.62])
-
-AC_INIT(mono, [3.4.1],
- [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
-
-AC_CONFIG_SRCDIR([README.md])
-AC_CONFIG_MACRO_DIR([m4])
-AC_CANONICAL_SYSTEM
-AC_CANONICAL_HOST
-
-# Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
-# The extra brackets are to foil regex-based scans.
-m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
-
-AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects])
-AC_CONFIG_HEADERS([config.h])
-AM_MAINTAINER_MODE
-
-API_VER=2.0
-AC_SUBST(API_VER)
-
-AC_PROG_LN_S
-
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-case $host_os in
-*cygwin* )
- echo "Run configure using ./configure --host=i686-pc-mingw32"
- exit 1
-esac
-
-# In case of cygwin, override LN_S, irrespective of what it determines.
-# The build uses cygwin, but the actual runtime doesn't.
-case $host_os in
-*cygwin* ) LN_S='cp -p';;
-esac
-
-dnl
-dnl libgc checks
-dnl
-
-gc_headers=no
-gc=included
-gc_msg="included Boehm"
-use_included_gc=no
-libgc_configure_args=
-
-if test -d $srcdir/libgc ; then
- gc_default=included
-else
- gc_default=boehm
-fi
-
-# These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
-# libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
-CPPFLAGS_FOR_LIBGC=$CPPFLAGS
-CFLAGS_FOR_LIBGC=$CFLAGS
-CPPFLAGS_FOR_EGLIB=$CPPFLAGS
-CFLAGS_FOR_EGLIB=$CFLAGS
-
-#
-# These are the flags that need to be stored in the mono.pc file for
-# compiling code that will embed Mono
-#
-libmono_cflags=""
-libmono_ldflags=""
-AC_SUBST(libmono_cflags)
-AC_SUBST(libmono_ldflags)
-
-# Variable to have relocatable .pc files (lib, or lib64)
-reloc_libdir=`basename ${libdir}`
-AC_SUBST(reloc_libdir)
-
-dnl if linker handles the version script
-no_version_script=no
-
-# Set to yes if Unix sockets cannot be created in an anonymous namespace
-need_link_unlink=no
-
-#Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
-extra_runtime_ldflags=""
-
-# Thread configuration inspired by sleepycat's db
-AC_MSG_CHECKING([host platform characteristics])
-libgc_threads=no
-has_dtrace=no
-parallel_mark=yes
-ikvm_native=yes
-
-case "$host" in
- powerpc*-*-linux*)
- # https://bugzilla.novell.com/show_bug.cgi?id=504411
- disable_munmap=yes
- ;;
-esac
-
-host_win32=no
-target_win32=no
-platform_android=no
-platform_darwin=no
-case "$host" in
- *-mingw*|*-*-cygwin*)
- AC_DEFINE(HOST_WIN32,1,[Host Platform is Win32])
- AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
- AC_DEFINE(PLATFORM_NO_SYMLINKS,1,[This platform does not support symlinks])
- host_win32=yes
- mono_cv_clang=no
- if test "x$cross_compiling" = "xno"; then
- target_win32=yes
- if test "x$host" == "x$build" -a "x$host" == "x$target"; then
- AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32])
- fi
- else
- target_win32=yes
- AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32/MinGW])
- AC_DEFINE(MINGW_CROSS_COMPILE,1,[Cross-compiling using MinGW])
- fi
- HOST_CC="gcc"
- # Windows 2000 is required that includes Internet Explorer 5.01
- CPPFLAGS="$CPPFLAGS -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
- LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32"
- libmono_cflags="-mms-bitfields -mwindows"
- libmono_ldflags="-mms-bitfields -mwindows"
- libdl=
- libgc_threads=win32
- gc_default=included
- with_sigaltstack=no
- LN_S=cp
- # This forces libgc to use the DllMain based thread registration code on win32
- libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
- ;;
- *-*-*netbsd*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
- libmono_cflags="-D_REENTRANT"
- LDFLAGS="$LDFLAGS -pthread"
- CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
- libmono_ldflags="-pthread"
- need_link_unlink=yes
- libdl="-ldl"
- libgc_threads=pthreads
- with_sigaltstack=no
- use_sigposix=yes
- ;;
- *-*-*freebsd*)
- host_win32=no
- if test "x$PTHREAD_CFLAGS" = "x"; then
- CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
- libmono_cflags=
- else
- CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
- libmono_cflags="$PTHREAD_CFLAGS"
- fi
- if test "x$PTHREAD_LIBS" = "x"; then
- LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
- libmono_ldflags="-pthread"
- else
- LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
- libmono_ldflags="$PTHREAD_LIBS"
- fi
- CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
- need_link_unlink=yes
- AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
- libdl=
- libgc_threads=pthreads
- use_sigposix=yes
- has_dtrace=yes
- ;;
- *-*-*openbsd*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DPLATFORM_BSD -D_REENTRANT -DUSE_MMAP"
- if test "x$disable_munmap" != "xyes"; then
- CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
- fi
- libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
- LDFLAGS="$LDFLAGS -pthread"
- need_link_unlink=yes
- AC_DEFINE(PTHREAD_POINTER_ID)
- libdl=
- gc_default=boehm
- libgc_threads=pthreads
- with_sigaltstack=no
- use_sigposix=yes
- ;;
- *-*-linux-android*)
- host_win32=no
- platform_android=yes
- AC_DEFINE(PLATFORM_ANDROID,1,[Targeting the Android platform])
- AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
-
- CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
- if test "x$disable_munmap" != "xyes"; then
- CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
- fi
- libmono_cflags="-D_REENTRANT"
- libdl="-ldl"
- libgc_threads=pthreads
- use_sigposix=yes
-
- with_tls=pthread
- with_sigaltstack=no
- with_static_mono=no
-
- # Android doesn't support boehm, as it's missing <link.h>
- support_boehm=no
- with_gc=sgen
-
- # isinf(3) requires -lm; see isinf check below
- LDFLAGS="$LDFLAGS -lm"
-
- # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
- # PAGE_SIZE; breaks mono/io-layer/collection.c
- # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
- CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
- CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
-
- # The configure check can't detect this
- AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
-
- # to bypass the underscore linker check, can't work when cross-compiling
- mono_cv_uscore=yes
- mono_cv_clang=no
- ;;
- *-*-linux*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
- if test "x$disable_munmap" != "xyes"; then
- CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
- fi
- libmono_cflags="-D_REENTRANT"
- libdl="-ldl"
- libgc_threads=pthreads
- use_sigposix=yes
- if test "x$cross_compiling" != "xno"; then
- # to bypass the underscore linker check, not
- # available during cross-compilation
- mono_cv_uscore=no
- fi
- case "$host" in
- aarch64-*)
- support_boehm=no
- with_gc=sgen
- ;;
- esac
- ;;
- *-*-nacl*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
- if test "x$disable_munmap" != "xyes"; then
- CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
- fi
- libmono_cflags="-D_REENTRANT"
- libdl=
- libgc_threads=pthreads
- gc_default=boehm
- use_sigposix=yes
- ikvm_native=no
- AC_DEFINE(DISABLE_SOCKETS,1,[Disable sockets support])
- AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
- ;;
- *-*-hpux*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
- # +ESdbgasm only valid on bundled cc on RISC
- # silently ignored for ia64
- if test $GCC != "yes"; then
- CFLAGS="$CFLAGS +ESdbgasm"
- # Arrange for run-time dereferencing of null
- # pointers to produce a SIGSEGV signal.
- LDFLAGS="$LDFLAGS -z"
- fi
- CFLAGS="$CFLAGS +ESdbgasm"
- LDFLAGS="$LDFLAGS -z"
- libmono_cflags="-D_REENTRANT"
- libmono_ldflags="-lpthread"
- libgc_threads=pthreads
- need_link_unlink=yes
- use_sigposix=yes
- ;;
- *-*-solaris*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DPLATFORM_SOLARIS"
- need_link_unlink=yes
- libmono_cflags="-D_REENTRANT"
- libgc_threads=pthreads
- # This doesn't seem to work on solaris/x86, but the configure test runs
- with_tls=pthread
- has_dtrace=yes
- use_sigposix=yes
- enable_solaris_tar_check=yes
- ;;
- *-*-darwin*)
- parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
- host_win32=no
- platform_darwin=yes
- target_mach=yes
- CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS -DPLATFORM_MACOSX -DUSE_MMAP -DUSE_MUNMAP"
- CPPFLAGS="$CPPFLAGS -DGetCurrentProcess=MonoGetCurrentProcess -DGetCurrentThread=MonoGetCurrentThread -DCreateEvent=MonoCreateEvent"
- libmono_cflags="-D_THREAD_SAFE"
- need_link_unlink=yes
- AC_DEFINE(PTHREAD_POINTER_ID)
- AC_DEFINE(USE_MACH_SEMA, 1, [...])
- no_version_script=yes
- libdl=
- libgc_threads=pthreads
- has_dtrace=yes
- if test "x$cross_compiling" = "xyes"; then
- has_broken_apple_cpp=yes
- fi
- dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
- dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
- dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
- case "$host" in
- dnl Snow Leopard and newer config.guess reports as this
- i*86-*-darwin*)
- BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
- BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
- CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
- CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
- CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
- CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
- CPPFLAGS_FOR_EGLIB="$CPPFLAGS_FOR_EGLIB $BROKEN_DARWIN_CPPFLAGS"
- CFLAGS_FOR_EGLIB="$CFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS"
- ;;
- x*64-*-darwin*)
- ;;
- arm*-darwin*)
- has_dtrace=no
- ;;
- esac
- ;;
- *-*-haiku*)
- host_win32=no
- CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
- libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
- libdl=
- LIBS="$LIBS -lnetwork"
- need_link_unlink=yes
- AC_DEFINE(PTHREAD_POINTER_ID)
- libgc_threads=pthreads
- use_sigposix=yes
- ;;
- *)
- AC_MSG_WARN([*** Please add $host to configure.in checks!])
- host_win32=no
- libdl="-ldl"
- ;;
-esac
-AC_MSG_RESULT(ok)
-
-if test x$need_link_unlink = xyes; then
- AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
-fi
-
-AC_SUBST(extra_runtime_ldflags)
-AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
-AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
-AM_CONDITIONAL(PLATFORM_LINUX, echo x$target_os | grep -q linux)
-AM_CONDITIONAL(PLATFORM_DARWIN, test x$platform_darwin = xyes)
-AM_CONDITIONAL(PLATFORM_SIGPOSIX, test x$use_sigposix = xyes)
-AM_CONDITIONAL(PLATFORM_ANDROID, test x$platform_android = xyes)
-
-AC_CHECK_TOOL(CC, gcc, gcc)
-AC_PROG_CC
-AC_CHECK_TOOL(CXX, g++, g++)
-AC_PROG_CXX
-AM_PROG_AS
-AC_PROG_INSTALL
-AC_PROG_AWK
-AM_PROG_CC_C_O
-dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
-: ${CCAS='$(CC)'}
-# Set ASFLAGS if not already set.
-: ${CCASFLAGS='$(CFLAGS)'}
-AC_SUBST(CCAS)
-AC_SUBST(CCASFLAGS)
-
-# AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
-# GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
-if test "x$CXX" = "xg++"; then
- if test "x$GXX" != "xyes"; then
- # automake/libtool is so broken, it requires g++ even if the c++ sources
- # are inside automake conditionals
- AC_MSG_ERROR([You need to install g++])
- fi
-fi
-
-dnl may require a specific autoconf version
-dnl AC_PROG_CC_FOR_BUILD
-dnl CC_FOR_BUILD not automatically detected
-CC_FOR_BUILD=$CC
-CFLAGS_FOR_BUILD=$CFLAGS
-BUILD_EXEEXT=
-if test "x$cross_compiling" = "xyes"; then
- CC_FOR_BUILD=cc
- CFLAGS_FOR_BUILD=
- BUILD_EXEEXT=""
-fi
-AC_SUBST(CC_FOR_BUILD)
-AC_SUBST(CFLAGS_FOR_BUILD)
-AC_SUBST(HOST_CC)
-AC_SUBST(BUILD_EXEEXT)
-
-AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
-AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
-
-# Set STDC_HEADERS
-AC_HEADER_STDC
-AC_LIBTOOL_WIN32_DLL
-# This causes monodis to not link correctly
-#AC_DISABLE_FAST_INSTALL
-AM_PROG_LIBTOOL
-# Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
-DOLT
-
-export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-AC_SUBST(export_ldflags)
-
-# Test whenever ld supports -version-script
-AC_PROG_LD
-AC_PROG_LD_GNU
-if test "x$lt_cv_prog_gnu_ld" = "xno"; then
- no_version_script=yes
-fi
-
-AM_ICONV()
-
-AM_CONDITIONAL(NO_VERSION_SCRIPT, test x$no_version_script = xyes)
-
-AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h libproc.h)
-AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h)
-AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
- [], [], [#include <stddef.h>
- #include <sys/socket.h>
- #include <linux/socket.h>])
-
-AC_CHECK_HEADERS(sys/user.h, [], [],
-[
-#ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-])
-
-AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
-if test x$have_zlib = xyes; then
- AC_TRY_COMPILE([#include <zlib.h>], [
- #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
- return 0;
- #else
- #error No good zlib found
- #endif
- ],[
- AC_MSG_RESULT(Using system zlib)
- zlib_msg="system zlib"
- AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
- ],[
- AC_MSG_RESULT(Using embedded zlib)
- have_zlib=no
- zlib_msg="bundled zlib"
- ])
-fi
-
-AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
-AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
-
-# for mono/metadata/debug-symfile.c
-AC_CHECK_HEADERS(elf.h)
-
-# for support
-AC_CHECK_HEADERS(poll.h)
-AC_CHECK_HEADERS(sys/poll.h)
-AC_CHECK_HEADERS(sys/wait.h)
-AC_CHECK_HEADERS(grp.h)
-AC_CHECK_HEADERS(syslog.h)
-
-# for mono/dis
-AC_CHECK_HEADERS(wchar.h)
-AC_CHECK_HEADERS(ieeefp.h)
-AC_MSG_CHECKING(for isinf)
-AC_TRY_LINK([#include <math.h>], [
- int f = isinf (1);
-], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ISINF, 1, [isinf available])
-], [
- # We'll have to use signals
- AC_MSG_RESULT(no)
-])
-# mingw
-AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
- AC_TRY_LINK([#include <math.h>],
- [ _finite(0.0); ],
- AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no)))
-
-# for Linux statfs support
-AC_CHECK_HEADERS(linux/magic.h)
-
-# not 64 bit clean in cross-compile
-AC_CHECK_SIZEOF(void *, 4)
-
-AC_CACHE_CHECK([for clang],
- mono_cv_clang,[
- AC_TRY_COMPILE([], [
- #ifdef __clang__
- #else
- #error "FAILED"
- #endif
- return 0;
- ],
- [mono_cv_clang=yes],
- [mono_cv_clang=no],
- [])
-])
-
-WARN=''
-if test x"$GCC" = xyes; then
- WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value'
- # The runtime code does not respect ANSI C strict aliasing rules
- CFLAGS="$CFLAGS -fno-strict-aliasing"
-
- # We rely on signed overflow to behave
- CFLAGS="$CFLAGS -fwrapv"
-
- ORIG_CFLAGS=$CFLAGS
- CFLAGS="$CFLAGS -Wdeclaration-after-statement"
- AC_MSG_CHECKING(for -Wdeclaration-after-statement option to gcc)
- AC_TRY_COMPILE([],[
- return 0;
- ], [
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- CFLAGS=$ORIG_CFLAGS
- ])
-
- ORIG_CFLAGS=$CFLAGS
- # Check for the normal version, since gcc ignores unknown -Wno options
- CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
- AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
- AC_TRY_COMPILE([],[
- return 0;
- ], [
- AC_MSG_RESULT(yes)
- CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
- ], [
- AC_MSG_RESULT(no)
- CFLAGS=$ORIG_CFLAGS
- ])
-
- if test "x$mono_cv_clang" = "xyes"; then
- # https://bugzilla.samba.org/show_bug.cgi?id=8118
- WARN="$WARN -Qunused-arguments"
- WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign"
- fi
-else
- # The Sun Forte compiler complains about inline functions that access static variables
- # so disable all inlining.
- case "$host" in
- *-*-solaris*)
- CFLAGS="$CFLAGS -Dinline="
- ;;
- esac
-fi
-CFLAGS="$CFLAGS -g $WARN"
-CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
-
-# Where's the 'mcs' source tree?
-if test -d $srcdir/mcs; then
- mcsdir=mcs
-else
- mcsdir=../mcs
-fi
-
-AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
- if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
- mcsdir=$with_mcs_path
- fi
-)
-
-AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
-
-#
-# A sanity check to catch cases where the package was unpacked
-# with an ancient tar program (Solaris)
-#
-AC_ARG_ENABLE(solaris-tar-check,
-[ --disable-solaris-tar-check disable solaris tar check],
- do_solaris_tar_check=no, do_solaris_tar_check=yes)
-
-if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
- AC_MSG_CHECKING(integrity of package)
- if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
- then
- AC_MSG_RESULT(ok)
- else
- errorm="Your mono distribution is incomplete; if unpacking from a tar file, make sure you use GNU tar; see http://www.mono-project.com/IncompletePackage for more details"
- AC_MSG_ERROR([$errorm])
- fi
-fi
-
-if test "x$with_mcs_path" != "x"; then
-mcs_topdir=$(cd "$mcsdir" && pwd)
-mcs_topdir_from_srcdir=$mcs_topdir
-else
-mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
-mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
-fi
-
-# Convert mcs_topdir* paths to Windows syntax.
-if test x$cross_compiling$host_win32 = xnoyes; then
- mcs_topdir=$(cygpath -m $mcs_topdir)
- case $mcs_topdir_from_srcdir in
- /cygdrive/*)
- mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
- ;;
- esac
-fi
-
-AC_SUBST([mcs_topdir])
-AC_SUBST([mcs_topdir_from_srcdir])
-
-# Where's the 'olive' source tree?
-if test -d $srcdir/olive; then
- olivedir=olive
-else
- olivedir=../olive
-fi
-
-if test -d $srcdir/$olivedir; then
-olive_topdir='$(top_srcdir)/'$olivedir
-fi
-
-# gettext: prepare the translation directories.
-# we do not configure the full gettext, as we consume it dynamically from C#
-AM_PO_SUBDIRS
-
-if test "x$USE_NLS" = "xyes"; then
- AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
-
- if test "x$HAVE_MSGFMT" = "xno"; then
- AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
- fi
-fi
-
-AC_ARG_WITH([libgdiplus],
- [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
- [], [with_libgdiplus=installed])
-
-case $with_libgdiplus in
-no|installed) libgdiplus_loc= ;;
-yes|sibling) libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la ;;
-/*) libgdiplus_loc=$with_libgdiplus ;;
-*) libgdiplus_loc=`pwd`/$with_libgdiplus ;;
-esac
-AC_SUBST([libgdiplus_loc])
-
-AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-
-pkg_config_path=
-AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
- if test x$with_crosspkgdir = "x"; then
- if test -s $PKG_CONFIG_PATH; then
- pkg_config_path=$PKG_CONFIG_PATH
- fi
- else
- pkg_config_path=$with_crosspkgdir
- PKG_CONFIG_PATH=$pkg_config_path
- export PKG_CONFIG_PATH
- fi
-)
-
-ac_configure_args="$ac_configure_args \"CPPFLAGS_FOR_EGLIB=$EGLIB_CPPFLAGS\" \"CFLAGS_FOR_EGLIB=$CFLAGS_FOR_EGLIB\""
-AC_CONFIG_SUBDIRS(eglib)
-
-GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
-GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
-BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
-BUILD_GLIB_LIBS="$GLIB_LIBS"
-GMODULE_CFLAGS="$GLIB_CFLAGS"
-GMODULE_LIBS="$GLIB_LIBS"
-
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-AC_SUBST(GMODULE_CFLAGS)
-AC_SUBST(GMODULE_LIBS)
-AC_SUBST(BUILD_GLIB_CFLAGS)
-AC_SUBST(BUILD_GLIB_LIBS)
-
-AC_ARG_WITH(gc, [ --with-gc=boehm,included,none Controls the Boehm GC config, default=included],[gc=$with_gc],[gc=$gc_default])
-
-# Enable support for fast thread-local storage
-# Some systems have broken support, so we allow to disable it.
-AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
-
-# Enable support for using sigaltstack for SIGSEGV and stack overflow handling
-# This does not work on some platforms (bug #55253)
-AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
-
-AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
-AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
-# Same as --with-shared_mono=no
-AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
-
-if test "x$enable_static" = "xno"; then
- with_static_mono=no
-fi
-
-if test "x$enable_shared" = "xno"; then
- with_shared_mono=no
-fi
-
-if test "x$enable_libraries" = "xno"; then
- with_shared_mono=no
-fi
-
-AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
-
-case $host in
-*nacl* ) with_shared_mono=yes;;
-esac
-
-if test "x$host_win32" = "xyes"; then
- # Boehm GC requires the runtime to be in its own dll
- with_static_mono=no
-fi
-
-AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
-AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
-AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
-
-AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
-if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
- AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
- ORIG_CFLAGS=$CFLAGS
- CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
- AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
- AC_TRY_COMPILE([], [
- return 0;
- ], [
- AC_MSG_RESULT(yes)
- # Pass it to libgc as well
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
- ], [
- AC_MSG_RESULT(no)
- CFLAGS=$ORIG_CFLAGS
- ])
-fi
-
-AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
-
-if test x$enable_small_config = xyes; then
- AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
-fi
-
-AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
-
-DISABLED_FEATURES=none
-
-AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
- LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
- reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, perfcounters, normalization, assembly_remapping, shared_perfcounters, remoting,
- security, sgen_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying.],
-[
- for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
- eval "mono_feature_disable_$feature='yes'"
- done
- DISABLED_FEATURES=$enable_minimal
- disabled="Disabled: $enable_minimal"
-],[])
-
-AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
-
-if test "x$mono_feature_disable_aot" = "xyes"; then
- AC_DEFINE(DISABLE_AOT_COMPILER, 1, [Disable AOT Compiler])
- AC_MSG_NOTICE([Disabled AOT compiler])
-fi
-
-if test "x$mono_feature_disable_profiler" = "xyes"; then
- AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
- AC_MSG_NOTICE([Disabled support for the profiler])
-fi
-AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
-
-if test "x$mono_feature_disable_decimal" = "xyes"; then
- AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
- AC_MSG_NOTICE([Disabled support for decimal])
-fi
-
-if test "x$mono_feature_disable_pinvoke" = "xyes"; then
- AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
- AC_MSG_NOTICE([Disabled support for P/Invoke])
-fi
-
-if test "x$mono_feature_disable_debug" = "xyes"; then
- AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
- AC_MSG_NOTICE([Disabled support for runtime debugging])
-fi
-
-if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
- AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
- mono_feature_disable_reflection_emit_save=yes
- AC_MSG_NOTICE([Disabled support for Reflection.Emit])
-fi
-
-if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
- AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
- AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
-fi
-
-if test "x$mono_feature_disable_large_code" = "xyes"; then
- AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
- AC_MSG_NOTICE([Disabled support for large assemblies])
-fi
-
-if test "x$mono_feature_disable_logging" = "xyes"; then
- AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
- AC_MSG_NOTICE([Disabled support for logging])
-fi
-
-if test "x$mono_feature_disable_com" = "xyes"; then
- AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
- AC_MSG_NOTICE([Disabled COM support])
-fi
-
-if test "x$mono_feature_disable_ssa" = "xyes"; then
- AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
- AC_MSG_NOTICE([Disabled SSA JIT optimizations])
-fi
-
-if test "x$mono_feature_disable_generics" = "xyes"; then
- AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
- AC_MSG_NOTICE([Disabled Generics Support])
-fi
-
-if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
- AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
- AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
-fi
-
-if test "x$mono_feature_disable_portability" = "xyes"; then
- AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
- AC_MSG_NOTICE([Disabled IO Portability layer])
-fi
-
-if test "x$mono_feature_disable_attach" = "xyes"; then
- AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
- AC_MSG_NOTICE([Disabled agent attach])
-fi
-
-if test "x$mono_feature_disable_full_messages" = "xyes"; then
- AC_DEFINE(DISABLE_FULL_MESSAGES, 1, [Disables building in the full table of WAPI messages])
- AC_MSG_NOTICE([Disabled full messages for Win32 errors, only core message strings shipped])
-fi
-
-if test "x$mono_feature_disable_verifier" = "xyes"; then
- AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
- AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
-fi
-
-if test "x$mono_feature_disable_jit" = "xyes"; then
- AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode will be supported by the runtime.])
- AC_MSG_NOTICE([Disabled the JIT engine, only full AOT will be supported])
-fi
-
-AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
-
-if test "x$mono_feature_disable_simd" = "xyes"; then
- AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
- AC_MSG_NOTICE([Disabled SIMD support])
-fi
-
-if test "x$mono_feature_disable_soft_debug" = "xyes"; then
- AC_DEFINE(DISABLE_SOFT_DEBUG, 1, [Disable Soft Debugger Agent.])
- AC_MSG_NOTICE([Disabled Soft Debugger.])
-fi
-
-if test "x$mono_feature_disable_perfcounters" = "xyes"; then
- AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
- AC_MSG_NOTICE([Disabled Performance Counters.])
-fi
-if test "x$mono_feature_disable_normalization" = "xyes"; then
- AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
- AC_MSG_NOTICE([Disabled String normalization support.])
-fi
-
-if test "x$mono_feature_disable_assembly_remapping" = "xyes"; then
- AC_DEFINE(DISABLE_ASSEMBLY_REMAPPING, 1, [Disable assembly remapping.])
- AC_MSG_NOTICE([Disabled Assembly remapping.])
-fi
-
-if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
- AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
- AC_MSG_NOTICE([Disabled Shared perfcounters.])
-fi
-
-if test "x$mono_feature_disable_appdomains" = "xyes"; then
- AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
- AC_MSG_NOTICE([Disabled support for multiple appdomains.])
-fi
-
-if test "x$mono_feature_disable_remoting" = "xyes"; then
- AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
- AC_MSG_NOTICE([Disabled remoting])
-fi
-
-if test "x$mono_feature_disable_security" = "xyes"; then
- AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
- AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
-fi
-
-if test "x$mono_feature_disable_sgen_remset" = "xyes"; then
- AC_DEFINE(DISABLE_SGEN_REMSET, 1, [Disable wbarrier=remset support in SGEN.])
- AC_MSG_NOTICE([Disabled wbarrier=remset support in SGEN.])
-fi
-
-if test "x$mono_feature_disable_sgen_marksweep_par" = "xyes"; then
- AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_PAR, 1, [Disable major=marksweep-par support in SGEN.])
- AC_MSG_NOTICE([Disabled major=marksweep-par support in SGEN.])
-fi
-
-if test "x$mono_feature_disable_sgen_marksweep_fixed" = "xyes"; then
- AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED, 1, [Disable major=marksweep-fixed support in SGEN.])
- AC_MSG_NOTICE([Disabled major=marksweep-fixed support in SGEN.])
-fi
-
-if test "x$mono_feature_disable_sgen_marksweep_fixed_par" = "xyes"; then
- AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED_PAR, 1, [Disable major=marksweep-fixed-par support in SGEN.])
- AC_MSG_NOTICE([Disabled major=marksweep-fixed-par support in SGEN.])
-fi
-
-if test "x$mono_feature_disable_sgen_copying" = "xyes"; then
- AC_DEFINE(DISABLE_SGEN_MAJOR_COPYING, 1, [Disable major=copying support in SGEN.])
- AC_MSG_NOTICE([Disabled major=copying support in SGEN.])
-fi
-
-AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
-AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
-
-has_extension_module=no
-AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
-[
- for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
- if test x$extension = xdefault ; then
- has_extension_module=yes;
- fi
- done
- if test x$enable_extension_module = xyes; then
- has_extension_module=yes;
- fi
-], [])
-
-AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
-
-if test x$has_extension_module != xno ; then
- AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
- AC_MSG_NOTICE([Enabling mono extension module.])
-fi
-
-AC_ARG_ENABLE(gsharing, [ --enable-gsharing Enable gsharing], enable_gsharing=$enableval, enable_gsharing=no)
-if test x$enable_gsharing = xyes; then
- AC_DEFINE(ENABLE_GSHAREDVT,1,[Gsharing])
-fi
-
-AC_ARG_ENABLE(native-types, [ --enable-native-types Enable native types], enable_native_types=$enableval, enable_native_types=no)
-if test x$enable_native_types = xyes; then
- AC_DEFINE(MONO_NATIVE_TYPES,1,[native types])
-fi
-
-AC_MSG_CHECKING(for visibility __attribute__)
-AC_COMPILE_IFELSE([
- AC_LANG_SOURCE([[
- void __attribute__ ((visibility ("hidden"))) doit (void) {}
- int main () { doit (); return 0; }
- ]])
-], [
- have_visibility_hidden=yes
- AC_MSG_RESULT(yes)
-], [
- have_visibility_hidden=no
- AC_MSG_RESULT(no)
-])
-
-AC_MSG_CHECKING(for deprecated __attribute__)
-AC_TRY_COMPILE([
- int doit (void) __attribute__ ((deprecated));
- int doit (void) { return 0; }
-], [
- return 0;
-], [
- have_deprecated=yes
- AC_MSG_RESULT(yes)
-], [
- have_deprecated=no
- AC_MSG_RESULT(no)
-])
-
-AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
-if test x$enable_parallel_mark = xyes; then
- libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
-fi
-
-AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
-AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
-
-dnl
-dnl Boehm GC configuration
-dnl
-LIBGC_CPPFLAGS=
-LIBGC_LIBS=
-LIBGC_STATIC_LIBS=
-libgc_dir=
-case "x$gc" in
- xboehm|xbohem|xyes)
- AC_CHECK_HEADERS(gc.h gc/gc.h, gc_headers=yes)
- AC_CHECK_LIB(gc, GC_malloc, found_boehm="yes",,$libdl)
-
- if test "x$found_boehm" != "xyes"; then
- AC_MSG_ERROR("GC requested but libgc not found! Install libgc or run configure with --with-gc=none.")
- fi
- if test "x$gc_headers" != "xyes"; then
- AC_MSG_ERROR("GC requested but header files not found! You may need to install them by hand.")
- fi
-
- LIBGC_LIBS="-lgc $libdl"
- LIBGC_STATIC_LIBS="$LIBGC_LIBS"
- libmono_ldflags="$libmono_ldflags -lgc"
- BOEHM_DEFINES="-DHAVE_BOEHM_GC"
-
- # AC_CHECK_FUNCS does not work for some reason...
- AC_CHECK_LIB(gc, GC_gcj_malloc, found_gcj_malloc="yes",,$libdl)
- if test "x$found_gcj_malloc" = "xyes"; then
- BOEHM_DEFINES="-DHAVE_GC_GCJ_MALLOC $BOEHM_DEFINES"
- AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "System Boehm (with typed GC)", [GC description])
- gc_msg="System Boehm with typed GC"
- else
- AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "System Boehm (no typed GC)", [GC description])
- gc_msg="System Boehm (without typed GC)"
- fi
- AC_CHECK_LIB(gc, GC_enable, found_gc_enable="yes",,$libdl)
- if test "x$found_gc_enable" = "xyes"; then
- BOEHM_DEFINES="-DHAVE_GC_ENABLE $BOEHM_DEFINES"
- fi
-
- # check whether we need to explicitly allow
- # thread registering
- AC_CHECK_LIB(gc, GC_allow_register_threads, found_allow_register_threads="yes",,$libdl)
- if test "x$found_allow_register_threads" = "xyes"; then
- AC_DEFINE(HAVE_GC_ALLOW_REGISTER_THREADS, 1, [GC requires thread registration])
- fi
-
- ;;
-
- xincluded)
- use_included_gc=yes
- libgc_dir=libgc
-
- LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
- LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
- LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
-
- BOEHM_DEFINES="-DHAVE_BOEHM_GC -DHAVE_GC_H -DUSE_INCLUDED_LIBGC -DHAVE_GC_GCJ_MALLOC -DHAVE_GC_ENABLE"
-
- if test x$target_win32 = xyes; then
- BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
- fi
-
- gc_msg="bundled Boehm GC with typed GC"
- if test x$enable_parallel_mark = xyes; then
- AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
- gc_msg="$gc_msg and parallel mark"
- else
- AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
- fi
- ;;
-
- xsgen)
- AC_MSG_WARN("Use --with-sgen instead, --with-gc= controls Boehm configuration")
- ;;
-
- xnone)
- AC_MSG_WARN("Compiling mono without GC.")
- AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
- AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
- ;;
- *)
- AC_MSG_ERROR([Invalid argument to --with-gc.])
- ;;
-esac
-
-AC_ARG_WITH(large-heap, [ --with-large-heap=yes,no Enable support for GC heaps larger than 3GB (defaults to no)], [large_heap=$withval], [large_heap=no])
-if test "x$large_heap" = "xyes"; then
- CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
-fi
-
-AM_CONDITIONAL(INCLUDED_LIBGC, test x$use_included_gc = xyes)
-AC_SUBST(LIBGC_CPPFLAGS)
-AC_SUBST(LIBGC_LIBS)
-AC_SUBST(LIBGC_STATIC_LIBS)
-AC_SUBST(libgc_dir)
-AC_SUBST(BOEHM_DEFINES)
-
-dnl
-dnl End of libgc checks
-dnl
-
-dnl *************************************
-dnl *** Checks for zero length arrays ***
-dnl *************************************
-AC_MSG_CHECKING(whether $CC supports zero length arrays)
-AC_TRY_COMPILE([
- struct s {
- int length;
- char data [0];
- };
-], [], [
- AC_MSG_RESULT(yes)
- AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
-], [
- AC_MSG_RESULT(no)
- AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
-])
-
-AC_CHECK_HEADERS(nacl/nacl_dyncode.h)
-
-if test x$target_win32 = xno; then
-
- dnl hires monotonic clock support
- AC_SEARCH_LIBS(clock_gettime, rt)
-
- dnl dynamic loader support
- AC_CHECK_FUNC(dlopen, DL_LIB="",
- AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
- )
- if test x$dl_support = xno; then
- AC_MSG_WARN([No dynamic loading support available])
- else
- LIBS="$LIBS $DL_LIB"
- AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
- dnl from glib's configure.in
- AC_CACHE_CHECK([for preceeding underscore in symbols],
- mono_cv_uscore,[
- AC_TRY_RUN([#include <dlfcn.h>
- int mono_underscore_test (void) { return 42; }
- int main() {
- void *f1 = (void*)0, *f2 = (void*)0, *handle;
- handle = dlopen ((void*)0, 0);
- if (handle) {
- f1 = dlsym (handle, "mono_underscore_test");
- f2 = dlsym (handle, "_mono_underscore_test");
- } return (!f2 || f1);
- }],
- [mono_cv_uscore=yes],
- [mono_cv_uscore=no],
- [])
- ])
- if test "x$mono_cv_uscore" = "xyes"; then
- MONO_DL_NEED_USCORE=1
- else
- MONO_DL_NEED_USCORE=0
- fi
- AC_SUBST(MONO_DL_NEED_USCORE)
- AC_CHECK_FUNC(dlerror)
- fi
-
- dnl ******************************************************************
- dnl *** Checks for the IKVM JNI interface library ***
- dnl ******************************************************************
- AC_ARG_WITH(ikvm-native, [ --with-ikvm-native=yes,no build the IKVM JNI interface library (defaults to yes)],[with_ikvm_native=$withval],[with_ikvm_native=$ikvm_native])
-
- ikvm_native_dir=
- if test x$with_ikvm_native = xyes; then
- ikvm_native_dir=ikvm-native
- jdk_headers_found="IKVM Native"
- fi
-
- AC_SUBST(ikvm_native_dir)
-
- AC_CHECK_HEADERS(execinfo.h)
-
- AC_CHECK_HEADERS(sys/auxv.h)
-
- 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)
- AC_CHECK_FUNCS(backtrace_symbols)
- AC_CHECK_FUNCS(mkstemp)
- AC_CHECK_FUNCS(mmap)
- AC_CHECK_FUNCS(madvise)
- AC_CHECK_FUNCS(getrusage)
- AC_CHECK_FUNCS(getpriority)
- AC_CHECK_FUNCS(setpriority)
- AC_CHECK_FUNCS(dl_iterate_phdr)
- AC_CHECK_FUNCS(dladdr)
- AC_CHECK_FUNCS(sysconf)
-
- AC_CHECK_FUNCS(sched_setaffinity)
- AC_CHECK_FUNCS(sched_getcpu)
-
- dnl ****************************************************************
- dnl *** Check for sched_setaffinity from glibc versions before ***
- dnl *** 2.3.4. The older versions of the function only take 2 ***
- dnl *** parameters, not 3. ***
- dnl *** ***
- dnl *** Because the interface change was not made in a minor ***
- dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
- dnl *** won't always indicate the interface sched_affinity has. ***
- dnl ****************************************************************
- AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
- AC_TRY_COMPILE([#include <sched.h>], [
- int mask = 1;
- sched_setaffinity(0, &mask);
- return 0;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
- ], [
- # We have the new, three-parameter version
- AC_MSG_RESULT(no)
- ])
-
-
- dnl ******************************************************************
- dnl *** Check for large file support ***
- dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
- dnl ******************************************************************
-
- # Check that off_t can represent 2**63 - 1 correctly, working around
- # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
- # CPPFLAGS and sets $large_offt to yes if the test succeeds
- large_offt=no
- AC_DEFUN([LARGE_FILES], [
- large_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS $1"
- AC_TRY_COMPILE([
- #include <sys/types.h>
- #include <limits.h>
- ], [
- /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
- #define COMPILE_TIME_ASSERT(pred) \
- switch(0){case 0:case pred:;}
- COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
- ], [
- AC_MSG_RESULT(ok)
- AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
- large_CPPFLAGS="$large_CPPFLAGS $1"
- large_offt=yes
- ], [
- AC_MSG_RESULT(no)
- ])
- CPPFLAGS=$large_CPPFLAGS
- ])
-
- AC_MSG_CHECKING(if off_t is 64 bits wide)
- LARGE_FILES("")
- if test $large_offt = no; then
- AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
- LARGE_FILES("-D_FILE_OFFSET_BITS=64")
- fi
- if test $large_offt = no; then
- AC_MSG_WARN([No 64 bit file size support available])
- fi
-
- dnl *****************************
- dnl *** Checks for libsocket ***
- dnl *****************************
- AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
-
- case "$host" in
- *-*-*freebsd*)
- dnl *****************************
- dnl *** Checks for libinotify ***
- dnl *****************************
- AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
- esac
-
- dnl *******************************
- dnl *** Checks for MSG_NOSIGNAL ***
- dnl *******************************
- AC_MSG_CHECKING(for MSG_NOSIGNAL)
- AC_TRY_COMPILE([#include <sys/socket.h>], [
- int f = MSG_NOSIGNAL;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
- ], [
- # We'll have to use signals
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for IPPROTO_IP ***
- dnl *****************************
- AC_MSG_CHECKING(for IPPROTO_IP)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- int level = IPPROTO_IP;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl *******************************
- dnl *** Checks for IPPROTO_IPV6 ***
- dnl *******************************
- AC_MSG_CHECKING(for IPPROTO_IPV6)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- int level = IPPROTO_IPV6;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl ******************************
- dnl *** Checks for IPPROTO_TCP ***
- dnl ******************************
- AC_MSG_CHECKING(for IPPROTO_TCP)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- int level = IPPROTO_TCP;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for SOL_IP ***
- dnl *****************************
- AC_MSG_CHECKING(for SOL_IP)
- AC_TRY_COMPILE([#include <netdb.h>], [
- int level = SOL_IP;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for SOL_IPV6 ***
- dnl *****************************
- AC_MSG_CHECKING(for SOL_IPV6)
- AC_TRY_COMPILE([#include <netdb.h>], [
- int level = SOL_IPV6;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for SOL_TCP ***
- dnl *****************************
- AC_MSG_CHECKING(for SOL_TCP)
- AC_TRY_COMPILE([#include <netdb.h>], [
- int level = SOL_TCP;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
- ], [
- # We'll have to use getprotobyname
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for IP_PKTINFO ***
- dnl *****************************
- AC_MSG_CHECKING(for IP_PKTINFO)
- AC_TRY_COMPILE([#include <linux/in.h>], [
- int level = IP_PKTINFO;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for IPV6_PKTINFO ***
- dnl *****************************
- AC_MSG_CHECKING(for IPV6_PKTINFO)
- AC_TRY_COMPILE([#include <netdb.h>], [
- int level = IPV6_PKTINFO;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** Checks for IP_DONTFRAG ***
- dnl **********************************
- AC_MSG_CHECKING(for IP_DONTFRAG)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- int level = IP_DONTFRAG;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** Checks for IP_DONTFRAGMENT ***
- dnl **********************************
- AC_MSG_CHECKING(for IP_DONTFRAGMENT)
- AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
- int level = IP_DONTFRAGMENT;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** Checks for IP_MTU_DISCOVER ***
- dnl **********************************
- AC_MSG_CHECKING(for IP_MTU_DISCOVER)
- AC_TRY_COMPILE([#include <linux/in.h>], [
- int level = IP_MTU_DISCOVER;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** Checks for IP_PMTUDISC_DO ***
- dnl **********************************
- AC_MSG_CHECKING(for IP_PMTUDISC_DO)
- AC_TRY_COMPILE([#include <linux/in.h>], [
- int level = IP_PMTUDISC_DO;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl *********************************
- dnl *** Check for struct ip_mreqn ***
- dnl *********************************
- AC_MSG_CHECKING(for struct ip_mreqn)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- struct ip_mreqn mreq;
- mreq.imr_address.s_addr = 0;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
- ], [
- # We'll just have to try and use struct ip_mreq
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(for struct ip_mreq)
- AC_TRY_COMPILE([#include <netinet/in.h>], [
- struct ip_mreq mreq;
- mreq.imr_interface.s_addr = 0;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
- ], [
- # No multicast support
- AC_MSG_RESULT(no)
- ])
- ])
-
- dnl **********************************
- dnl *** Check for gethostbyname2_r ***
- dnl **********************************
- AC_MSG_CHECKING(for gethostbyname2_r)
- AC_TRY_LINK([#include <netdb.h>], [
- gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl *****************************
- dnl *** Checks for libnsl ***
- dnl *****************************
- AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
-
- AC_CHECK_FUNCS(inet_pton inet_aton)
-
- dnl ***********************************************
- dnl *** Checks for size of sockaddr_un.sun_path ***
- dnl ***********************************************
- # AC_CHECK_SIZEOF can't cope with struct members :-(
- AC_MSG_CHECKING(size of sockaddr_un.sun_path)
- AC_CACHE_VAL(mono_cv_sizeof_sunpath,
- [AC_TRY_RUN([
- #include <sys/types.h>
- #include <stdio.h>
- #include <sys/un.h>
-
- int main(void) {
- struct sockaddr_un sock_un;
- FILE *f=fopen("conftestval", "w");
- if(!f) exit(1);
- fprintf(f, "%d\n", sizeof(sock_un.sun_path));
- exit(0);
- }
- ], mono_cv_sizeof_sunpath=`cat conftestval`,
- mono_cv_sizeof_sunpath=0,
- mono_cv_sizeof_sunpath=0)])dnl
- AC_MSG_RESULT($mono_cv_sizeof_sunpath)
- AC_DEFINE_UNQUOTED(MONO_SIZEOF_SUNPATH, $mono_cv_sizeof_sunpath, [Sizeof sock_un.sun_path])
-
- dnl *****************************
- dnl *** Checks for libxnet ***
- dnl *****************************
- case "${host}" in
- *solaris* )
- AC_MSG_CHECKING(for Solaris XPG4 support)
- if test -f /usr/lib/libxnet.so; then
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
- CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
- LIBS="$LIBS -lxnet"
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-
- if test "$GCC" = "yes"; then
- CFLAGS="$CFLAGS -Wno-char-subscripts"
- fi
- ;;
- esac
-
- dnl *****************************
- dnl *** Checks for libpthread ***
- dnl *****************************
-# on FreeBSD -STABLE, the pthreads functions all reside in libc_r
-# and libpthread does not exist
-#
- case "${host}" in
- *-*-*freebsd*)
- AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
- ;;
- *-*-*openbsd*)
- AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
- ;;
- *)
- AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
- ;;
- esac
- AC_CHECK_HEADERS(pthread.h)
- AC_CHECK_HEADERS(pthread_np.h)
- AC_CHECK_FUNCS(pthread_mutex_timedlock)
- AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np)
- AC_CHECK_FUNCS(pthread_kill)
- AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
- AC_TRY_COMPILE([ #include <pthread.h>], [
- pthread_mutexattr_t attr;
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- ], [
- AC_MSG_RESULT(ok)
- ], [
- AC_MSG_RESULT(no)
- AC_ERROR(Posix system lacks support for recursive mutexes)
- ])
- AC_CHECK_FUNCS(pthread_attr_setstacksize)
- AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
- AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
-
- dnl ***********************************
- dnl *** Checks for signals
- dnl ***********************************
- AC_CHECK_HEADERS(signal.h)
- AC_CHECK_FUNCS(sigaction)
-
- dnl ***********************************
- dnl *** Checks for working __thread ***
- dnl ***********************************
- AC_MSG_CHECKING(for working __thread)
- if test "x$with_tls" != "x__thread"; then
- AC_MSG_RESULT(disabled)
- elif test "x$cross_compiling" = "xyes"; then
- AC_MSG_RESULT(cross compiling, assuming yes)
- else
- AC_TRY_RUN([
- #if defined(__APPLE__) && defined(__clang__)
- #error "__thread does not currently work with clang on Mac OS X"
- #endif
-
- #include <pthread.h>
- __thread int i;
- static int res1, res2;
-
- void thread_main (void *arg)
- {
- i = arg;
- sleep (1);
- if (arg == 1)
- res1 = (i == arg);
- else
- res2 = (i == arg);
- }
-
- int main () {
- pthread_t t1, t2;
-
- i = 5;
-
- pthread_create (&t1, NULL, thread_main, 1);
- pthread_create (&t2, NULL, thread_main, 2);
-
- pthread_join (t1, NULL);
- pthread_join (t2, NULL);
-
- return !(res1 + res2 == 2);
- }
- ], [
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- with_tls=pthread
- ])
- fi
-
- dnl **************************************
- dnl *** Checks for working sigaltstack ***
- dnl **************************************
- AC_MSG_CHECKING(for working sigaltstack)
- if test "x$with_sigaltstack" != "xyes"; then
- AC_MSG_RESULT(disabled)
- elif test "x$cross_compiling" = "xyes"; then
- AC_MSG_RESULT(cross compiling, assuming yes)
- else
- AC_TRY_RUN([
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <signal.h>
- #include <pthread.h>
- #include <sys/wait.h>
- #if defined(__FreeBSD__) || defined(__NetBSD__)
- #define SA_STACK SA_ONSTACK
- #endif
- static void
- sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
- {
- exit (0);
- }
-
- volatile char*__ptr = NULL;
- static void *
- loop (void *ignored)
- {
- *__ptr = 0;
- return NULL;
- }
-
- static void
- child ()
- {
- struct sigaction sa;
- #ifdef __APPLE__
- stack_t sas;
- #else
- struct sigaltstack sas;
- #endif
- pthread_t id;
- pthread_attr_t attr;
-
- sa.sa_sigaction = sigsegv_signal_handler;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
- if (sigaction (SIGSEGV, &sa, NULL) == -1) {
- perror ("sigaction");
- return;
- }
-
- /* x86 darwin deliver segfaults using SIGBUS */
- if (sigaction (SIGBUS, &sa, NULL) == -1) {
- perror ("sigaction");
- return;
- }
- sas.ss_sp = malloc (SIGSTKSZ);
- sas.ss_size = SIGSTKSZ;
- sas.ss_flags = 0;
- if (sigaltstack (&sas, NULL) == -1) {
- perror ("sigaltstack");
- return;
- }
-
- pthread_attr_init (&attr);
- if (pthread_create(&id, &attr, loop, &attr) != 0) {
- printf ("pthread_create\n");
- return;
- }
-
- sleep (100);
- }
-
- int
- main ()
- {
- pid_t son;
- int status;
- int i;
-
- son = fork ();
- if (son == -1) {
- return 1;
- }
-
- if (son == 0) {
- child ();
- return 0;
- }
-
- for (i = 0; i < 300; ++i) {
- waitpid (son, &status, WNOHANG);
- if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
- return 0;
- usleep (10000);
- }
-
- kill (son, SIGKILL);
- return 1;
- }
-
- ], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
- ], [
- with_sigaltstack=no
- AC_MSG_RESULT(no)
- ])
- fi
-
- dnl ********************************
- dnl *** Checks for semaphore lib ***
- dnl ********************************
- # 'Real Time' functions on Solaris
- # posix4 on Solaris 2.6
- # pthread (first!) on Linux
- AC_SEARCH_LIBS(sem_init, pthread rt posix4)
-
- AC_SEARCH_LIBS(shm_open, pthread rt posix4)
- AC_CHECK_FUNCS(shm_open)
-
- dnl ********************************
- dnl *** Checks for timezone stuff **
- dnl ********************************
- AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
- AC_TRY_COMPILE([
- #include <time.h>
- ], [
- struct tm tm;
- tm.tm_gmtoff = 1;
- ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
- if test $ac_cv_struct_tm_gmtoff = yes; then
- AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
- else
- AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
- AC_TRY_COMPILE([
- #include <time.h>
- ], [
- timezone = 1;
- ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
- if test $ac_cv_var_timezone = yes; then
- AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
- else
- AC_ERROR(unable to find a way to determine timezone)
- fi
- fi
-
- dnl *********************************
- dnl *** Checks for math functions ***
- dnl *********************************
- AC_SEARCH_LIBS(sqrtf, m)
- if test "x$has_broken_apple_cpp" != "xyes"; then
- AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
- AC_TRY_LINK([#include <math.h>],
- [ finite(0.0); ],
- AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no)))
- fi
- AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
- AC_TRY_LINK([#include <math.h>],
- [ isfinite(0.0); ],
- AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no)))
-
- dnl ****************************************************************
- dnl *** Checks for working poll() (macosx defines it but doesn't ***
- dnl *** have it in the library (duh)) ***
- dnl ****************************************************************
- AC_CHECK_FUNCS(poll)
-
- dnl *************************
- dnl *** Check for signbit ***
- dnl *************************
- AC_MSG_CHECKING(for signbit)
- AC_TRY_LINK([#include <math.h>], [
- int s = signbit(1.0);
- ], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** epoll ***
- dnl **********************************
- if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xno"; then
- AC_CHECK_HEADERS(sys/epoll.h)
- haveepoll=no
- AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
- if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
- AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
- fi
- fi
-
- havekqueue=no
-
- AC_CHECK_HEADERS(sys/event.h)
- AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
-
- dnl **************************************
- dnl * Darwin has a race that prevents us from using reliably:
- dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
- dnl * Since kqueue is mostly used for scaling large web servers,
- dnl * and very few folks run Mono on large web servers on OSX, falling
- dnl * back
- dnl **************************************
- if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
- if test "x$platform_darwin" = "xno"; then
- AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
- fi
- fi
-
- dnl ******************************
- dnl *** Checks for SIOCGIFCONF ***
- dnl ******************************
- AC_CHECK_HEADERS(sys/ioctl.h)
- AC_CHECK_HEADERS(net/if.h, [], [],
- [
- #ifdef HAVE_SYS_TYPES_H
- # include <sys/types.h>
- #endif
- #ifdef HAVE_SYS_SOCKET_H
- # include <sys/socket.h>
- #endif
- ])
- AC_MSG_CHECKING(for ifreq)
- AC_TRY_COMPILE([
- #include <stdio.h>
- #include <sys/ioctl.h>
- #include <net/if.h>
- ], [
- struct ifconf ifc;
- struct ifreq *ifr;
- void *x;
- ifc.ifc_len = 0;
- ifc.ifc_buf = NULL;
- x = (void *) &ifr->ifr_addr;
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
- ], [
- AC_MSG_RESULT(no)
- ])
- dnl **********************************
- dnl *** Checks for sin_len ***
- dnl **********************************
- AC_MSG_CHECKING(for sockaddr_in.sin_len)
- AC_TRY_COMPILE([
- #include <netinet/in.h>
- ], [
- struct sockaddr_in saddr;
- saddr.sin_len = sizeof (saddr);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
- ], [
- AC_MSG_RESULT(no)
- ])
- dnl **********************************
- dnl *** Checks for sin6_len ***
- dnl **********************************
- AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
- AC_TRY_COMPILE([
- #include <netinet/in.h>
- ], [
- struct sockaddr_in6 saddr6;
- saddr6.sin6_len = sizeof (saddr6);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
- ], [
- AC_MSG_RESULT(no)
- ])
- dnl **********************************
- dnl *** Check for getifaddrs ***
- dnl **********************************
- AC_MSG_CHECKING(for getifaddrs)
- AC_TRY_LINK([
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <ifaddrs.h>
- ], [
- getifaddrs(NULL);
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
- ], [
- AC_MSG_RESULT(no)
- ])
- dnl **********************************
- dnl *** Check for if_nametoindex ***
- dnl **********************************
- AC_MSG_CHECKING(for if_nametoindex)
- AC_TRY_LINK([
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <net/if.h>
- ], [
- if_nametoindex(NULL);
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
- ], [
- AC_MSG_RESULT(no)
- ])
-
- dnl **********************************
- dnl *** Checks for MonoPosixHelper ***
- dnl **********************************
- AC_CHECK_HEADERS(checklist.h)
- AC_CHECK_HEADERS(pathconf.h)
- AC_CHECK_HEADERS(fstab.h)
- AC_CHECK_HEADERS(attr/xattr.h)
- AC_CHECK_HEADERS(sys/extattr.h)
- AC_CHECK_HEADERS(sys/sendfile.h)
- AC_CHECK_HEADERS(sys/statvfs.h)
- AC_CHECK_HEADERS(sys/statfs.h)
- AC_CHECK_HEADERS(sys/vfstab.h)
- AC_CHECK_HEADERS(sys/xattr.h)
- AC_CHECK_HEADERS(sys/mman.h)
- AC_CHECK_HEADERS(sys/param.h)
- AC_CHECK_HEADERS(sys/mount.h, [], [],
- [
- #ifdef HAVE_SYS_PARAM_H
- # include <sys/param.h>
- #endif
- ])
- AC_CHECK_HEADERS(sys/mount.h)
- AC_CHECK_FUNCS(confstr)
- AC_CHECK_FUNCS(seekdir telldir)
- AC_CHECK_FUNCS(getdomainname)
- AC_CHECK_FUNCS(setdomainname)
- AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
- AC_CHECK_FUNCS(setgroups)
- AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
- AC_CHECK_FUNCS(getfsstat)
- AC_CHECK_FUNCS(lutimes futimes)
- AC_CHECK_FUNCS(mremap)
- AC_CHECK_FUNCS(remap_file_pages)
- AC_CHECK_FUNCS(posix_fadvise)
- AC_CHECK_FUNCS(posix_fallocate)
- AC_CHECK_FUNCS(posix_madvise)
- AC_CHECK_FUNCS(vsnprintf)
- AC_CHECK_FUNCS(sendfile)
- AC_CHECK_FUNCS(gethostid sethostid)
- AC_CHECK_FUNCS(sethostname)
- AC_CHECK_FUNCS(statfs)
- AC_CHECK_FUNCS(fstatfs)
- AC_CHECK_FUNCS(statvfs)
- AC_CHECK_FUNCS(fstatvfs)
- AC_CHECK_FUNCS(stime)
- AC_CHECK_FUNCS(strerror_r)
- AC_CHECK_FUNCS(ttyname_r)
- AC_CHECK_FUNCS(psignal)
- AC_CHECK_FUNCS(getlogin_r)
- AC_CHECK_FUNCS(lockf)
- AC_CHECK_FUNCS(swab)
- AC_CHECK_FUNCS(setusershell endusershell)
- AC_CHECK_FUNCS(futimens utimensat)
- AC_CHECK_FUNCS(fstatat mknodat readlinkat)
- AC_CHECK_FUNCS(readv writev preadv pwritev)
- AC_CHECK_FUNCS(setpgid)
- AC_CHECK_SIZEOF(size_t)
- AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
- [#include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>])
- AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
- [#include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>])
- AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
- [#include <sys/time.h>])
- AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
- [#include <unistd.h>
- #include <fcntl.h>])
- AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
- [#include <sys/uio.h>])
- AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
- [#include <sys/poll.h>])
- AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
- [#include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>])
- AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
- [#include <time.h>])
- AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
- [#include <sys/time.h>
- #include <sys/types.h>
- #include <utime.h>])
- AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
- [#include <sys/time.h>])
- AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
- [#include <sys/types.h>
- #include <utime.h>])
- AC_CHECK_MEMBERS(
- [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
- [#include <sys/types.h>
- #include <dirent.h>])
- AC_CHECK_MEMBERS(
- [struct passwd.pw_gecos],,,
- [#include <sys/types.h>
- #include <pwd.h>])
- AC_CHECK_MEMBERS(
- [struct statfs.f_flags],,,
- [#include <sys/types.h>
- #include <sys/vfs.h>])
- AC_CHECK_MEMBERS(
- [struct stat.st_atim, struct stat.st_mtim, struct stat.st_ctim],,,
- [#include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>])
-
- dnl Favour xattr through glibc, but use libattr if we have to
- AC_CHECK_FUNC(lsetxattr, ,
- AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
- )
- AC_SUBST(XATTR_LIB)
-
- dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
- AC_CHECK_MEMBERS(
- [struct kinfo_proc.kp_proc],,,
- [#include <sys/types.h>
- #include <sys/param.h>
- #include <sys/sysctl.h>
- #include <sys/proc.h>
- ])
-
- dnl *********************************
- dnl *** Checks for Windows compilation ***
- dnl *********************************
- AC_CHECK_HEADERS(sys/time.h)
- AC_CHECK_HEADERS(sys/param.h)
- AC_CHECK_HEADERS(dirent.h)
-
- dnl ******************************************
- dnl *** Checks for OSX and iOS compilation ***
- dnl ******************************************
- AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
-
- dnl *********************************
- dnl *** Check for Console 2.0 I/O ***
- dnl *********************************
- AC_CHECK_HEADERS([curses.h])
- AC_CHECK_HEADERS([term.h], [], [],
- [#if HAVE_CURSES_H
- #include <curses.h>
- #endif
- ])
- AC_CHECK_HEADERS([termios.h])
-
- dnl * This is provided in io-layer, but on windows it's only available
- dnl * on xp+
- AC_DEFINE(HAVE_GETPROCESSID, 1, [Define if GetProcessId is available])
-else
- dnl *********************************
- dnl *** Checks for Windows compilation ***
- dnl *********************************
- AC_CHECK_HEADERS(winternl.h)
-
- jdk_headers_found=no
- AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
- AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
-
- dnl *********************************
- dnl *** Check for struct ip_mreqn ***
- dnl *********************************
- AC_MSG_CHECKING(for struct ip_mreqn)
- AC_TRY_COMPILE([#include <ws2tcpip.h>], [
- struct ip_mreqn mreq;
- mreq.imr_address.s_addr = 0;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRUCT_IP_MREQN)
- ], [
- # We'll just have to try and use struct ip_mreq
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(for struct ip_mreq)
- AC_TRY_COMPILE([#include <ws2tcpip.h>], [
- struct ip_mreq mreq;
- mreq.imr_interface.s_addr = 0;
- ], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRUCT_IP_MREQ)
- ], [
- # No multicast support
- AC_MSG_RESULT(no)
- ])
- ])
- AC_CHECK_FUNCS(GetProcessId)
- AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
- AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
-fi
-
-dnl socklen_t check
-AC_MSG_CHECKING(for socklen_t)
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
-],[
- socklen_t foo;
-],[
-ac_cv_c_socklen_t=yes
- AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
- AC_MSG_RESULT(yes)
-],[
- AC_MSG_RESULT(no)
-])
-
-AC_MSG_CHECKING(for array element initializer support)
-AC_TRY_COMPILE([#include <sys/socket.h>], [
- const int array[] = {[1] = 2,};
-], [
- # Yes, we have it...
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
-], [
- # We'll have to use signals
- AC_MSG_RESULT(no)
-])
-
-AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
- # Simply calling trunc (0.0) is no good since gcc will optimize the call away
- AC_TRY_LINK([#include <math.h>],
- [ static void *p = &trunc; ],
- [
- AC_DEFINE(HAVE_TRUNC)
- AC_MSG_RESULT(yes)
- ac_cv_trunc=yes
- ],
- AC_MSG_RESULT(no)))
-
-if test "x$ac_cv_truncl" != "xyes"; then
- AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
-fi
-
-AC_CHECK_FUNCS(round)
-AC_CHECK_FUNCS(rint)
-AC_CHECK_FUNCS(execvp)
-
-dnl ****************************
-dnl *** Look for /dev/random ***
-dnl ****************************
-
-AC_MSG_CHECKING([if usage of random device is requested])
-AC_ARG_ENABLE(dev-random,
-[ --disable-dev-random disable the use of the random device (enabled by default)],
-try_dev_random=$enableval, try_dev_random=yes)
-
-AC_MSG_RESULT($try_dev_random)
-
-case "{$build}" in
- *-openbsd*)
- NAME_DEV_RANDOM="/dev/srandom"
- ;;
-
-dnl Win32 does not have /dev/random, they have their own method...
-
- *-mingw*|*-*-cygwin*)
- ac_cv_have_dev_random=no
- ;;
-
-dnl Everywhere else, it's /dev/random
-
- *)
- NAME_DEV_RANDOM="/dev/random"
- ;;
-esac
-
-AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
-
-dnl Now check if the device actually exists
-
-if test "x$try_dev_random" = "xyes"; then
- AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
- [if test -r "$NAME_DEV_RANDOM" ; then
- ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
- if test "x$ac_cv_have_dev_random" = "xyes"; then
- AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
- fi
-else
- AC_MSG_CHECKING(for random device)
- ac_cv_have_dev_random=no
- AC_MSG_RESULT(has been disabled)
-fi
-
-if test "x$host_win32" = "xyes"; then
- AC_DEFINE(HAVE_CRYPT_RNG)
-fi
-
-if test "x$ac_cv_have_dev_random" = "xno" \
- && test "x$host_win32" = "xno"; then
- AC_MSG_WARN([[
-***
-*** A system-provided entropy source was not found on this system.
-*** Because of this, the System.Security.Cryptography random number generator
-*** will throw a NotImplemented exception.
-***
-*** If you are seeing this message, and you know your system DOES have an
-*** entropy collection in place, please contact <crichton@gimp.org> and
-*** provide information about the system and how to access the random device.
-***
-*** Otherwise you can install either egd or prngd and set the environment
-*** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
-***]])
-fi
-
-AC_MSG_CHECKING([if inter-process shared handles are requested])
-AC_ARG_ENABLE(shared-handles, [ --disable-shared-handles disable inter-process shared handles], try_shared_handles=$enableval, try_shared_handles=yes)
-AC_MSG_RESULT($try_shared_handles)
-if test "x$try_shared_handles" != "xyes"; then
- AC_DEFINE(DISABLE_SHARED_HANDLES, 1, [Disable inter-process shared handles])
- AC_SUBST(DISABLE_SHARED_HANDLES)
-fi
-
-AC_ARG_ENABLE(bcl-opt, [ --disable-bcl-opt BCL is compiled with no optimizations (allows accurate BCL debugging)], test_bcl_opt=$enableval, test_bcl_opt=yes)
-
-AC_ARG_ENABLE(nunit-tests, [ --enable-nunit-tests Run the nunit tests of the class library on 'make check'])
-AM_CONDITIONAL(ENABLE_NUNIT_TESTS, [test x$enable_nunit_tests = xyes])
-
-AC_MSG_CHECKING([if big-arrays are to be enabled])
-AC_ARG_ENABLE(big-arrays, [ --enable-big-arrays Enable the allocation and indexing of arrays greater than Int32.MaxValue], enable_big_arrays=$enableval, enable_big_arrays=no)
-if test "x$enable_big_arrays" = "xyes" ; then
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
- else
- AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
- fi
-fi
-AC_MSG_RESULT($enable_big_arrays)
-
-dnl **************
-dnl *** DTRACE ***
-dnl **************
-
-AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
-
-if test "x$enable_dtrace" = "xyes"; then
- if test "x$has_dtrace" = "xno"; then
- AC_MSG_ERROR([DTrace probes are not supported on this platform.])
- fi
- AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
- if test "x$DTRACE" = "xno"; then
- AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
- enable_dtrace=no
- elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
- AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
- enable_dtrace=no
- fi
-fi
-
-dtrace_g=no
-if test "x$enable_dtrace" = "xyes"; then
- AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
- DTRACEFLAGS=
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- case "$host" in
- powerpc-*-darwin*)
- DTRACEFLAGS="-arch ppc64"
- ;;
- i*86-*-darwin*)
- DTRACEFLAGS="-arch x86_64"
- ;;
- *)
- DTRACEFLAGS=-64
- ;;
- esac
- else
- case "$host" in
- powerpc-*-darwin*)
- DTRACEFLAGS="-arch ppc"
- ;;
- i*86-*-darwin*)
- DTRACEFLAGS="-arch i386"
- ;;
- *)
- DTRACEFLAGS=-32
- ;;
- esac
- fi
- AC_SUBST(DTRACEFLAGS)
- case "$host" in
- *-*-solaris*)
- dtrace_g=yes
- ;;
- esac
- AC_CHECK_HEADERS([sys/sdt.h])
-fi
-AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
-AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
-
-dnl **************
-dnl *** NaCl ***
-dnl **************
-
-AC_ARG_ENABLE(nacl_codegen, [ --enable-nacl-codegen Enable Native Client code generation], enable_nacl_codegen=$enableval, enable_nacl_codegen=no)
-AC_ARG_ENABLE(nacl_gc, [ --enable-nacl-gc Enable Native Client garbage collection], enable_nacl_gc=$enableval, enable_nacl_gc=no)
-
-AM_CONDITIONAL(NACL_CODEGEN, test x$enable_nacl_codegen != xno)
-
-dnl
-dnl Hack to use system mono for operations in build/install not allowed in NaCl.
-dnl
-nacl_self_host=""
-if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xyes"; then
- nacl_self_host="nacl_self_host"
-fi
-AC_SUBST(nacl_self_host)
-
-if test "x$enable_nacl_codegen" = "xyes"; then
- MONO_NACL_ALIGN_MASK_OFF=1
- AC_DEFINE(TARGET_NACL, 1, [...])
- AC_DEFINE(__native_client_codegen__, 1, [...])
-else
- MONO_NACL_ALIGN_MASK_OFF=0
- AC_DEFINE(__default_codegen__, 1, [...])
-fi
-if test "x$enable_nacl_gc" = "xyes"; then
- if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
- INSTRUMENT_CFLAG="-finstrument-for-thread-suspension"
- else
- # Not yet implemented
- INSTRUMENT_CFLAG=""
- fi
- CPPFLAGS="$CPPFLAGS $INSTRUMENT_CFLAG -D__native_client_gc__"
-fi
-AC_SUBST(MONO_NACL_ALIGN_MASK_OFF)
-
-dnl **************
-dnl *** LLVM ***
-dnl **************
-
-AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=no)
-AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
-AC_ARG_ENABLE(llvm-version-check,[ --enable-llvm-version-check Check that the LLVM matches the version expected by mono], enable_llvm_version_check=$enableval, enable_llvm_version_check=no)
-
-AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
-
-if test "x$enable_llvm" = "xyes"; then
- if test "x$with_llvm" != "x"; then
- LLVM_CONFIG=$with_llvm/bin/llvm-config
- if test ! -x $LLVM_CONFIG; then
- AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
- fi
- else
- AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
- if test "x$LLVM_CONFIG" = "xno"; then
- AC_MSG_ERROR([llvm-config not found.])
- fi
- fi
-
- llvm_codegen="x86codegen"
- case "$target" in
- arm*)
- llvm_codegen="armcodegen"
- ;;
- esac
-
- # The output of --cflags seems to include optimizations flags too
- LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
- # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
- # from LLVM classes.
- LLVM_CXXFLAGS="`$LLVM_CONFIG --cxxflags` -fno-rtti"
- LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
- # This might include empty lines
- LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
- if test "x$host" != "x$target"; then
- # No need for jit libs
- LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter`
- else
- LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit mcjit $llvm_codegen`
- fi
- LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS -lstdc++"
-
- expected_llvm_version="3.4svn-mono-mono/e656cac"
-
- # Should be something like '2.6' or '2.7svn'
- llvm_version=`$LLVM_CONFIG --version`
- major_version=`echo $llvm_version | cut -c 1`
- minor_version=`echo $llvm_version | cut -c 3`
- llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
- AC_MSG_CHECKING(LLVM version)
- AC_MSG_RESULT($llvm_version)
- if echo $llvm_version | grep -q 'mono'; then
- if test "x$enable_llvm_version_check" == "xyes"; then
- if test "$llvm_version" != "$expected_llvm_version"; then
- AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
- fi
- fi
- if test "x$llvm_api_version" = "x"; then
- LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
- LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
- else
- LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
- LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
- fi
- else
- AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
- fi
-
- AC_DEFINE_UNQUOTED(LLVM_MAJOR_VERSION, $major_version, [Major version of LLVM libraries])
- AC_DEFINE_UNQUOTED(LLVM_MINOR_VERSION, $minor_version, [Minor version of LLVM libraries])
- AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraties])
-
- # Have to pass these on the command line since mini-llvm-cpp.h already includes
- # llvm's config.h
- LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_MAJOR_VERSION=$major_version -DLLVM_MINOR_VERSION=$minor_version"
-
- AC_SUBST(LLVM_CFLAGS)
- AC_SUBST(LLVM_CXXFLAGS)
- AC_SUBST(LLVM_LIBS)
- AC_SUBST(LLVM_LDFLAGS)
- AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
-fi
-
-AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
-if test "x$enable_loadedllvm" = "xyes"; then
- AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
-fi
-AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
-
-TARGET="unknown"
-ACCESS_UNALIGNED="yes"
-
-JIT_SUPPORTED=no
-INTERP_SUPPORTED=no
-LIBC="libc.so.6"
-INTL="libc.so.6"
-SQLITE="libsqlite.so.0"
-SQLITE3="libsqlite3.so.0"
-X11="libX11.so"
-XINERAMA="libXinerama.so"
-
-sizeof_register="SIZEOF_VOID_P"
-
-jit_wanted=true
-interp_wanted=false
-sgen_supported=false
-boehm_supported=true
-case "$host" in
- mips*)
- TARGET=MIPS;
- arch_target=mips;
- sgen_supported=true
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
-
- AC_MSG_CHECKING(for mips n32)
- AC_TRY_COMPILE([],[
- #if _MIPS_SIM != _ABIN32
- #error Not mips n32
- #endif
- return 0;
- ],[
- AC_MSG_RESULT(yes)
- sizeof_register=8
- ],[
- AC_MSG_RESULT(no)
- ])
- ;;
- i*86-*-*)
- TARGET=X86;
- arch_target=x86;
- JIT_SUPPORTED=yes
- case $host_os in
- solaris*)
- LIBC="libc.so"
- INTL="libintl.so"
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- TARGET=AMD64
- arch_target=amd64
- fi
-
- # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
- # int astruct __attribute__ ((visibility ("hidden")));
- # void foo ()
- # {
- # void *p = &astruct;
- # }
- # gcc -fPIC --shared -o libfoo.so foo.c
- # yields:
- # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
- # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
- have_visibility_hidden=no
- sgen_supported=true
- ;;
- mingw*|cygwin*)
- sgen_supported=true
- have_visibility_hidden=no
- ;;
- haiku*)
- LIBC=libroot.so
- ;;
- linux*)
- sgen_supported=true
- AOT_SUPPORTED="yes"
- ;;
- darwin*)
- sgen_supported=true
- AOT_SUPPORTED="yes"
- ;;
- darwin*|openbsd*|freebsd*)
- sgen_supported=true
- ;;
- esac
- ;;
- x86_64-*-* | amd64-*-*)
- TARGET=AMD64;
- arch_target=amd64;
- JIT_SUPPORTED=yes
- if test "x$ac_cv_sizeof_void_p" = "x4"; then
- AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
- sizeof_register=8
- fi
- case $host_os in
- linux*)
- sgen_supported=true
- AOT_SUPPORTED="yes"
- ;;
- darwin*|openbsd*|freebsd*)
- sgen_supported=true
- ;;
- esac
- case "$host" in
- x86_64-*-nacl*)
- AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
- sizeof_register=8
- ;;
- esac
- ;;
- ia64-*-*)
- TARGET=IA64
- arch_target=ia64
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
- LIBC="libc.so.6.1"
- INTL="libc.so.6.1"
- AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
- libmono_ldflags="-lunwind"
- ;;
- sparc*-*-*)
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- TARGET=SPARC64
- else
- TARGET=SPARC
- fi
- arch_target=sparc;
- JIT_SUPPORTED=yes
- ACCESS_UNALIGNED="no"
- case $host_os in
- linux*) ;;
- *)
- LIBC="libc.so"
- INTL="libintl.so"
- esac
- if test x"$GCC" = xyes; then
- # We don't support v8 cpus
- CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
- fi
- if test x"$AR" = xfalse; then
- AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
- fi
- sgen_supported=true
- ;;
- *-mingw*|*-*-cygwin*)
- # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
- have_visibility_hidden=no
- INTL="intl"
- ;;
- macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
- powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | powerpc-*-freebsd* )
- if test "x$ac_cv_sizeof_void_p" = "x8"; then
- TARGET=POWERPC64;
- CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
- CFLAGS="$CFLAGS -mminimal-toc"
- else
- TARGET=POWERPC;
- CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
- fi
- arch_target=ppc;
- JIT_SUPPORTED=yes
- case $host_os in
- linux*|darwin*)
- sgen_supported=true
- ;;
- esac
- ;;
- arm*-darwin*)
- TARGET=ARM;
- arch_target=arm;
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
- CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
- # libgc's gc_locks.h depends on this
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC"
- sgen_supported=true
- ;;
- arm*-linux*)
- TARGET=ARM;
- arch_target=arm;
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
- sgen_supported=true
- AOT_SUPPORTED="yes"
- CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
- ;;
-# TODO: make proper support for NaCl host.
-# arm*-*nacl)
-# TARGET=ARM;
-# arch_target=arm;
-# ACCESS_UNALIGNED="no"
-# JIT_SUPPORTED=yes
-# sgen_supported=true
-# AOT_SUPPORTED="no"
-# ;;
- aarch64-*)
- # https://lkml.org/lkml/2012/7/15/133
- TARGET=ARM64
- arch_target=arm64
- JIT_SUPPORTED=yes
- sgen_supported=true
- boehm_supported=false
- ;;
- s390x-*-linux*)
- TARGET=S390X;
- arch_target=s390x;
- ACCESS_UNALIGNED="yes"
- JIT_SUPPORTED=yes
- sgen_supported=true
- CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
- ;;
-esac
-
-HOST=$TARGET
-
-if test "x$host" != "x$target"; then
- AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
- enable_mcs_build=no
- case "$target" in
- arm*-darwin*)
- TARGET=ARM;
- arch_target=arm;
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
- CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
- jit_wanted=true
- # Can't use tls, since it depends on the runtime detection of tls offsets
- # in mono-compiler.h
- with_tls=pthread
- ;;
- powerpc64-ps3-linux-gnu)
- TARGET=POWERPC64
- arch_target=powerpc64
- AC_DEFINE(TARGET_PS3, 1, [...])
- # It would be better to just use TARGET_POWERPC64, but lots of code already
- # uses this define
- AC_DEFINE(__mono_ppc64__, 1, [...])
- AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
- sizeof_register=8
- target_byte_order=G_BIG_ENDIAN
- ;;
-
- powerpc64-xbox360-linux-gnu)
- TARGET=POWERPC64
- arch_target=powerpc64
- AC_DEFINE(TARGET_XBOX360, 1, [...])
- # It would be better to just use TARGET_POWERPC64, but lots of code already
- # uses this define
- sizeof_register=8
- target_byte_order=G_BIG_ENDIAN
- ;;
- x86_64-*-nacl)
- TARGET=AMD64
- arch_target=amd64
- AC_DEFINE(TARGET_AMD64, 1, [...])
- AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
- sizeof_register=8
- ;;
-# TODO: make proper support for NaCl target.
-# arm*-*nacl)
-# TARGET=ARM
-# arch_target=arm
-# AC_DEFINE(TARGET_ARM, 1, [...])
-# ACCESS_UNALIGNED="no"
-# JIT_SUPPORTED=yes
-# sizeof_register=4
-# CPPFLAGS="$CPPFLAGS \
-# -D__ARM_EABI__ \
-# -D__arm__ \
-# -D__portable_native_client__ \
-# -Dtimezone=_timezone \
-# -DDISABLE_SOCKETS \
-# -DDISABLE_ATTACH \
-# -DUSE_NEWLIB"
-# jit_wanted=true
- # Can't use tls, since it depends on the runtime detection of tls offsets
- # in mono-compiler.h
-# with_tls=pthread
-# ;;
- i686-*-nacl)
- TARGET=X86
- arch_target=x86
- AC_DEFINE(TARGET_X86, 1, [...])
- sizeof_register=4
- ;;
- arm*-linux-*)
- TARGET=ARM;
- arch_target=arm;
- AC_DEFINE(TARGET_ARM, 1, [...])
- AC_DEFINE(TARGET_ANDROID, 1, [...])
- ACCESS_UNALIGNED="no"
- JIT_SUPPORTED=yes
- CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
- jit_wanted=true
- # 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
- armv7l-unknown-linux-gnueabi*)
- # TEGRA
- CPPFLAGS="$CPPFLAGS"
- ;;
- armv5-*-linux-androideabi*)
- CPPFLAGS="$CPPFLAGS"
- ;;
- esac
- ;;
- aarch64-*)
- TARGET=ARM64
- JIT_SUPPORTED=yes
- jit_wanted=true
- ;;
- *)
- AC_MSG_ERROR([Cross compiling is not supported for target $target])
- esac
-fi
-
-case "$TARGET" in
-X86)
- AC_DEFINE(TARGET_X86, 1, [...])
- ;;
-AMD64)
- AC_DEFINE(TARGET_AMD64, 1, [...])
- ;;
-ARM)
- AC_DEFINE(TARGET_ARM, 1, [...])
- ;;
-ARM64)
- AC_DEFINE(TARGET_ARM64, 1, [...])
- ;;
-POWERPC)
- AC_DEFINE(TARGET_POWERPC, 1, [...])
- ;;
-POWERPC64)
- AC_DEFINE(TARGET_POWERPC, 1, [...])
- AC_DEFINE(TARGET_POWERPC64, 1, [...])
- ;;
-S390X)
- AC_DEFINE(TARGET_S390X, 1, [...])
- ;;
-MIPS)
- AC_DEFINE(TARGET_MIPS, 1, [...])
- ;;
-IA64)
- AC_DEFINE(TARGET_IA64, 1, [...])
- ;;
-SPARC)
- AC_DEFINE(TARGET_SPARC, 1, [...])
- ;;
-SPARC64)
- AC_DEFINE(TARGET_SPARC64, 1, [...])
- ;;
-esac
-
-dnl Use GCC atomic ops if they work on the target.
-if test x$GCC = "xyes"; then
- case $TARGET in
- X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
- AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
- ;;
- esac
-fi
-
-if test "x$target_mach" = "xyes"; then
- if test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
- AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
- else
- AC_TRY_COMPILE([#include "TargetConditionals.h"],[
- #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
- #error fail this for ios
- #endif
- return 0;
- ], [
- AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
- ], [
- AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
- CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
- ])
- fi
- AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
-fi
-
-if test "x$sizeof_register" = "x4"; then
- AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
-elif test "x$sizeof_register" = "x8"; then
- AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
-else
- AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
-fi
-
-if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
- AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
-elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
- AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
-else
- AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
-fi
-
-if test "x$have_visibility_hidden" = "xyes"; then
- AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
-fi
-
-if test "x$have_deprecated" = "xyes"; then
- AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
-fi
-
-dnl
-dnl Simple Generational checks (sgen)
-dnl
-if $sgen_supported; then
- build_sgen_default=yes
-else
- build_sgen_default=no
-fi
-SGEN_DEFINES=
-AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=$build_sgen_default])
-if test x$buildsgen = xyes; then
- if $sgen_supported; then
- SGEN_DEFINES="-DHAVE_SGEN_GC -DHAVE_MOVING_COLLECTOR"
- gc_msg="sgen and $gc_msg"
- else
- buildsgen=no
- AC_MSG_WARN("Sgen is not supported on this platform")
- fi
-fi
-AC_SUBST(SGEN_DEFINES)
-AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
-
-USEJIT=false
-if test x$JIT_SUPPORTED = xyes; then
- if $jit_wanted; then
- USEJIT=true
- jit_status="Building and using the JIT"
- else
- if $interp_wanted; then
- jit_status="Building the JIT, defaulting to the interpreter"
- else
- AC_ERROR(No JIT or interpreter support available or selected.)
- fi
- fi
-else
- if test x$interp_wanted = xtrue; then
- jit_status="interpreter"
- else
- AC_ERROR(No JIT or interpreter support available or selected.)
- fi
-fi
-
-AM_CONDITIONAL(USE_JIT, test x$USEJIT = xtrue)
-
-libsuffix=".so"
-
-case "$host" in
- *-*-darwin*)
- libsuffix=".dylib"
- LIBC="libc.dylib"
- INTL="libintl.dylib"
- SQLITE="libsqlite.0.dylib"
- SQLITE3="libsqlite3.0.dylib"
- X11="libX11.dylib"
- ;;
- *-*-*netbsd*)
- LIBC="libc.so.12"
- INTL="libintl.so.0"
- ;;
- *-*-*freebsd*)
- LIBC="libc.so"
- INTL="libintl.so"
- SQLITE="libsqlite.so"
- SQLITE3="libsqlite3.so"
- ;;
- *-*-*openbsd*)
- LIBC="libc.so"
- INTL="libintl.so"
- SQLITE="libsqlite.so"
- SQLITE3="libsqlite3.so"
- ;;
- *-*-*linux*)
- AC_PATH_X
- dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
- AC_MSG_CHECKING(for the soname of libX11.so)
- for i in $x_libraries $dlsearch_path; do
- for r in 4 5 6; do
- if test -f $i/libX11.so.$r; then
- X11=libX11.so.$r
- AC_MSG_RESULT($X11)
- fi
- done
- done
-
- if test "x$X11" = "xlibX11.so"; then
- AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? Assuming libX11.so.6...]);
- X11=libX11.so.6
- fi
- AC_MSG_CHECKING(for the soname of libXinerama.so)
- for i in $x_libraries $dlsearch_path; do
- for r in 1 2 3; do
- if test -f $i/libXinerama.so.$r; then
- XINERAMA=libXinerama.so.$r
- AC_MSG_RESULT($XINERAMA)
- fi
- done
- done
- if test "x$XINERAMA" = "xlibXinerama.so"; then
- AC_MSG_WARN([Could not find Xinerama development libs. Support for multiple monitors might not work...]);
- fi
- ;;
-esac
-
-
-AC_SUBST(libsuffix)
-
-if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
- if test "x$with_tls" = "x__thread"; then
- #
- # On some linux distributions, TLS works in executables, but linking
- # against a shared library containing TLS fails with:
- # undefined reference to `__tls_get_addr'
- #
- rm -f conftest.c conftest.so conftest
- echo "static __thread int foo; int main () { foo = 5; return 0; }" > conftest.c
- $CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
- $CC -o conftest conftest.so > /dev/null 2>&1
- if test ! -f conftest; then
- AC_MSG_WARN([Disabling usage of __thread.]);
- with_tls=pthread
- fi
- rm -f conftest.c conftest.so conftest
- fi
-fi
-
-AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
-if test "x$icall_symbol_map" = "xyes"; then
- AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
-fi
-
-AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
-if test "x$icall_export" = "xyes"; then
- AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
-fi
-
-AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
-if test "x$icall_tables" = "xno"; then
- AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
-fi
-
-if test "x$with_tls" = "x__thread"; then
- AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
- # Pass the information to libgc
- CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
- AC_MSG_CHECKING(if the tls_model attribute is supported)
- AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
- ], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
- ], [
- AC_MSG_RESULT(no)
- ])
-fi
-
-if test ${TARGET} = ARM; then
- dnl ******************************************
- dnl *** Check to see what FPU is available ***
- dnl ******************************************
- AC_MSG_CHECKING(which FPU to use)
-
- #
- # This is a bit tricky:
- #
- # if (__ARM_PCS_VFP) {
- # /* mfloat-abi=hard == VFP with hard ABI */
- # } elif (!__SOFTFP__) {
- # /* mfloat-abi=softfp == VFP with soft ABI */
- # } else {
- # /* mfloat-abi=soft == no VFP */
- # }
- #
- # The exception is iOS (w/ GCC) where none of the above
- # are defined (but iOS always uses the 'softfp' ABI).
- #
- # No support for FPA.
- #
-
- fpu=NONE
-
- # iOS GCC always uses the 'softfp' ABI.
- if test x"$GCC" = xyes && test x$platform_darwin = xyes; then
- fpu=VFP
- fi
-
- # Are we using the 'hard' ABI?
- if test x$fpu = xNONE; then
- AC_TRY_COMPILE([], [
- #ifndef __ARM_PCS_VFP
- #error "Float ABI is not 'hard'"
- #endif
- return 0;
- ], [
- fpu=VFP_HARD
- ], [
- fpu=NONE
- ])
- fi
-
- # No 'hard' ABI. 'soft' or 'softfp'?
- if test x$fpu = xNONE; then
- AC_TRY_COMPILE([], [
- #ifdef __SOFTFP__
- #error "Float ABI is not 'softfp'"
- #endif
- return 0;
- ], [
- fpu=VFP
- ], [
- fpu=NONE
- ])
- fi
-
- AC_MSG_RESULT($fpu)
- CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
- unset fpu
-
- dnl *********************************************
- dnl *** Check which ARM version(s) we can use ***
- dnl *********************************************
- AC_MSG_CHECKING(which ARM version to use)
-
- AC_TRY_COMPILE([], [
- #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
- #error Not on ARM v5.
- #endif
- return 0;
- ], [
- arm_v5=yes
-
- arm_ver=ARMv5
- ], [])
-
- AC_TRY_COMPILE([], [
- #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
- #error Not on ARM v6.
- #endif
- return 0;
- ], [
- arm_v5=yes
- arm_v6=yes
-
- arm_ver=ARMv6
- ], [])
-
- AC_TRY_COMPILE([], [
- #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
- #error Not on ARM v7.
- #endif
- return 0;
- ], [
- arm_v5=yes
- arm_v6=yes
- arm_v7=yes
-
- arm_ver=ARMv7
- ], [])
-
- AC_MSG_RESULT($arm_ver)
-
- if test x$arm_v5 = xyes; then
- AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
- fi
-
- if test x$arm_v6 = xyes; then
- AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
- fi
-
- if test x$arm_v7 = xyes; then
- AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
- CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
- fi
-fi
-
-if test ${TARGET} = ARM; then
- if test "x${with_jumptables}" = "xyes"; then
- AC_DEFINE(USE_JUMP_TABLES, 1, Use jump tables in JIT)
- fi
-fi
-
-if test ${TARGET} = unknown; then
- CPPFLAGS="$CPPFLAGS -DNO_PORT"
- AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
-fi
-
-if test ${ACCESS_UNALIGNED} = no; then
- CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
-fi
-
-case "x$gc" in
- xincluded)
- # Pass CPPFLAGS to libgc configure
- # We should use a separate variable for this to avoid passing useless and
- # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
- # This should be executed late so we pick up the final version of CPPFLAGS
- # The problem with this approach, is that during a reconfigure, the main
- # configure scripts gets invoked with these arguments, so we use separate
- # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
- TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
- if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
- TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
- fi
- # Don't pass -finstrument-for-thread-suspension in,
- # if these are instrumented it will be very bad news
- # (infinite recursion, undefined parking behavior, etc)
- TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
- ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
- AC_CONFIG_SUBDIRS(libgc)
- ;;
-esac
-
-AC_ARG_WITH(profile2, [ --with-profile2=yes,no If you want to install the 2.0/3.5 FX (defaults to yes)], [], [with_profile2=yes])
-AC_ARG_WITH(profile4, [ --with-profile4=yes,no If you want to install the 4.0 FX (defaults to yes)], [], [with_profile4=yes])
-AC_ARG_WITH(profile4_5,[ --with-profile4_5=yes,no If you want to install the 4.5 FX (defaults to yes)], [], [with_profile4_5=yes])
-AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=no])
-AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no,only If you want to build the MonoTouch assemblies (defaults to no)], [], [with_monotouch=no])
-AC_ARG_WITH(xammac, [ --with-xammac=yes,no,only If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=no])
-
-OPROFILE=no
-AC_ARG_WITH(oprofile,[ --with-oprofile=no,<oprofile install dir> Enable oprofile support (defaults to no)],[
- if test x$with_oprofile != xno; then
- oprofile_include=$with_oprofile/include
- if test ! -f $oprofile_include/opagent.h; then
- AC_MSG_ERROR([oprofile include file not found at $oprofile_include/opagent.h])
- fi
- OPROFILE=yes
- OPROFILE_CFLAGS="-I$oprofile_include"
- OPROFILE_LIBS="-L$with_oprofile/lib/oprofile -lopagent"
- AC_DEFINE(HAVE_OPROFILE,1,[Have oprofile support])
- fi
-])
-
-MALLOC_MEMPOOLS=no
-AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
- if test x$with_malloc_mempools = xyes; then
- MALLOC_MEMPOOLS=yes
- AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
- fi
-])
-
-
-DISABLE_MCS_DOCS=no
-AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
- if test x$with_mcs_docs != xyes; then
- DISABLE_MCS_DOCS=yes
- fi
-])
-if test x$with_profile4 != xyes; then
- DISABLE_MCS_DOCS=yes
-fi
-
-AC_ARG_WITH(lazy_gc_thread_creation, [ --with-lazy-gc-thread-creation=yes|no Enable lazy runtime thread creation, embedding host must do it explicitly (defaults to no)],[
- if test x$with_lazy_gc_thread_creation != xno ; then
- AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
- fi
-], [with_lazy_gc_thread_creation=no])
-
-AC_CHECK_HEADER([malloc.h],
- [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
- [Define to 1 if you have /usr/include/malloc.h.])],,)
-
-if test x"$GCC" = xyes; then
- # Implicit function declarations are not 64 bit safe
- # Do this late, since this causes lots of configure tests to fail
- CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
- # jay has a lot of implicit declarations
- JAY_CFLAGS="-Wno-implicit-function-declaration"
-fi
-
-# When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
-# instead of libmono-static.a
-if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
- LIBMONO_LA=libmini-static.la
-else
- if test x$buildsgen = xyes; then
- LIBMONO_LA=libmonosgen-$API_VER.la
- else
- LIBMONO_LA=libmonoboehm-$API_VER.la
- fi
-fi
-AC_SUBST(LIBMONO_LA)
-
-dnl
-dnl Consistency settings
-dnl
-if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
- DISABLE_MCS_DOCS=yes
- with_profile2=no
- with_profile4=no
- with_profile4_5=no
- with_monodroid=no
- with_monotouch=no
- with_xammac=no
-fi
-
-if test x$DISABLE_MCS_DOCS = xyes; then
- docs_dir=""
-else
- docs_dir=docs
-fi
-AC_SUBST(docs_dir)
-
-## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
-AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
-
-AM_CONDITIONAL(HAVE_OPROFILE, test x$OPROFILE = xyes)
-AC_SUBST(OPROFILE_CFLAGS)
-AC_SUBST(OPROFILE_LIBS)
-
-libmono_ldflags="$libmono_ldflags $LIBS"
-
-AM_CONDITIONAL(INSTALL_2_0, [test "x$with_profile2" = xyes])
-AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
-AM_CONDITIONAL(INSTALL_4_5, [test "x$with_profile4_5" = xyes])
-AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
-AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
-AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
-AM_CONDITIONAL(ONLY_MONOTOUCH, [test "x$with_monotouch" = "xonly"])
-AM_CONDITIONAL(ONLY_XAMMAC, [test "x$with_xammac" = "xonly"])
-
-AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
-AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
-AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
-AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
-AM_CONDITIONAL(X86, test x$TARGET = xX86)
-AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
-AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
-AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
-AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
-AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
-AM_CONDITIONAL(ARM, test x$TARGET = xARM)
-AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
-AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
-AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
-AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
-AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
-AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
-AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
-
-AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
-AM_CONDITIONAL(INTERP_SUPPORTED, test x$interp_wanted = xtrue)
-AM_CONDITIONAL(INCLUDED_LIBGC, test x$gc = xincluded)
-
-AC_SUBST(LIBC)
-AC_SUBST(INTL)
-AC_SUBST(SQLITE)
-AC_SUBST(SQLITE3)
-AC_SUBST(X11)
-AC_SUBST(XINERAMA)
-AC_DEFINE_UNQUOTED(ARCHITECTURE,"$arch_target",[The architecture this is running on])
-AC_SUBST(arch_target)
-AC_SUBST(CFLAGS)
-AC_SUBST(CPPFLAGS)
-AC_SUBST(LDFLAGS)
-
-mono_build_root=`pwd`
-AC_SUBST(mono_build_root)
-
-if test x$USEJIT = xtrue; then
- mono_runtime=mono/mini/mono
-else
- mono_runtime=mono/interpreter/mint
-fi
-AC_SUBST(mono_runtime)
-
-mono_cfg_root=$mono_build_root/runtime
-if test x$host_win32 = xyes; then
- if test "x$cross_compiling" = "xno"; then
- mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
- else
- mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
- fi
-else
- mono_cfg_dir=$mono_cfg_root/etc
-fi
-AC_SUBST(mono_cfg_dir)
-
-AC_CONFIG_FILES([po/mcs/Makefile.in])
-
-AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
-AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
- cd runtime/etc/mono/1.0
- rm -f machine.config
- $LN_S $reldir/data/net_1_1/machine.config machine.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
- cd runtime/etc/mono/2.0
- rm -f machine.config
- $LN_S $reldir/data/net_2_0/machine.config machine.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
- cd runtime/etc/mono/2.0
- rm -f web.config
- $LN_S $reldir/data/net_2_0/web.config web.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
-[ depth=../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/
- cd runtime/etc/mono/
- rm -f browscap.ini
- $LN_S $reldir/data/browscap.ini browscap.ini
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
-[ depth=../../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
- cd runtime/etc/mono/2.0/Browsers
- rm -f Compat.browser
- $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
-[ depth=../../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
- cd runtime/etc/mono/4.0/Browsers
- rm -f Compat.browser
- $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
-[ depth=../../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
- cd runtime/etc/mono/4.5/Browsers
- rm -f Compat.browser
- $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
- cd runtime/etc/mono/4.0
- rm -f machine.config
- $LN_S $reldir/data/net_4_0/machine.config machine.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
- cd runtime/etc/mono/4.0
- rm -f web.config
- $LN_S $reldir/data/net_4_0/web.config web.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
- cd runtime/etc/mono/4.5
- rm -f machine.config
- $LN_S $reldir/data/net_4_5/machine.config machine.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
-[ depth=../../../..
- case $srcdir in
- [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
- .) reldir=$depth ;;
- *) reldir=$depth/$srcdir ;;
- esac
- $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
- cd runtime/etc/mono/4.5
- rm -f web.config
- $LN_S $reldir/data/net_4_5/web.config web.config
- cd $depth
-],[LN_S='$LN_S'])
-
-AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
-
-AC_OUTPUT([
-Makefile
-mono-core.spec
-mono-uninstalled.pc
-scripts/mono-find-provides
-scripts/mono-find-requires
-mono/Makefile
-mono/utils/Makefile
-mono/metadata/Makefile
-mono/dis/Makefile
-mono/cil/Makefile
-mono/arch/Makefile
-mono/arch/x86/Makefile
-mono/arch/amd64/Makefile
-mono/arch/ppc/Makefile
-mono/arch/sparc/Makefile
-mono/arch/s390x/Makefile
-mono/arch/arm/Makefile
-mono/arch/arm64/Makefile
-mono/arch/ia64/Makefile
-mono/arch/mips/Makefile
-mono/interpreter/Makefile
-mono/tests/Makefile
-mono/tests/tests-config
-mono/tests/assemblyresolve/Makefile
-mono/tests/cas/Makefile
-mono/tests/cas/assembly/Makefile
-mono/tests/cas/demand/Makefile
-mono/tests/cas/inheritance/Makefile
-mono/tests/cas/linkdemand/Makefile
-mono/tests/cas/threads/Makefile
-mono/tests/gc-descriptors/Makefile
-mono/unit-tests/Makefile
-mono/benchmark/Makefile
-mono/monograph/Makefile
-mono/io-layer/Makefile
-mono/mini/Makefile
-mono/profiler/Makefile
-m4/Makefile
-ikvm-native/Makefile
-scripts/Makefile
-man/Makefile
-docs/Makefile
-data/Makefile
-data/net_2_0/Makefile
-data/net_4_0/Makefile
-data/net_4_5/Makefile
-data/net_2_0/Browsers/Makefile
-data/net_4_0/Browsers/Makefile
-data/net_4_5/Browsers/Makefile
-data/mint.pc
-data/mono-2.pc
-data/monosgen-2.pc
-data/mono.pc
-data/mono-cairo.pc
-data/mono-nunit.pc
-data/mono-options.pc
-data/mono-lineeditor.pc
-data/monodoc.pc
-data/dotnet.pc
-data/dotnet35.pc
-data/wcf.pc
-data/cecil.pc
-data/system.web.extensions_1.0.pc
-data/system.web.extensions.design_1.0.pc
-data/system.web.mvc.pc
-data/system.web.mvc2.pc
-data/system.web.mvc3.pc
-data/aspnetwebstack.pc
-data/reactive.pc
-samples/Makefile
-support/Makefile
-data/config
-tools/Makefile
-tools/locale-builder/Makefile
-tools/sgen/Makefile
-runtime/Makefile
-msvc/Makefile
-po/Makefile
-])
-
-# Update all submodules recursively to ensure everything is checked out
-$srcdir/scripts/update_submodules
-
-if test x$host_win32 = xyes; then
- # Get rid of 'cyg' prefixes in library names
- sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
- # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
- # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
- # executable doesn't work...
- sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
-fi
-
-if test x$platform_darwin = xyes; then
- # This doesn't seem to be required and it slows down parallel builds
- sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
-fi
-
-(
- case $prefix in
- NONE) prefix=$ac_default_prefix ;;
- esac
- case $exec_prefix in
- NONE) exec_prefix='${prefix}' ;;
- esac
-
- #
- # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
- # any existing config.make. This allows people to share the same source tree
- # with different build directories, one native and one cross
- #
- if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
-
- test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
-
- echo "prefix=$prefix" > $mcs_topdir/build/config.make
- echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
- echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
- echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
- echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
- echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
- echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
- echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
-
- case $INSTALL in
- [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
- *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
- esac
-
- echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
-
- export VERSION
- [myver=$($AWK 'BEGIN {
- split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
- if(length(vsplit [1]) > 4) {
- split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
- }
- print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
- }')]
-
- echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
-
- if test x$platform_darwin = xyes; then
- echo "PLATFORM = darwin" >> $mcs_topdir/build/config.make
- fi
-
- if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
- enable_system_aot=yes
- fi
-
- if test "x$enable_loadedllvm" = "xyes"; then
- # This seems to fail on the x86 buildbots
- enable_system_aot=no
- fi
-
- if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
- echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
- fi
-
- if test x$DISABLE_MCS_DOCS = xyes; then
- echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
- fi
-
- if test x$has_extension_module != xno; then
- echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
- fi
-
- default_profile=net_2_0
- if test -z "$INSTALL_4_0_TRUE"; then :
- default_profile=net_4_0
- fi
- if test -z "$INSTALL_MONODROID_TRUE"; then :
- default_profile=monodroid
- fi
- if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
- default_profile=monotouch
- fi
- if test -z "$INSTALL_XAMMAC_TRUE"; then :
- default_profile=xammac
- fi
- if test -z "$INSTALL_4_5_TRUE"; then :
- default_profile=net_4_5
- fi
-
- echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
-
- if test "x$test_bcl_opt" = "xyes"; then
- echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
- fi
-
- fi
-
- # if we have an olive folder, override the default settings
- if test -d $olivedir; then
-
- if test x$cross_compiling = xno && test x$enable_olive_build != xno; then
-
- test -w $srcdir/$olivedir/build || chmod +w $srcdir/$olivedir/build
-
- echo "prefix=$prefix" > $srcdir/$olivedir/build/config.make
- echo "exec_prefix=$exec_prefix" >> $srcdir/$olivedir/build/config.make
- echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$olivedir/build/config.make
- echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$olivedir/build/config.make
- echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$olivedir/build/config.make
- echo "MONO_VERSION = $myver" >> $srcdir/$olivedir/build/config.make
- fi
- fi
-
-)
-
-libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
-
-echo "
- mcs source: $mcsdir
-
- Engine:
- GC: $gc_msg
- TLS: $with_tls
- SIGALTSTACK: $with_sigaltstack
- Engine: $jit_status
- oprofile: $OPROFILE
- BigArrays: $enable_big_arrays
- DTrace: $enable_dtrace
- LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
-
- Libraries:
- .NET 2.0/3.5: $with_profile2
- .NET 4.0: $with_profile4
- .NET 4.5: $with_profile4_5
- MonoDroid: $with_monodroid
- MonoTouch: $with_monotouch
- Xamarin.Mac: $with_xammac
- JNI support: $jdk_headers_found
- libgdiplus: $libgdiplus_msg
- zlib: $zlib_msg
- $disabled
-"
-if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
- AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)
-fi
<dllmap dll="sqlite" target="@SQLITE@" os="!windows"/>
<dllmap dll="sqlite3" target="@SQLITE3@" os="!windows"/>
<dllmap dll="libX11" target="@X11@" os="!windows" />
+ <dllmap dll="libgdk-x11-2.0" target="@GDKX11@" os="!windows"/>
+ <dllmap dll="libgtk-x11-2.0" target="@GTKX11@" os="!windows"/>
<dllmap dll="libXinerama" target="@XINERAMA@" os="!windows" />
<dllmap dll="libcairo-2.dll" target="libcairo.so.2" os="!windows"/>
<dllmap dll="libcairo-2.dll" target="libcairo.2.dylib" os="osx"/>
ACLOCAL_AMFLAGS = -I m4
+AM_CFLAGS = $(WERROR_CFLAGS)
+
if HOST_WIN32
SUBDIRS = m4 src
else
dolt_supported=no
fi
case $host in
-i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
-|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*)
+i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
+|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
pic_options='-fPIC'
;;
?86-pc-cygwin*|i?86-pc-cygwin*)
fi
)
+AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
+if test x$werror_flag = xyes; then
+ WERROR_CFLAGS="-Werror"
+fi
+AC_SUBST([WERROR_CFLAGS])
+
AC_SUBST(GPOINTER_TO_INT)
AC_SUBST(GPOINTER_TO_UINT)
AC_SUBST(GINT_TO_POINTER)
noinst_LTLIBRARIES = libeglib.la libeglib-static.la
+AM_CFLAGS = $(WERROR_CFLAGS)
+
win_files = \
eglib-config.hw \
gdate-win32.c gdir-win32.c gfile-win32.c gmisc-win32.c \
garray.c \
gbytearray.c \
gerror.c \
+ vasprintf.h \
ghashtable.c \
giconv.c \
gmem.c \
#include <string.h>
#include <glib.h>
+#include "vasprintf.h"
+
GError *
g_error_new (gpointer domain, gint code, const char *format, ...)
{
G_BEGIN_DECLS
-#ifdef G_OS_WIN32
-/* MSC and Cross-compilatin will use this */
-int vasprintf (char **strp, const char *fmt, va_list ap);
-#endif
-
-
/*
* Basic data types
*/
#define G_UNLIKELY(x) (x)
#endif
+#if defined(_MSC_VER)
+#define eg_unreachable() __assume(0)
+#elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 5)))
+#define eg_unreachable() __builtin_unreachable()
+#else
+#define eg_unreachable()
+#endif
+
#define g_assert(x) G_STMT_START { if (G_UNLIKELY (!(x))) g_assertion_message ("* Assertion at %s:%d, condition `%s' not met\n", __FILE__, __LINE__, #x); } G_STMT_END
-#define g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); } G_STMT_END
+#define g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); eg_unreachable(); } G_STMT_END
/*
* Unicode conversion
#include <stdlib.h>
#include <glib.h>
+#include "vasprintf.h"
+
/* The current fatal levels, error is always fatal */
static GLogLevelFlags fatal = G_LOG_LEVEL_ERROR;
#include <ctype.h>
#include <glib.h>
+#include "vasprintf.h"
+
/* This is not a macro, because I dont want to put _GNU_SOURCE in the glib.h header */
gchar *
g_strndup (const gchar *str, gsize n)
static inline list_node *
sweep_up (struct sort_info *si, list_node *list, int upto)
{
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
+ /*
+ * GCC incorrectly thinks we're writing below si->ranks array bounds.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#endif
+
int i;
for (i = si->min_rank; i < upto; ++i) {
list = merge_lists (si->ranks [i], list, si->func);
si->ranks [i] = NULL;
}
return list;
+
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
+#pragma GCC diagnostic pop
+#endif
}
/*
static inline void
insert_list (struct sort_info *si, list_node* list, int rank)
{
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
+ /*
+ * GCC incorrectly thinks we're writing below si->ranks array bounds.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#endif
+
int i;
if (rank > si->n_ranks) {
si->n_ranks = i + 1;
si->min_rank = i;
si->ranks [i] = list;
+
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
+#pragma GCC diagnostic pop
+#endif
}
#undef stringify2
--- /dev/null
+#ifndef __VASPRINTF_H
+#define __VASPRINTF_H
+
+#include <stdarg.h>
+#include <config.h>
+
+#ifndef HAVE_VASPRINTF
+int vasprintf(char **ret, const char *fmt, va_list ap);
+#endif
+
+#endif /* __VASPRINTF_H */
#ifndef G_OS_WIN32 /* FIXME */
gchar *sympath;
- gint ignored;
+ gint ignored G_GNUC_UNUSED;
#endif
res = g_file_test (NULL, 0);
0 // jlong JNICALL GetDirectBufferCapacity(jobject buf);
};
-JNIEXPORT void** JNICALL ikvm_GetJNIEnvVTable()
+void** ikvm_GetJNIEnvVTable(void);
+
+JNIEXPORT void** JNICALL ikvm_GetJNIEnvVTable(void)
{
return JNIEnv_vtable;
}
+void* JNICALL ikvm_MarshalDelegate(void* p);
+
JNIEXPORT void* JNICALL ikvm_MarshalDelegate(void* p)
{
return p;
typedef jint (JNICALL *PJNI_ONLOAD)(JavaVM* vm, void* reserved);
+jint JNICALL ikvm_CallOnLoad(PJNI_ONLOAD method, JavaVM* vm, void* reserved);
+
JNIEXPORT jint JNICALL ikvm_CallOnLoad(PJNI_ONLOAD method, JavaVM* vm, void* reserved)
{
return method(vm, reserved);
#include <sys/mman.h>
#include "jni.h"
+ void* JNICALL ikvm_LoadLibrary(char* psz);
+
JNIEXPORT void* JNICALL ikvm_LoadLibrary(char* psz)
{
return g_module_open(psz, 0);
}
+ void JNICALL ikvm_FreeLibrary(GModule* handle);
+
JNIEXPORT void JNICALL ikvm_FreeLibrary(GModule* handle)
{
g_module_close(handle);
}
+ void* JNICALL ikvm_GetProcAddress(GModule* handle, char* name, jint argc);
+
JNIEXPORT void* JNICALL ikvm_GetProcAddress(GModule* handle, char* name, jint argc)
{
void *symbol;
return NULL;
}
+ void* JNICALL ikvm_mmap(int fd, jboolean writeable, jboolean copy_on_write, jlong position, jint size);
+
JNIEXPORT void* JNICALL ikvm_mmap(int fd, jboolean writeable, jboolean copy_on_write, jlong position, jint size)
{
return mmap(0, size, writeable ? PROT_WRITE | PROT_READ : PROT_READ, copy_on_write ? MAP_PRIVATE : MAP_SHARED, fd, position);
}
+ int JNICALL ikvm_munmap(void* address, jint size);
+
JNIEXPORT int JNICALL ikvm_munmap(void* address, jint size)
{
return munmap(address, size);
}
+ int JNICALL ikvm_msync(void* address, jint size);
+
JNIEXPORT int JNICALL ikvm_msync(void* address, jint size)
{
#if defined(__native_client__) && defined(USE_NEWLIB)
EXTRA_DIST += alpha_mach_dep.S mips_sgi_mach_dep.s sparc_mach_dep.S
-AM_CFLAGS = @GC_CFLAGS@
+AM_CFLAGS = $(WERROR_CFLAGS) @GC_CFLAGS@
if CPLUSPLUS
extra_checks = test_cpp
TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \
tests/leak_test.c tests/thread_leak_test.c tests/middle.c
-GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \
+GNU_BUILD_FILES= configure.ac Makefile.am configure acinclude.m4 \
libtool.m4 install-sh configure.host Makefile.in \
aclocal.m4 config.sub config.guess \
include/Makefile.am include/Makefile.in \
- Makefile changes:
libgc has a lot of configurable options which are AC_DEFINE()d in its
- configure.in. To make it easier to build and bundle it with Mono, I
- replaced most of the orignal configure.in and the makefiles with custom
+ configure.ac. To make it easier to build and bundle it with Mono, I
+ replaced most of the orignal configure.ac and the makefiles with custom
versions which just define what we actually need for Mono.
This means that you can just run configure in this directory and it'll
cvs diff -u -r LIBGC
- When importing new upstream versions, don't import the new configure.in or any of the
+ When importing new upstream versions, don't import the new configure.ac or any of the
Makefile.am's; they've been replaced by custom versions. Just import all the new source
files and it should be fine.
dolt_supported=no
fi
case $host in
-i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
-|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*)
+i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \
+|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
pic_options='-fPIC'
;;
?86-pc-cygwin*|i?86-pc-cygwin*)
fi
fi
-(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
+(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && {
($LIBTOOL --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`libtool' installed to compile Mono."
}
}
-grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
- grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && {
+ grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \
(gettext --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`gettext' installed to compile Mono."
esac
-if grep "^AC_PROG_LIBTOOL" configure.in >/dev/null; then
+if grep "^AC_PROG_LIBTOOL" configure.ac >/dev/null; then
if test -z "$NO_LIBTOOLIZE" ; then
echo "Running libtoolize..."
${LIBTOOL}ize --force --copy
exit 1
}
-if grep "^AC_CONFIG_HEADERS" configure.in >/dev/null; then
+if grep "^AC_CONFIG_HEADERS" configure.ac >/dev/null; then
echo "Running autoheader..."
autoheader || { echo "**Error**: autoheader failed."; exit 1; }
fi
--- /dev/null
+# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved.
+#
+# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+# OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
+#
+# Permission is hereby granted to use or copy this program
+# for any purpose, provided the above notices are retained on all copies.
+# Permission to modify the code and to distribute modified code is granted,
+# provided the above notices are retained, and a notice that the code was
+# modified is included with the above copyright notice.
+#
+# Original author: Tom Tromey
+# Modified by: Grzegorz Jakacki <jakacki at acm dot org>
+
+dnl Process this file with autoconf to produce configure.
+
+AC_PREREQ([2.53])
+AC_INIT([libgc-mono], [6.6], [Hans_Boehm@hp.com])
+
+AM_INIT_AUTOMAKE([1.9 no-define foreign])
+AC_CONFIG_SRCDIR(gcj_mlc.c)
+AC_CONFIG_MACRO_DIR([m4])
+AC_CANONICAL_HOST
+
+AC_SUBST(PACKAGE)
+AC_SUBST(GC_VERSION)
+
+AC_PROG_CC
+AC_PROG_CXX
+
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+dnl automake 1.6 and later need the AM_PROG_AS macro.
+ifdef([AM_PROG_AS],[AM_PROG_AS],[])
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :) # :)
+
+AC_PROG_INSTALL
+
+AM_MAINTAINER_MODE
+
+. [$]{srcdir}/configure.host
+
+# We use a separate variable to pass down CPPFLAGS and CFLAGS from the main mono
+# configure, because of autoconf brokeness
+if test "x$CPPFLAGS_FOR_LIBGC" != "x"; then
+ CPPFLAGS=$CPPFLAGS_FOR_LIBGC
+fi
+if test "x$CFLAGS_FOR_LIBGC" != "x"; then
+ CFLAGS=$CFLAGS_FOR_LIBGC
+fi
+
+GC_CFLAGS=${gc_cflags}
+AC_SUBST(GC_CFLAGS)
+
+case $enable_embed_check in
+no) ;;
+*) AC_MSG_ERROR([This module is now part of 'mono' and cannot be built as a stand-alone module any longer.]) ;;
+esac
+
+THREADS=$with_libgc_threads
+
+AC_ARG_ENABLE(win32-dllmain,
+[ --enable-win32-dllmain Define the DllMain function in win32_threads.c even if the collector is not built as a dll],
+)
+
+AC_ARG_ENABLE(parallel-mark,
+[ --enable-parallel-mark parallelize marking and free list construction],
+ [case "$THREADS" in
+ no | none | single)
+ AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
+ ;;
+ esac]
+)
+
+AC_ARG_ENABLE(cplusplus,
+[ --enable-cplusplus install C++ support],
+)
+
+AM_CPPFLAGS=-I${srcdir}/include
+THREADDLLIBS=
+## Libraries needed to support dynamic loading and/or threads.
+case "$THREADS" in
+ no | none | single)
+ THREADS=none
+ ;;
+ posix | pthreads)
+ THREADS=posix
+ AC_CHECK_LIB(pthread, pthread_self, THREADDLLIBS="-lpthread",,)
+ case "$host" in
+ x86-*-linux* | ia64-*-linux* | i386-*-linux* | i486-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha*-*-linux* | s390*-*-linux* | sparc*-*-linux* | powerpc-*-linux*)
+ AC_DEFINE(GC_LINUX_THREADS)
+ AC_DEFINE(_REENTRANT)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ ;;
+ *-*-linux* | *-*-nacl*)
+ AC_DEFINE(GC_LINUX_THREADS)
+ AC_DEFINE(_REENTRANT)
+ ;;
+ *-*-aix*)
+ AC_DEFINE(GC_AIX_THREADS)
+ AC_DEFINE(_REENTRANT)
+ ;;
+ *-*-hpux*)
+ AC_MSG_WARN("Only HP/UX 11 threads are supported.")
+ AC_DEFINE(GC_HPUX_THREADS)
+ AC_DEFINE(_POSIX_C_SOURCE,199506L)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ THREADDLLIBS="-lpthread -lrt"
+ ;;
+ *-*-freebsd*)
+ AC_DEFINE(GC_FREEBSD_THREADS)
+ if test "x$PTHREAD_CFLAGS" != "x"; then
+ AM_CPPFLAGS="$AM_CPPFLAGS $PTHREAD_CFLAGS"
+ fi
+ if test "x$PTHREAD_LIBS" = "x"; then
+ THREADDLLIBS=-pthread
+ else
+ THREADDLLIBS="$PTHREAD_LIBS"
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ ;;
+ *-*-solaris*)
+ AC_DEFINE(GC_SOLARIS_THREADS)
+ AC_DEFINE(GC_SOLARIS_PTHREADS)
+ ;;
+ *-*-irix*)
+ AC_DEFINE(GC_IRIX_THREADS)
+ ;;
+ *-*-cygwin*)
+ AC_DEFINE(GC_WIN32_THREADS)
+ ;;
+ *-*-darwin*)
+ AC_DEFINE(GC_DARWIN_THREADS)
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ ;;
+ *-*-netbsd*)
+ AC_DEFINE(GC_NETBSD_THREADS)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ ;;
+ *-*-openbsd*)
+ AC_DEFINE(GC_OPENBSD_THREADS)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ ;;
+ *-*-osf*)
+ AC_DEFINE(GC_OSF1_THREADS)
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ # May want to enable it in other cases, too.
+ # Measurements havent yet been done.
+ fi
+ AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ THREADDLLIBS="-lpthread -lrt"
+ ;;
+ *)
+ AC_MSG_ERROR("Pthreads not supported by the GC on this platform.")
+ ;;
+ esac
+ ;;
+ win32)
+ AC_DEFINE(GC_WIN32_THREADS)
+ dnl Wine getenv may not return NULL for missing entry
+ AC_DEFINE(NO_GETENV)
+ if test "${enable_win32_dllmain}" = yes; then
+ AC_DEFINE(GC_INSIDE_DLL)
+ fi
+ ;;
+ dgux386)
+ THREADS=dgux386
+ AC_MSG_RESULT($THREADDLLIBS)
+ # Use pthread GCC switch
+ THREADDLLIBS=-pthread
+ if test "${enable_parallel_mark}" = yes; then
+ AC_DEFINE(PARALLEL_MARK)
+ fi
+ AC_DEFINE(THREAD_LOCAL_ALLOC)
+ AC_DEFINE(GC_DGUX386_THREADS)
+ AC_DEFINE(DGUX_THREADS)
+ # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
+ AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
+ ;;
+ aix)
+ THREADS=posix
+ THREADDLLIBS=-lpthread
+ AC_DEFINE(GC_AIX_THREADS)
+ AC_DEFINE(_REENTRANT)
+ ;;
+ decosf1 | irix | mach | os2 | solaris | dce | vxworks)
+ AC_MSG_ERROR(thread package $THREADS not yet supported)
+ ;;
+ *)
+ AC_MSG_ERROR($THREADS is an unknown thread package)
+ ;;
+esac
+AC_SUBST(THREADDLLIBS)
+
+case "$host" in
+ powerpc-*-darwin*)
+ powerpc_darwin=true
+ ;;
+esac
+AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
+
+# Check if the GCC builtin __sync_bool_compare_and_swap is available.
+# It is preferred in gc_locks.h for PPC as GCC 4.4 has a problem with the inline assembly there.
+AC_MSG_CHECKING(for __sync_bool_compare_and_swap)
+AC_TRY_COMPILE([],[
+volatile unsigned int foo = 0;
+int main(int argc, char** argv) {
+ unsigned int r1 = __sync_bool_compare_and_swap(&foo, 0, 1);
+ return 0;
+}
+], [
+AC_MSG_RESULT(yes)
+AC_DEFINE(HAS___SYNC_BOOL_COMPARE_AND_SWAP)
+], [
+AC_MSG_RESULT(no)
+])
+
+AC_MSG_CHECKING(for xlc)
+AC_TRY_COMPILE([],[
+ #ifndef __xlC__
+ # error
+ #endif
+], [compiler_xlc=yes], [compiler_xlc=no])
+AC_MSG_RESULT($compiler_xlc)
+AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes)
+if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then
+ # the darwin stack-frame-walking code is completely broken on xlc
+ AC_DEFINE(DARWIN_DONT_PARSE_STACK)
+fi
+
+# We never want libdl on darwin. It is a fake libdl that just ends up making
+# dyld calls anyway
+case "$host" in
+ *-*-darwin*) ;;
+ *)
+ AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl")
+ ;;
+esac
+
+AC_SUBST(EXTRA_TEST_LIBS)
+
+target_all=libgc.la
+AC_SUBST(target_all)
+
+dnl If the target is an eCos system, use the appropriate eCos
+dnl I/O routines.
+dnl FIXME: this should not be a local option but a global target
+dnl system; at present there is no eCos target.
+TARGET_ECOS="no"
+AC_ARG_WITH(ecos,
+[ --with-ecos enable runtime eCos target support],
+TARGET_ECOS="$with_ecos"
+)
+
+addobjs=
+addlibs=
+addincludes=
+addtests=
+CXXAM_CPPFLAGS=
+case "$TARGET_ECOS" in
+ no)
+ ;;
+ *)
+ AC_DEFINE(ECOS)
+ CXXINCLUDES="-I${TARGET_ECOS}/include"
+ addobjs="$addobjs ecos.lo"
+ ;;
+esac
+
+if test "${enable_cplusplus}" = yes; then
+ addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
+ addtests="$addtests test_cpp"
+fi
+
+AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
+
+AC_SUBST(CXX)
+
+AC_SUBST(AM_CPPFLAGS)
+AC_SUBST(CXXINCLUDES)
+
+# Configuration of shared libraries
+#
+AC_MSG_CHECKING(whether to build shared libraries)
+AC_ENABLE_SHARED
+
+case "$host" in
+ alpha-*-openbsd*)
+ enable_shared=no
+ AC_MSG_RESULT(no)
+ ;;
+ *)
+ AC_MSG_RESULT(yes)
+ ;;
+esac
+
+# Configuration of machine-dependent code
+#
+AC_MSG_CHECKING(which machine-dependent code should be used)
+machdep=
+case "$host" in
+ alpha-*-openbsd*)
+ machdep="alpha_mach_dep.lo"
+ if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
+ AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
+ fi
+ ;;
+ alpha*-*-linux*)
+ machdep="alpha_mach_dep.lo"
+ ;;
+ i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
+ AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
+ ;;
+ mipstx39-*-elf*)
+ machdep="mips_ultrix_mach_dep.lo"
+ AC_DEFINE(STACKBASE, __stackbase)
+ AC_DEFINE(DATASTART_IS_ETEXT)
+ ;;
+ mips-dec-ultrix*)
+ machdep="mips_ultrix_mach-dep.lo"
+ ;;
+ mips-nec-sysv*|mips-unknown-sysv*)
+ ;;
+ mips*-*-linux*)
+ ;;
+ mips-*-*)
+ machdep="mips_sgi_mach_dep.lo"
+ AC_DEFINE(NO_EXECUTE_PERMISSION)
+ ;;
+ sparc-*-netbsd*)
+ machdep="sparc_netbsd_mach_dep.lo"
+ ;;
+ sparc-sun-solaris2.3)
+ machdep="sparc_mach_dep.lo"
+ AC_DEFINE(SUNOS53_SHARED_LIB)
+ ;;
+ sparc*-sun-solaris2.*)
+ machdep="sparc_mach_dep.lo"
+ ;;
+ ia64-*-*)
+ machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
+ target_ia64=true
+ ;;
+ *-*-nacl*)
+ AC_DEFINE(NO_EXECUTE_PERMISSION)
+ ;;
+esac
+if test x"$machdep" = x; then
+AC_MSG_RESULT($machdep)
+ machdep="mach_dep.lo"
+fi
+addobjs="$addobjs $machdep"
+#
+# Adding object files directly to _LIBADD breaks -j builds, so we need to add the sources
+# instead, but _SOURCES can't contain autoconf substitutions, so add them using automake
+# conditionals.
+#
+#AC_SUBST(addobjs)
+AC_SUBST(addincludes)
+AC_SUBST(addlibs)
+AC_SUBST(addtests)
+
+AM_CONDITIONAL(TARGET_IA64,test x$target_ia64 = xtrue)
+
+AC_PROG_LIBTOOL
+# Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
+DOLT
+
+#
+# Check for AViiON Machines running DGUX
+#
+ac_is_dgux=no
+AC_CHECK_HEADER(sys/dg_sys_info.h,
+[ac_is_dgux=yes;])
+
+ ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
+if test $ac_is_dgux = yes; then
+ if test "$enable_full_debug" = "yes"; then
+ CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+ CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+ else
+ CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+ CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
+ fi
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CXXFLAGS)
+fi
+
+dnl We use these options to decide which functions to include.
+AC_ARG_WITH(target-subdir,
+[ --with-target-subdir=SUBDIR
+ configuring with a cross compiler])
+AC_ARG_WITH(cross-host,
+[ --with-cross-host=HOST configuring with a cross compiler])
+
+# automake wants to see AC_EXEEXT. But we don't need it. And having
+# it is actually a problem, because the compiler we're passed can't
+# necessarily do a full link. So we fool automake here.
+if false; then
+ # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
+ # to nothing, so nothing would remain between `then' and `fi' if it
+ # were not for the `:' below.
+ :
+ AC_EXEEXT
+fi
+
+AC_MSG_CHECKING([for threads package to use])
+AC_MSG_RESULT($THREADS)
+
+dnl As of 4.13a2, the collector will not properly work on Solaris when
+dnl built with gcc and -O. So we remove -O in the appropriate case.
+dnl Not needed anymore on Solaris.
+AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
+case "$host" in
+ *aix*)
+ if test "$GCC" = yes; then
+ AC_MSG_RESULT(yes)
+ new_CFLAGS=
+ for i in $CFLAGS; do
+ case "$i" in
+ -O*)
+ ;;
+ *)
+ new_CFLAGS="$new_CFLAGS $i"
+ ;;
+ esac
+ done
+ CFLAGS="$new_CFLAGS"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ ;;
+ *) AC_MSG_RESULT(no) ;;
+esac
+
+dnl We need to override the top-level CFLAGS. This is how we do it.
+MY_CFLAGS="$CFLAGS"
+AC_SUBST(MY_CFLAGS)
+
+dnl Include defines that have become de facto standard.
+dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
+AC_DEFINE(SILENT)
+AC_DEFINE(NO_SIGNALS)
+AC_DEFINE(NO_EXECUTE_PERMISSION)
+dnl AC_DEFINE(ALL_INTERIOR_POINTERS)
+
+dnl By default, make the library as general as possible.
+AC_DEFINE(JAVA_FINALIZATION)
+AC_DEFINE(GC_GCJ_SUPPORT)
+AC_DEFINE(ATOMIC_UNCOLLECTABLE)
+
+dnl This is something of a hack. When cross-compiling we turn off
+dnl some functionality. We also enable the "small" configuration.
+dnl These is only correct when targetting an embedded system. FIXME.
+if test -n "${with_cross_host}"; then
+ AC_DEFINE(NO_SIGSET)
+ AC_DEFINE(NO_CLOCK)
+ AC_DEFINE(SMALL_CONFIG)
+ AC_DEFINE(NO_DEBUGGING)
+fi
+
+UNWINDLIBS=
+AC_ARG_ENABLE(full-debug,
+[ --enable-full-debug include full support for pointer backtracing etc.],
+[ if test "$enable_full_debug" = "yes"; then
+ AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.")
+ AC_DEFINE(KEEP_BACK_PTRS)
+ AC_DEFINE(DBG_HDRS_ALL)
+ case $host in
+ ia64-*-linux* )
+ AC_DEFINE(MAKE_BACK_GRAPH)
+ AC_DEFINE(SAVE_CALL_COUNT, 8)
+ AC_CHECK_LIB(unwind, backtrace, [
+ AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE)
+ UNWINDLIBS=-lunwind
+ AC_MSG_WARN("Client code may need to link against libunwind.")
+ ])
+ ;;
+ x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
+ AC_DEFINE(MAKE_BACK_GRAPH)
+ AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
+ AC_DEFINE(SAVE_CALL_COUNT, 8)
+ ;;
+ i[3456]86-*-dgux*)
+ AC_DEFINE(MAKE_BACK_GRAPH)
+ ;;
+ esac ]
+ fi)
+
+AC_SUBST(UNWINDLIBS)
+
+AC_ARG_ENABLE(redirect-malloc,
+[ --enable-redirect-malloc redirect malloc and friends to GC routines])
+
+if test "${enable_redirect_malloc}" = yes; then
+ if test "${enable_full_debug}" = yes; then
+ AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement)
+ AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement)
+ AC_DEFINE(REDIRECT_FREE, GC_debug_free)
+ else
+ AC_DEFINE(REDIRECT_MALLOC, GC_malloc)
+ fi
+fi
+
+AC_DEFINE(_IN_LIBGC)
+
+AC_ARG_ENABLE(gc-assertions,
+[ --enable-gc-assertions collector-internal assertion checking])
+if test "${enable_gc_assertions}" = yes; then
+ AC_DEFINE(GC_ASSERTIONS)
+fi
+
+AC_ARG_ENABLE(quiet-build, [ --enable-quiet-build Enable quiet libgc build (on by default)], enable_quiet_build=$enableval, enable_quiet_build=yes)
+AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
+
+AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
+if test x$werror_flag = xyes; then
+ WERROR_CFLAGS="-Werror"
+fi
+AC_SUBST([WERROR_CFLAGS])
+
+if test "${multilib}" = "yes"; then
+ multilib_arg="--enable-multilib"
+else
+ multilib_arg=
+fi
+
+AC_OUTPUT(Makefile
+m4/Makefile
+include/Makefile
+include/private/Makefile
+doc/Makefile,,
+srcdir=${srcdir}
+host=${host}
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+CC="${CC}"
+DEFS="$DEFS"
+)
+++ /dev/null
-# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved.
-#
-# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
-# OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
-#
-# Permission is hereby granted to use or copy this program
-# for any purpose, provided the above notices are retained on all copies.
-# Permission to modify the code and to distribute modified code is granted,
-# provided the above notices are retained, and a notice that the code was
-# modified is included with the above copyright notice.
-#
-# Original author: Tom Tromey
-# Modified by: Grzegorz Jakacki <jakacki at acm dot org>
-
-dnl Process this file with autoconf to produce configure.
-
-AC_PREREQ([2.53])
-AC_INIT([libgc-mono], [6.6], [Hans_Boehm@hp.com])
-
-AM_INIT_AUTOMAKE([1.9 no-define foreign])
-AC_CONFIG_SRCDIR(gcj_mlc.c)
-AC_CONFIG_MACRO_DIR([m4])
-AC_CANONICAL_HOST
-
-AC_SUBST(PACKAGE)
-AC_SUBST(GC_VERSION)
-
-AC_PROG_CC
-AC_PROG_CXX
-
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-dnl automake 1.6 and later need the AM_PROG_AS macro.
-ifdef([AM_PROG_AS],[AM_PROG_AS],[])
-AC_CHECK_TOOL(AR, ar)
-AC_CHECK_TOOL(RANLIB, ranlib, :) # :)
-
-AC_PROG_INSTALL
-
-AM_MAINTAINER_MODE
-
-. [$]{srcdir}/configure.host
-
-# We use a separate variable to pass down CPPFLAGS and CFLAGS from the main mono
-# configure, because of autoconf brokeness
-if test "x$CPPFLAGS_FOR_LIBGC" != "x"; then
- CPPFLAGS=$CPPFLAGS_FOR_LIBGC
-fi
-if test "x$CFLAGS_FOR_LIBGC" != "x"; then
- CFLAGS=$CFLAGS_FOR_LIBGC
-fi
-
-GC_CFLAGS=${gc_cflags}
-AC_SUBST(GC_CFLAGS)
-
-case $enable_embed_check in
-no) ;;
-*) AC_MSG_ERROR([This module is now part of 'mono' and cannot be built as a stand-alone module any longer.]) ;;
-esac
-
-THREADS=$with_libgc_threads
-
-AC_ARG_ENABLE(win32-dllmain,
-[ --enable-win32-dllmain Define the DllMain function in win32_threads.c even if the collector is not built as a dll],
-)
-
-AC_ARG_ENABLE(parallel-mark,
-[ --enable-parallel-mark parallelize marking and free list construction],
- [case "$THREADS" in
- no | none | single)
- AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
- ;;
- esac]
-)
-
-AC_ARG_ENABLE(cplusplus,
-[ --enable-cplusplus install C++ support],
-)
-
-AM_CPPFLAGS=-I${srcdir}/include
-THREADDLLIBS=
-## Libraries needed to support dynamic loading and/or threads.
-case "$THREADS" in
- no | none | single)
- THREADS=none
- ;;
- posix | pthreads)
- THREADS=posix
- AC_CHECK_LIB(pthread, pthread_self, THREADDLLIBS="-lpthread",,)
- case "$host" in
- x86-*-linux* | ia64-*-linux* | i386-*-linux* | i486-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha*-*-linux* | s390*-*-linux* | sparc*-*-linux* | powerpc-*-linux*)
- AC_DEFINE(GC_LINUX_THREADS)
- AC_DEFINE(_REENTRANT)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- ;;
- *-*-linux* | *-*-nacl*)
- AC_DEFINE(GC_LINUX_THREADS)
- AC_DEFINE(_REENTRANT)
- ;;
- *-*-aix*)
- AC_DEFINE(GC_AIX_THREADS)
- AC_DEFINE(_REENTRANT)
- ;;
- *-*-hpux*)
- AC_MSG_WARN("Only HP/UX 11 threads are supported.")
- AC_DEFINE(GC_HPUX_THREADS)
- AC_DEFINE(_POSIX_C_SOURCE,199506L)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- THREADDLLIBS="-lpthread -lrt"
- ;;
- *-*-freebsd*)
- AC_DEFINE(GC_FREEBSD_THREADS)
- if test "x$PTHREAD_CFLAGS" != "x"; then
- AM_CPPFLAGS="$AM_CPPFLAGS $PTHREAD_CFLAGS"
- fi
- if test "x$PTHREAD_LIBS" = "x"; then
- THREADDLLIBS=-pthread
- else
- THREADDLLIBS="$PTHREAD_LIBS"
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- ;;
- *-*-solaris*)
- AC_DEFINE(GC_SOLARIS_THREADS)
- AC_DEFINE(GC_SOLARIS_PTHREADS)
- ;;
- *-*-irix*)
- AC_DEFINE(GC_IRIX_THREADS)
- ;;
- *-*-cygwin*)
- AC_DEFINE(GC_WIN32_THREADS)
- ;;
- *-*-darwin*)
- AC_DEFINE(GC_DARWIN_THREADS)
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- ;;
- *-*-netbsd*)
- AC_DEFINE(GC_NETBSD_THREADS)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- ;;
- *-*-openbsd*)
- AC_DEFINE(GC_OPENBSD_THREADS)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- ;;
- *-*-osf*)
- AC_DEFINE(GC_OSF1_THREADS)
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- # May want to enable it in other cases, too.
- # Measurements havent yet been done.
- fi
- AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
- THREADDLLIBS="-lpthread -lrt"
- ;;
- *)
- AC_MSG_ERROR("Pthreads not supported by the GC on this platform.")
- ;;
- esac
- ;;
- win32)
- AC_DEFINE(GC_WIN32_THREADS)
- dnl Wine getenv may not return NULL for missing entry
- AC_DEFINE(NO_GETENV)
- if test "${enable_win32_dllmain}" = yes; then
- AC_DEFINE(GC_INSIDE_DLL)
- fi
- ;;
- dgux386)
- THREADS=dgux386
- AC_MSG_RESULT($THREADDLLIBS)
- # Use pthread GCC switch
- THREADDLLIBS=-pthread
- if test "${enable_parallel_mark}" = yes; then
- AC_DEFINE(PARALLEL_MARK)
- fi
- AC_DEFINE(THREAD_LOCAL_ALLOC)
- AC_DEFINE(GC_DGUX386_THREADS)
- AC_DEFINE(DGUX_THREADS)
- # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
- AM_CPPFLAGS="-pthread $AM_CPPFLAGS"
- ;;
- aix)
- THREADS=posix
- THREADDLLIBS=-lpthread
- AC_DEFINE(GC_AIX_THREADS)
- AC_DEFINE(_REENTRANT)
- ;;
- decosf1 | irix | mach | os2 | solaris | dce | vxworks)
- AC_MSG_ERROR(thread package $THREADS not yet supported)
- ;;
- *)
- AC_MSG_ERROR($THREADS is an unknown thread package)
- ;;
-esac
-AC_SUBST(THREADDLLIBS)
-
-case "$host" in
- powerpc-*-darwin*)
- powerpc_darwin=true
- ;;
-esac
-AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
-
-# Check if the GCC builtin __sync_bool_compare_and_swap is available.
-# It is preferred in gc_locks.h for PPC as GCC 4.4 has a problem with the inline assembly there.
-AC_MSG_CHECKING(for __sync_bool_compare_and_swap)
-AC_TRY_COMPILE([],[
-volatile unsigned int foo = 0;
-int main(int argc, char** argv) {
- unsigned int r1 = __sync_bool_compare_and_swap(&foo, 0, 1);
- return 0;
-}
-], [
-AC_MSG_RESULT(yes)
-AC_DEFINE(HAS___SYNC_BOOL_COMPARE_AND_SWAP)
-], [
-AC_MSG_RESULT(no)
-])
-
-AC_MSG_CHECKING(for xlc)
-AC_TRY_COMPILE([],[
- #ifndef __xlC__
- # error
- #endif
-], [compiler_xlc=yes], [compiler_xlc=no])
-AC_MSG_RESULT($compiler_xlc)
-AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes)
-if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then
- # the darwin stack-frame-walking code is completely broken on xlc
- AC_DEFINE(DARWIN_DONT_PARSE_STACK)
-fi
-
-# We never want libdl on darwin. It is a fake libdl that just ends up making
-# dyld calls anyway
-case "$host" in
- *-*-darwin*) ;;
- *)
- AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl")
- ;;
-esac
-
-AC_SUBST(EXTRA_TEST_LIBS)
-
-target_all=libgc.la
-AC_SUBST(target_all)
-
-dnl If the target is an eCos system, use the appropriate eCos
-dnl I/O routines.
-dnl FIXME: this should not be a local option but a global target
-dnl system; at present there is no eCos target.
-TARGET_ECOS="no"
-AC_ARG_WITH(ecos,
-[ --with-ecos enable runtime eCos target support],
-TARGET_ECOS="$with_ecos"
-)
-
-addobjs=
-addlibs=
-addincludes=
-addtests=
-CXXAM_CPPFLAGS=
-case "$TARGET_ECOS" in
- no)
- ;;
- *)
- AC_DEFINE(ECOS)
- CXXINCLUDES="-I${TARGET_ECOS}/include"
- addobjs="$addobjs ecos.lo"
- ;;
-esac
-
-if test "${enable_cplusplus}" = yes; then
- addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
- addtests="$addtests test_cpp"
-fi
-
-AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
-
-AC_SUBST(CXX)
-
-AC_SUBST(AM_CPPFLAGS)
-AC_SUBST(CXXINCLUDES)
-
-# Configuration of shared libraries
-#
-AC_MSG_CHECKING(whether to build shared libraries)
-AC_ENABLE_SHARED
-
-case "$host" in
- alpha-*-openbsd*)
- enable_shared=no
- AC_MSG_RESULT(no)
- ;;
- *)
- AC_MSG_RESULT(yes)
- ;;
-esac
-
-# Configuration of machine-dependent code
-#
-AC_MSG_CHECKING(which machine-dependent code should be used)
-machdep=
-case "$host" in
- alpha-*-openbsd*)
- machdep="alpha_mach_dep.lo"
- if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
- AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
- fi
- ;;
- alpha*-*-linux*)
- machdep="alpha_mach_dep.lo"
- ;;
- i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
- AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
- ;;
- mipstx39-*-elf*)
- machdep="mips_ultrix_mach_dep.lo"
- AC_DEFINE(STACKBASE, __stackbase)
- AC_DEFINE(DATASTART_IS_ETEXT)
- ;;
- mips-dec-ultrix*)
- machdep="mips_ultrix_mach-dep.lo"
- ;;
- mips-nec-sysv*|mips-unknown-sysv*)
- ;;
- mips*-*-linux*)
- ;;
- mips-*-*)
- machdep="mips_sgi_mach_dep.lo"
- AC_DEFINE(NO_EXECUTE_PERMISSION)
- ;;
- sparc-*-netbsd*)
- machdep="sparc_netbsd_mach_dep.lo"
- ;;
- sparc-sun-solaris2.3)
- machdep="sparc_mach_dep.lo"
- AC_DEFINE(SUNOS53_SHARED_LIB)
- ;;
- sparc*-sun-solaris2.*)
- machdep="sparc_mach_dep.lo"
- ;;
- ia64-*-*)
- machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
- target_ia64=true
- ;;
- *-*-nacl*)
- AC_DEFINE(NO_EXECUTE_PERMISSION)
- ;;
-esac
-if test x"$machdep" = x; then
-AC_MSG_RESULT($machdep)
- machdep="mach_dep.lo"
-fi
-addobjs="$addobjs $machdep"
-#
-# Adding object files directly to _LIBADD breaks -j builds, so we need to add the sources
-# instead, but _SOURCES can't contain autoconf substitutions, so add them using automake
-# conditionals.
-#
-#AC_SUBST(addobjs)
-AC_SUBST(addincludes)
-AC_SUBST(addlibs)
-AC_SUBST(addtests)
-
-AM_CONDITIONAL(TARGET_IA64,test x$target_ia64 = xtrue)
-
-AC_PROG_LIBTOOL
-# Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
-DOLT
-
-#
-# Check for AViiON Machines running DGUX
-#
-ac_is_dgux=no
-AC_CHECK_HEADER(sys/dg_sys_info.h,
-[ac_is_dgux=yes;])
-
- ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
-if test $ac_is_dgux = yes; then
- if test "$enable_full_debug" = "yes"; then
- CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
- CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
- else
- CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
- CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
- fi
- AC_SUBST(CFLAGS)
- AC_SUBST(CXXFLAGS)
-fi
-
-dnl We use these options to decide which functions to include.
-AC_ARG_WITH(target-subdir,
-[ --with-target-subdir=SUBDIR
- configuring with a cross compiler])
-AC_ARG_WITH(cross-host,
-[ --with-cross-host=HOST configuring with a cross compiler])
-
-# automake wants to see AC_EXEEXT. But we don't need it. And having
-# it is actually a problem, because the compiler we're passed can't
-# necessarily do a full link. So we fool automake here.
-if false; then
- # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
- # to nothing, so nothing would remain between `then' and `fi' if it
- # were not for the `:' below.
- :
- AC_EXEEXT
-fi
-
-AC_MSG_CHECKING([for threads package to use])
-AC_MSG_RESULT($THREADS)
-
-dnl As of 4.13a2, the collector will not properly work on Solaris when
-dnl built with gcc and -O. So we remove -O in the appropriate case.
-dnl Not needed anymore on Solaris.
-AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
-case "$host" in
- *aix*)
- if test "$GCC" = yes; then
- AC_MSG_RESULT(yes)
- new_CFLAGS=
- for i in $CFLAGS; do
- case "$i" in
- -O*)
- ;;
- *)
- new_CFLAGS="$new_CFLAGS $i"
- ;;
- esac
- done
- CFLAGS="$new_CFLAGS"
- else
- AC_MSG_RESULT(no)
- fi
- ;;
- *) AC_MSG_RESULT(no) ;;
-esac
-
-dnl We need to override the top-level CFLAGS. This is how we do it.
-MY_CFLAGS="$CFLAGS"
-AC_SUBST(MY_CFLAGS)
-
-dnl Include defines that have become de facto standard.
-dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
-AC_DEFINE(SILENT)
-AC_DEFINE(NO_SIGNALS)
-AC_DEFINE(NO_EXECUTE_PERMISSION)
-dnl AC_DEFINE(ALL_INTERIOR_POINTERS)
-
-dnl By default, make the library as general as possible.
-AC_DEFINE(JAVA_FINALIZATION)
-AC_DEFINE(GC_GCJ_SUPPORT)
-AC_DEFINE(ATOMIC_UNCOLLECTABLE)
-
-dnl This is something of a hack. When cross-compiling we turn off
-dnl some functionality. We also enable the "small" configuration.
-dnl These is only correct when targetting an embedded system. FIXME.
-if test -n "${with_cross_host}"; then
- AC_DEFINE(NO_SIGSET)
- AC_DEFINE(NO_CLOCK)
- AC_DEFINE(SMALL_CONFIG)
- AC_DEFINE(NO_DEBUGGING)
-fi
-
-UNWINDLIBS=
-AC_ARG_ENABLE(full-debug,
-[ --enable-full-debug include full support for pointer backtracing etc.],
-[ if test "$enable_full_debug" = "yes"; then
- AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.")
- AC_DEFINE(KEEP_BACK_PTRS)
- AC_DEFINE(DBG_HDRS_ALL)
- case $host in
- ia64-*-linux* )
- AC_DEFINE(MAKE_BACK_GRAPH)
- AC_DEFINE(SAVE_CALL_COUNT, 8)
- AC_CHECK_LIB(unwind, backtrace, [
- AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE)
- UNWINDLIBS=-lunwind
- AC_MSG_WARN("Client code may need to link against libunwind.")
- ])
- ;;
- x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
- AC_DEFINE(MAKE_BACK_GRAPH)
- AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
- AC_DEFINE(SAVE_CALL_COUNT, 8)
- ;;
- i[3456]86-*-dgux*)
- AC_DEFINE(MAKE_BACK_GRAPH)
- ;;
- esac ]
- fi)
-
-AC_SUBST(UNWINDLIBS)
-
-AC_ARG_ENABLE(redirect-malloc,
-[ --enable-redirect-malloc redirect malloc and friends to GC routines])
-
-if test "${enable_redirect_malloc}" = yes; then
- if test "${enable_full_debug}" = yes; then
- AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement)
- AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement)
- AC_DEFINE(REDIRECT_FREE, GC_debug_free)
- else
- AC_DEFINE(REDIRECT_MALLOC, GC_malloc)
- fi
-fi
-
-AC_DEFINE(_IN_LIBGC)
-
-AC_ARG_ENABLE(gc-assertions,
-[ --enable-gc-assertions collector-internal assertion checking])
-if test "${enable_gc_assertions}" = yes; then
- AC_DEFINE(GC_ASSERTIONS)
-fi
-
-AC_ARG_ENABLE(quiet-build, [ --enable-quiet-build Enable quiet libgc build (on by default)], enable_quiet_build=$enableval, enable_quiet_build=yes)
-AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
-
-if test "${multilib}" = "yes"; then
- multilib_arg="--enable-multilib"
-else
- multilib_arg=
-fi
-
-AC_OUTPUT(Makefile
-m4/Makefile
-include/Makefile
-include/private/Makefile
-doc/Makefile,,
-srcdir=${srcdir}
-host=${host}
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-CC="${CC}"
-DEFS="$DEFS"
-)
The file linux_threads.c is also
Copyright (c) 1998 by Fergus Henderson. All rights reserved.
-The files Makefile.am, and configure.in are
+The files Makefile.am, and configure.ac are
Copyright (c) 2001 by Red Hat Inc. All rights reserved.
Several files supporting GNU-style builds are copyrighted by the Free
many places. (Thanks to Benjamin Lerman.)
- Made win32_threads.c more tolerant of detaching a thread that it didn't
know about. (Thanks to Paul Nash.)
- - Added Makefile.am and configure.in from gcc to the distribution, with
+ - Added Makefile.am and configure.ac from gcc to the distribution, with
minimal changes. For the moment, those are just placeholders. In the
future, we're planning to switch to a GNU-style build environment for
Un*x-like systems, though the old Makefile will remain as a backup.
- Fixed a formatting error in dbg_mlc.c. Added prototype to GC_abort()
declaration. (Thanks to Michael Smith.)
- Removed "source" argument to GC_find_start(). Eliminate GC_FIND_START().
- - Added win32 recognition code in configure.in. Changed some of the
+ - Added win32 recognition code in configure.ac. Changed some of the
dllimport/export defines in gc.h. (Thanks to Adam Megacz.)
- GC_malloc_many didn't set hb_last_reclaimed when it called
GC_reclaim_generic. (I'm not sure this matters much, but ...)
Since 6.1alpha5:
- Added GC_MAXIMUM_HEAP_SIZE environment variable.
- - Fix configure.in for MIPS/LINUX. (Thanks to H.J. Lu.)
+ - Fix configure.ac for MIPS/LINUX. (Thanks to H.J. Lu.)
- Double page hash table size for -DLARGE_CONFIG.
- Integrated Bo Thorsen's X86-64 support.
- STACKBOTTOM definition for LINUX/MIPS was partially changed back.
There is also still some code duplication with pthread_support.c.
(Thread descriptors did become much smaller, since Ben Hutchings
removed the thread context from them.)
- - Integrated a Solaris configure.in patch from Rainer Orth.
+ - Integrated a Solaris configure.ac patch from Rainer Orth.
- Added GC_IGNORE_FB and associated warning to very partially address
the issue of the collector treating a mapped frame buffer as part
of the root set. (Thanks to David Peroutka for providing some
it seems to be incorrect if the preceding memory op is a load.
- Fixed print_block_list to print the correct kind number for
STUBBORN. (Thanks to Rutger Ovidus.)
- - Have configure.in generate an error if it is asked to support
+ - Have configure.ac generate an error if it is asked to support
pthreads, but doesn't know how to.
- Added Kazuhiro Inaoka's patch for Renesas M32R support.
- Have the GNU build mechanism link with -ldl. Rename THREADLIBS
GC_toggleref_array_size = w;
}
+/* Finalizer proc support */
+static void (*GC_object_finalized_proc) (GC_PTR obj);
+
+void
+GC_set_finalizer_notify_proc (void (*proc) (GC_PTR obj))
+{
+ GC_object_finalized_proc = proc;
+}
+
static void push_and_mark_object (GC_PTR p)
{
fo_set_next(prev_fo, next_fo);
}
GC_fo_entries--;
+
+ if (GC_object_finalized_proc)
+ GC_object_finalized_proc (real_ptr);
+
/* Add to list of objects awaiting finalization. */
fo_set_next(curr_fo, GC_finalize_now);
GC_finalize_now = curr_fo;
GC_API void GC_toggleref_register_callback GC_PROTO((int (*proccess_toggleref) (GC_PTR obj)));
GC_API void GC_toggleref_add (GC_PTR object, int strong_ref);
+/* finalizer callback support */
+GC_API void GC_set_finalizer_notify_proc GC_PROTO((void (*object_finalized) (GC_PTR obj)));
+
+
/* Returns !=0 if GC_invoke_finalizers has something to do. */
GC_API int GC_should_invoke_finalizers GC_PROTO((void));
/* doing something wrong. */
# ifdef _MSC_VER
# pragma warning(disable:4172)
+# endif
+# if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 408)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wreturn-local-addr"
# endif
return((ptr_t)(&dummy));
+# if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 408)
+# pragma GCC diagnostic pop
+# endif
# ifdef _MSC_VER
# pragma warning(default:4172)
# endif
-/* The version here should match that in configure/configure.in */
+/* The version here should match that in configure/configure.ac */
/* Eventually this one may become unnecessary. For now we need */
/* it to keep the old-style build process working. */
#define GC_TMP_VERSION_MAJOR 6
GC_TMP_VERSION_MINOR != GC_VERSION_MINOR || \
defined(GC_ALPHA_VERSION) != (GC_TMP_ALPHA_VERSION != GC_NOT_ALPHA) || \
defined(GC_ALPHA_VERSION) && GC_TMP_ALPHA_VERSION != GC_ALPHA_VERSION
-# error Inconsistent version info. Check README, version.h, and configure.in.
+# error Inconsistent version info. Check README, version.h, and configure.ac.
# endif
#else
# define GC_VERSION_MAJOR GC_TMP_VERSION_MAJOR
.IP \[bu] 2
\f[I]heapshot\f[]: perform a heapshot as soon as possible
.RE
+.IP \[bu] 2
+\f[I]counters\f[]: sample counters values every 1 second. This allow
+a really lightweight way to have insight in some of the runtime key
+metrics. Counters displayed in non verbose mode are : Methods from AOT,
+Methods JITted using mono JIT, Methods JITted using LLVM, Total time
+spent JITting (sec), User Time, System Time, Total Time, Working Set,
+Private Bytes, Virtual Bytes, Page Faults and CPU Load Average (1min,
+5min and 15min).
+.RE
.SS Analyzing the profile data
.PP
Currently there is a command line program (\f[I]mprof-report\f[])
.IP \[bu] 2
\f[I]bytes\f[]: the total number of bytes used by objects of the
given type
+.PP
+To change the sort order of counters, use the option:
+.PP
+\f[B]--counters-sort=MODE\f[]
+.PP
+where \f[I]MODE\f[] can be:
+.IP \[bu] 2
+\f[I]time\f[]: sort values by time then category
+.IP \[bu] 2
+\f[I]category\f[]: sort values by category then time
.SS Selecting what data to report
.PP
The profiler by default collects data about many runtime subsystems
\f[I]thread\f[]: thread information
.IP \[bu] 2
\f[I]heapshot\f[]: live heap usage at heap shots
+.IP \[bu] 2
+\f[I]counters\f[]: counters samples
.PP
It is possible to limit some of the data displayed to a timeframe
of the program execution with the option:
tests_CLEAN_FILES :=
ifndef TEST_COMPILE
-TEST_COMPILE = $(CSCOMPILE)
+TEST_COMPILE = $(subst $(test_remove),,$(CSCOMPILE))
endif
TEST_RUNTIME_WRAPPERS_PATH = $(shell dirname $(RUNTIME))/_tmpinst/bin
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>EntityFramework.SqlServer</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../ecma.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../EntityFramework/EntityFramework-net_4_5.csproj">\r
<Project>{CEE31F03-087E-4164-BBD4-990759B40C3E}</Project>\r
- <Name>EntityFramework\EntityFramework-net_4_5</Name>\r
+ <Name>EntityFramework-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>EntityFramework</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../ecma.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.CSharp/Microsoft.CSharp-net_4_5.csproj">\r
<Project>{D554618C-5D38-413A-82BA-7A70B6FC61A3}</Project>\r
- <Name>Microsoft.CSharp\Microsoft.CSharp-net_4_5</Name>\r
+ <Name>Microsoft.CSharp-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
System.Reflection.Extensions System.Reflection.Primitives System.Reflection System.Resources.ResourceManager System.Runtime.Extensions \
System.Runtime.InteropServices System.Runtime.InteropServices.WindowsRuntime System.Runtime.Numerics System.Runtime.Serialization.Json \
System.Runtime.Serialization.Primitives System.Runtime.Serialization.Xml System.Runtime System.Security.Principal System.ServiceModel.Http \
- System.ServiceModel.Primitives System.Text.Encoding.Extensions System.Text.Encoding System.Text.RegularExpressions System.Threading.Tasks.Parallel \
+ System.ServiceModel.Primitives System.ServiceModel.Security System.Text.Encoding.Extensions System.Text.Encoding System.Text.RegularExpressions System.Threading.Tasks.Parallel \
System.Threading.Tasks System.Threading.Timer System.Threading System.Xml.ReaderWriter System.Xml.XDocument System.Xml.XmlSerializer
mobile_static_SUBDIRS = $(monotouch_SUBDIRS)
dist-local: dist-default
+SUBDIRS = $(net_4_5_SUBDIRS)
doc-update-local:
@echo "not doing docs"
<AssemblyName>System.Collections.Concurrent</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Collections</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ComponentModel.Annotations</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ComponentModel.EventBasedAsync</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ComponentModel</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Diagnostics.Contracts</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Diagnostics.Debug</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Diagnostics.Tools</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Diagnostics.Tracing</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Dynamic.Runtime</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Globalization</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.IO</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Linq.Expressions</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Linq.Parallel</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Linq.Queryable</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Linq</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Net.NetworkInformation</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Net.Primitives</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Net.Requests</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ObjectModel</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection.Emit.ILGeneration</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection.Emit.Lightweight</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection.Emit</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection.Extensions</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection.Primitives</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reflection</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Resources.ResourceManager</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.Extensions</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.InteropServices.WindowsRuntime</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.InteropServices</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.Numerics</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Numerics/System.Numerics-net_4_5.csproj">\r
<Project>{14631AC9-FDC6-4561-A04C-6913947C939E}</Project>\r
- <Name>System.Numerics\System.Numerics-net_4_5</Name>\r
+ <Name>System.Numerics-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.Serialization.Json</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.Serialization.Primitives</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime.Serialization.Xml</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Runtime</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.ComponentModel.Composition/System.ComponentModel.Composition-net_4_5.csproj">\r
<Project>{51392CAD-5DCF-443F-8ECF-C9113DF3B91A}</Project>\r
- <Name>System.ComponentModel.Composition\System.ComponentModel.Composition-net_4_5</Name>\r
+ <Name>System.ComponentModel.Composition-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Security.Principal</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ServiceModel.Http</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.ServiceModel.Primitives</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
--- /dev/null
+//
+// Copyright (c) 2013 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.
+//
+
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle ("System.ServiceModel.Security.dll")]
+[assembly: AssemblyDescription ("System.ServiceModel.Security.dll")]
+[assembly: AssemblyDefaultAlias ("System.ServiceModel.Security.dll")]
+[assembly: AssemblyCompany ("Xamarin, Inc.")]
+[assembly: AssemblyProduct ("Mono Common Language Infrastructure")]
+[assembly: AssemblyCopyright ("Copyright (c) 2013 Xamarin Inc. (http://www.xamarin.com)")]
+[assembly: AssemblyVersion ("4.0.0.0")]
+[assembly: AssemblyInformationalVersion ("4.0.0.0")]
+[assembly: AssemblyFileVersion ("4.0.0.0")]
+[assembly: AssemblyDelaySign (true)]
+[assembly: AssemblyKeyFile ("../../msfinal.pub")]
+
+[assembly: ReferenceAssembly]
+
+
--- /dev/null
+MCS_BUILD_DIR = ../../../build
+
+thisdir = class/Facades/System.ServiceModel.Security
+SUBDIRS =
+include $(MCS_BUILD_DIR)/rules.make
+
+LIBRARY_SUBDIR = Facades
+LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)/Facades
+
+LIBRARY = System.ServiceModel.Security.dll
+
+KEY_FILE = ../../msfinal.pub
+SIGN_FLAGS = /delaysign /keyfile:$(KEY_FILE) /nowarn:1616,1699
+LIB_MCS_FLAGS = $(SIGN_FLAGS) /r:mscorlib /r:System.ServiceModel
+
+PLATFORM_DEBUG_FLAGS =
+
+NO_TEST = yes
+
+include $(MCS_BUILD_DIR)/library.make
+
+
--- /dev/null
+TypeForwarders.cs
+AssemblyInfo.cs
+
--- /dev/null
+//
+// Copyright (c) 2013 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.
+//
+
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Channels.LocalClientSecuritySettings))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Channels.SecurityBindingElement))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Channels.SecurityHeaderLayout))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Channels.TransportSecurityBindingElement))]
+#if !MOBILE
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.DnsEndpointIdentity))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.MessageSecurityVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.BasicSecurityProfileVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.SecureConversationVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.SecurityPolicyVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.SecurityVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.SecureConversationSecurityTokenParameters))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.SecurityTokenParameters))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.SupportingTokenParameters))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.UserNameSecurityTokenParameters))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.TrustVersion))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.SpnEndpointIdentity))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.UpnEndpointIdentity))]
+#endif
\ No newline at end of file
<AssemblyName>System.Text.Encoding.Extensions</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Text.Encoding</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Text.RegularExpressions</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Threading.Tasks.Parallel</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Threading.Tasks</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Threading.Timer</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Threading</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Xml.ReaderWriter</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Xml.XDocument</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Xml.XmlSerializer</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../../msfinal.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Common/I18N-net_4_5.csproj">\r
<Project>{C337A9A4-3797-4339-AD23-493DF062CD76}</Project>\r
- <Name>Common\I18N-net_4_5</Name>\r
+ <Name>I18N-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Common/I18N-net_4_5.csproj">\r
<Project>{C337A9A4-3797-4339-AD23-493DF062CD76}</Project>\r
- <Name>Common\I18N-net_4_5</Name>\r
+ <Name>I18N-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Common/I18N-net_4_5.csproj">\r
<Project>{C337A9A4-3797-4339-AD23-493DF062CD76}</Project>\r
- <Name>Common\I18N-net_4_5</Name>\r
+ <Name>I18N-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Common/I18N-net_4_5.csproj">\r
<Project>{C337A9A4-3797-4339-AD23-493DF062CD76}</Project>\r
- <Name>Common\I18N-net_4_5</Name>\r
+ <Name>I18N-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Common/I18N-net_4_5.csproj">\r
<Project>{C337A9A4-3797-4339-AD23-493DF062CD76}</Project>\r
- <Name>Common\I18N-net_4_5</Name>\r
+ <Name>I18N-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
@:
# Files needed to bootstrap C# compiler
-basic_files = basic.exe mscorlib.dll System.dll System.Xml.dll Mono.Security.dll System.Core.dll
+basic_files = basic.exe mscorlib.dll System.dll System.Xml.dll Mono.Security.dll System.Core.dll System.Security.dll System.Configuration.dll
monolite_files = $(basic_files:%=lib/monolite/%)
lib/monolite:
--- /dev/null
+DummyAssembly.dll
+DummyAssembly.mdb
+test_file
Test/resources/32x32.ico \
Test/System.Resources/compat_1_1.resx \
Test/System.Resources/compat_2_0.resx \
- Test/System.Windows.Forms/bitmaps/a.png
+ Test/System.Windows.Forms/bitmaps/a.png \
+ Test/DummyAssembly/AnotherSerializable.cs \
+ Test/DummyAssembly/Convertable.cs \
+ Test/DummyAssembly/Properties/AssemblyInfo.cs \
EXTRA_DISTFILES = \
README System.Windows.Forms.dll.resources \
-resource:Test/resources/32x32.ico,32x32.ico \
-nowarn:618,612
+DummyAssembly.dll:
+ $(CSCOMPILE) /target:library /out:$@ Test/DummyAssembly/AnotherSerializable.cs Test/DummyAssembly/Convertable.cs Test/DummyAssembly/Properties/AssemblyInfo.cs
+
+test-local: DummyAssembly.dll
+
include ../../build/library.make
TEST_HARNESS_EXCLUDES = -exclude=Interactive,NotWorking,ValueAdd,CAS,InetAccess
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Accessibility/Accessibility-net_4_5.csproj">\r
<Project>{FACE8136-C95A-4788-90B2-DB0ECF7A020A}</Project>\r
- <Name>Accessibility\Accessibility-net_4_5</Name>\r
+ <Name>Accessibility-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Posix/Mono.Posix-net_4_5.csproj">\r
<Project>{85A9B29B-58FF-4FBE-8998-B0A89AC22880}</Project>\r
- <Name>Mono.Posix\Mono.Posix-net_4_5</Name>\r
+ <Name>Mono.Posix-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.WebBrowser/Mono.WebBrowser-net_4_5.csproj">\r
<Project>{1D660912-8164-4499-A2D7-A3B2FE742E17}</Project>\r
- <Name>Mono.WebBrowser\Mono.WebBrowser-net_4_5</Name>\r
+ <Name>Mono.WebBrowser-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap-net_4_5.csproj">\r
<Project>{B12AABBC-30D1-4885-BF3F-A53B970F68FB}</Project>\r
- <Name>System.Runtime.Serialization.Formatters.Soap\System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
{
if (display == IntPtr.Zero) {
throw new ArgumentNullException("Display",
- "Could not open display (X-Server required. Check you DISPLAY environment variable)");
+ "Could not open display (X-Server required. Check your DISPLAY environment variable)");
}
this.display = display;
}
*/
- static byte [] header = new byte []{ 77, 83, 70, 116, 73, 76, 3, 0 };
+ static byte [] header = new byte []{ 77, 83, 70, 116, 73, 76, 1, 1 };
public void GetObjectData (SerializationInfo si, StreamingContext context)
{
MemoryStream stream = new MemoryStream ();
writer.Write ((ushort) (images [0].Width));
writer.Write ((ushort) (images [0].Height));
writer.Write (0xFFFFFFFF); //BackColor.ToArgb ()); //FIXME: should set the right one here.
- writer.Write ((ushort) 0x1009);
+ writer.Write ((ushort) 0x21);
for (int i = 0; i < 4; i++)
writer.Write ((short) -1);
hexadecimal = false;
increment = 1M;
maximum = 100M;
- minimum = 0.0M;
+ minimum = 0M;
thousands_separator = false;
Text = "0";
ErrorHandler = new XErrorHandler(HandleError);
XSetErrorHandler(ErrorHandler);
} else {
- throw new ArgumentNullException("Display", "Could not open display (X-Server required. Check you DISPLAY environment variable)");
+ throw new ArgumentNullException("Display", "Could not open display (X-Server required. Check your DISPLAY environment variable)");
}
}
#endregion // Internal Methods
ErrorHandler = new XErrorHandler (HandleError);
XSetErrorHandler (ErrorHandler);
} else {
- throw new ArgumentNullException ("Display", "Could not open display (X-Server required. Check you DISPLAY environment variable)");
+ throw new ArgumentNullException ("Display", "Could not open display (X-Server required. Check your DISPLAY environment variable)");
}
}
#endregion // Internal Methods
--- /dev/null
+//
+// AnotherSerializable.cs : Serializable Class used to test types from other
+// assemblies for resources tests
+//
+// Author:
+// Gary Barnett (gary.barnett.mono@gmail.com)
+//
+// Copyright (C) Gary Barnett (2012)
+//
+//
+// 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;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace DummyAssembly {
+ [SerializableAttribute]
+ public class AnotherSerializable : ISerializable {
+ public string name;
+ public string value;
+
+ public AnotherSerializable ()
+ {
+ }
+
+ public AnotherSerializable (string name, string value)
+ {
+ this.name = name;
+ this.value = value;
+ }
+
+ public AnotherSerializable (SerializationInfo info, StreamingContext ctxt)
+ {
+ name = (string) info.GetValue ("sername", typeof (string));
+ value = (String) info.GetValue ("servalue", typeof (string));
+ }
+
+ public AnotherSerializable (Stream stream)
+ {
+ BinaryFormatter bFormatter = new BinaryFormatter ();
+ AnotherSerializable deser = (AnotherSerializable) bFormatter.Deserialize (stream);
+ stream.Close ();
+
+ name = deser.name;
+ value = deser.value;
+ }
+
+ public void GetObjectData (SerializationInfo info, StreamingContext ctxt)
+ {
+ info.AddValue ("sername", name);
+ info.AddValue ("servalue", value);
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("name={0};value={1}", this.name, this.value);
+ }
+
+ public override bool Equals (object obj)
+ {
+ AnotherSerializable o = obj as AnotherSerializable;
+ if (o == null)
+ return false;
+ return this.name.Equals (o.name) && this.value.Equals (o.value);
+ }
+ }
+}
+
--- /dev/null
+//
+// Convertable.cs : Class with type converter used to test types from other
+// assemblies for resources tests
+//
+// Author:
+// Gary Barnett (gary.barnett.mono@gmail.com)
+//
+// Copyright (C) Gary Barnett (2012)
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.IO;
+using System.Runtime.Serialization;
+using System.ComponentModel;
+
+namespace DummyAssembly {
+
+ [SerializableAttribute]
+ [TypeConverter (typeof (ConvertableConverter))]
+ public class Convertable {
+ protected string name;
+ protected string value;
+
+ public Convertable ()
+ {
+ }
+
+ public Convertable (string name, string value)
+ {
+ this.name = name;
+ this.value = value;
+ }
+
+ public void GetObjectData (SerializationInfo info, StreamingContext ctxt)
+ {
+ info.AddValue ("sername", name);
+ info.AddValue ("servalue", value);
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("{0}\t{1}",name, value);
+ }
+
+ public override bool Equals (object obj)
+ {
+ Convertable o = obj as Convertable;
+ if (o == null)
+ return false;
+ return this.name.Equals (o.name) && this.value.Equals (o.value);
+ }
+ }
+
+ class ConvertableConverter : TypeConverter {
+ public ConvertableConverter ()
+ {
+ }
+
+ public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
+ {
+ return sourceType == typeof (string);
+ }
+
+ public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
+ {
+ return destinationType == typeof (string);
+ }
+
+ public override object ConvertFrom (ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
+ {
+ if (value.GetType() != typeof (string))
+ throw new Exception ("value not string");
+
+ string serialised = (string) value;
+
+ string [] parts = serialised.Split ('\t');
+
+ if (parts.Length != 2)
+ throw new Exception ("string in incorrect format");
+
+ Convertable convertable = new Convertable (parts [0], parts [1]);
+ return convertable;
+ }
+
+ public override object ConvertTo (ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
+ {
+ if (destinationType != typeof (String)) {
+ return base.ConvertTo (context, culture, value, destinationType);
+ }
+
+ return ((Convertable) value).ToString ();
+ }
+ }
+
+}
+
--- /dev/null
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle ("DummyAssembly")]
+[assembly: AssemblyDescription ("")]
+[assembly: AssemblyConfiguration ("")]
+[assembly: AssemblyCompany ("")]
+[assembly: AssemblyProduct ("DummyAssembly")]
+[assembly: AssemblyCopyright ("")]
+[assembly: AssemblyTrademark ("")]
+[assembly: AssemblyCulture ("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible (false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid ("c80e062b-a918-4aa5-b62c-7455ca2c56d5")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion ("1.0.0.0")]
+[assembly: AssemblyFileVersion ("1.0.0.0")]
<?xml version="1.0" encoding="utf-8"?>
<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
</xsd:complexType>
</xsd:element>
</xsd:schema>
-<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader><resheader name="version"><value>1.3</value></resheader><resheader name="reader"><value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></resheader><resheader name="writer"><value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></resheader><data name="keyboard_table" mimetype="application/x-microsoft.net.object.binary.base64"><value>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eA0AAAl5DQAACXoNAAAJew0AAAl8DQAACX0NAAAJfg0AAAl/DQAACYANAAAJgQ0AAAmCDQAAD0MBAAACAAAAD2AAAAB+AAAAD0QBAAACAAAADzEAAAAhAAAAD0UBAAACAAAADzIAAABAAAAAD0YBAAACAAAADzMAAAAjAAAAD0cBAAACAAAADzQAAAAkAAAAD0gBAAACAAAADzUAAAAlAAAAD0kBAAACAAAADzYAAABeAAAAD0oBAAACAAAADzcAAAAmAAAAD0sBAAACAAAADzgAAAAqAAAAD0wBAAACAAAADzkAAAAoAAAAD00BAAACAAAADzAAAAApAAAAD04BAAACAAAADy0AAABfAAAAD08BAAACAAAADz0AAAArAAAAD1ABAAACAAAAD3EAAABRAAAAD1EBAAACAAAAD3cAAABXAAAAD1IBAAACAAAAD2UAAABFAAAAD1MBAAACAAAAD3IAAABSAAAAD1QBAAACAAAAD3QAAABUAAAAD1UBAAACAAAAD3kAAABZAAAAD1YBAAACAAAAD3UAAABVAAAAD1cBAAACAAAAD2kAAABJAAAAD1gBAAACAAAAD28AAABPAAAAD1kBAAACAAAAD3AAAABQAAAAD1oBAAACAAAAD1sAAAB7AAAAD1sBAAACAAAAD10AAAB9AAAAD1wBAAACAAAAD2EAAABBAAAAD10BAAACAAAAD3MAAABTAAAAD14BAAACAAAAD2QAAABEAAAAD18BAAACAAAAD2YAAABGAAAAD2ABAAACAAAAD2cAAABHAAAAD2EBAAACAAAAD2gAAABIAAAAD2IBAAACAAAAD2oAAABKAAAAD2MBAAACAAAAD2sAAABLAAAAD2QBAAACAAAAD2wAAABMAAAAD2UBAAACAAAADzsAAAA6AAAAD2YBAAACAAAADycAAAAiAAAAD2cBAAACAAAAD1wAAAB8AAAAD2gBAAACAAAAD3oAAABaAAAAD2kBAAACAAAAD3gAAABYAAAAD2oBAAACAAAAD2MAAABDAAAAD2sBAAACAAAAD3YAAABWAAAAD2wBAAACAAAAD2IAAABCAAAAD20BAAACAAAAD24AAABOAAAAD24BAAACAAAAD20AAABNAAAAD28BAAACAAAADywAAAA8AAAAD3ABAAACAAAADy4AAAA+AAAAD3EBAAACAAAADy8AAAA/AAAAD3IBAAAAAAAADw9zAQAAAAAAAA8PdAEAAAIAAAAPYAAAAH4AAAAPdQEAAAIAAAAPMQAAACEAAAAPdgEAAAIAAAAPMgAAAEAAAAAPdwEAAAIAAAAPMwAAACMAAAAPeAEAAAIAAAAPNAAAACQAAAAPeQEAAAIAAAAPNQAAACUAAAAPegEAAAIAAAAPNgAAAF4AAAAPewEAAAIAAAAPNwAAACYAAAAPfAEAAAIAAAAPOAAAACoAAAAPfQEAAAIAAAAPOQAAACgAAAAPfgEAAAIAAAAPMAAAACkAAAAPfwEAAAIAAAAPLQAAAF8AAAAPgAEAAAIAAAAPPQAAACsAAAAPgQEAAAIAAAAPcQAAAFEAAAAPggEAAAIAAAAPdwAAAFcAAAAPgwEAAAIAAAAPZQAAAEUAAAAPhAEAAAIAAAAPcgAAAFIAAAAPhQEAAAIAAAAPdAAAAFQAAAAPhgEAAAIAAAAPeQAAAFkAAAAPhwEAAAIAAAAPdQAAAFUAAAAPiAEAAAIAAAAPaQAAAEkAAAAPiQEAAAIAAAAPbwAAAE8AAAAPigEAAAIAAAAPcAAAAFAAAAAPiwEAAAIAAAAPWwAAAHsAAAAPjAEAAAIAAAAPXQAAAH0AAAAPjQEAAAIAAAAPYQAAAEEAAAAPjgEAAAIAAAAPcwAAAFMAAAAPjwEAAAIAAAAPZAAAAEQAAAAPkAEAAAIAAAAPZgAAAEYAAAAPkQEAAAIAAAAPZwAAAEcAAAAPkgEAAAIAAAAPaAAAAEgAAAAPkwEAAAIAAAAPagAAAEoAAAAPlAEAAAIAAAAPawAAAEsAAAAPlQEAAAIAAAAPbAAAAEwAAAAPlgEAAAIAAAAPOwAAADoAAAAPlwEAAAIAAAAPJwAAACIAAAAPmAEAAAIAAAAPXAAAAHwAAAAPmQEAAAIAAAAPegAAAFoAAAAPmgEAAAIAAAAPeAAAAFgAAAAPmwEAAAIAAAAPYwAAAEMAAAAPnAEAAAIAAAAPdgAAAFYAAAAPnQEAAAIAAAAPYgAAAEIAAAAPngEAAAIAAAAPbgAAAE4AAAAPnwEAAAIAAAAPbQAAAE0AAAAPoAEAAAIAAAAPLAAAADwAAAAPoQEAAAIAAAAPLgAAAD4AAAAPogEAAAIAAAAPLwAAAD8AAAAPowEAAAIAAAAPPAAAAD4AAAAPpAEAAAAAAAAPD6UBAAACAAAAD2AAAAB+AAAAD6YBAAACAAAADzEAAAAhAAAAD6cBAAACAAAADzIAAABAAAAAD6gBAAACAAAADzMAAAAjAAAAD6kBAAACAAAADzQAAAAkAAAAD6oBAAACAAAADzUAAAAlAAAAD6sBAAACAAAADzYAAABeAAAAD6wBAAACAAAADzcAAAAmAAAAD60BAAACAAAADzgAAAAqAAAAD64BAAACAAAADzkAAAAoAAAAD68BAAACAAAADzAAAAApAAAAD7ABAAACAAAAD1sAAAB7AAAAD7EBAAACAAAAD10AAAB9AAAAD7IBAAACAAAADycAAAAiAAAAD7MBAAACAAAADywAAAA8AAAAD7QBAAACAAAADy4AAAA+AAAAD7UBAAACAAAAD3AAAABQAAAAD7YBAAACAAAAD3kAAABZAAAAD7cBAAACAAAAD2YAAABGAAAAD7gBAAACAAAAD2cAAABHAAAAD7kBAAACAAAAD2MAAABDAAAAD7oBAAACAAAAD3IAAABSAAAAD7sBAAACAAAAD2wAAABMAAAAD7wBAAACAAAADy8AAAA/AAAAD70BAAACAAAADz0AAAArAAAAD74BAAACAAAAD2EAAABBAAAAD78BAAACAAAAD28AAABPAAAAD8ABAAACAAAAD2UAAABFAAAAD8EBAAACAAAAD3UAAABVAAAAD8IBAAACAAAAD2kAAABJAAAAD8MBAAACAAAAD2QAAABEAAAAD8QBAAACAAAAD2gAAABIAAAAD8UBAAACAAAAD3QAAABUAAAAD8YBAAACAAAAD24AAABOAAAAD8cBAAACAAAAD3MAAABTAAAAD8gBAAACAAAADy0AAABfAAAAD8kBAAACAAAAD1wAAAB8AAAAD8oBAAACAAAADzsAAAA6AAAAD8sBAAACAAAAD3EAAABRAAAAD8wBAAACAAAAD2oAAABKAAAAD80BAAACAAAAD2sAAABLAAAAD84BAAACAAAAD3gAAABYAAAAD88BAAACAAAAD2IAAABCAAAAD9ABAAACAAAAD20AAABNAAAAD9EBAAACAAAAD3cAAABXAAAAD9IBAAACAAAAD3YAAABWAAAAD9MBAAACAAAAD3oAAABaAAAAD9QBAAAAAAAADw/VAQAAAAAAAA8P1gEAAAIAAAAPYAAAAH4AAAAP1wEAAAIAAAAPMQAAACEAAAAP2AEAAAIAAAAPMgAAAEAAAAAP2QEAAAIAAAAPMwAAACMAAAAP2gEAAAIAAAAPNAAAACQAAAAP2wEAAAIAAAAPNQAAACUAAAAP3AEAAAIAAAAPNgAAAF4AAAAP3QEAAAIAAAAPNwAAACYAAAAP3gEAAAIAAAAPOAAAACoAAAAP3wEAAAIAAAAPOQAAACgAAAAP4AEAAAIAAAAPMAAAACkAAAAP4QEAAAIAAAAPLQAAAF8AAAAP4gEAAAIAAAAPPQAAACsAAAAP4wEAAAIAAAAPXAAAAHwAAAAP5AEAAAIAAAAPcQAAAFEAAAAP5QEAAAIAAAAPdwAAAFcAAAAP5gEAAAIAAAAPZQAAAEUAAAAP5wEAAAIAAAAPcgAAAFIAAAAP6AEAAAIAAAAPdAAAAFQAAAAP6QEAAAIAAAAPeQAAAFkAAAAP6gEAAAIAAAAPdQAAAFUAAAAP6wEAAAIAAAAPaQAAAEkAAAAP7AEAAAIAAAAPbwAAAE8AAAAP7QEAAAIAAAAPcAAAAFAAAAAP7gEAAAIAAAAPWwAAAHsAAAAP7wEAAAIAAAAPXQAAAH0AAAAP8AEAAAIAAAAPYQAAAEEAAAAP8QEAAAIAAAAPcwAAAFMAAAAP8gEAAAIAAAAPZAAAAEQAAAAP8wEAAAIAAAAPZgAAAEYAAAAP9AEAAAIAAAAPZwAAAEcAAAAP9QEAAAIAAAAPaAAAAEgAAAAP9gEAAAIAAAAPagAAAEoAAAAP9wEAAAIAAAAPawAAAEsAAAAP+AEAAAIAAAAPbAAAAEwAAAAP+QEAAAIAAAAPOwAAADoAAAAP+gEAAAIAAAAPJwAAACIAAAAP+wEAAAIAAAAPegAAAFoAAAAP/AEAAAIAAAAPeAAAAFgAAAAP/QEAAAIAAAAPYwAAAEMAAAAP/gEAAAIAAAAPdgAAAFYAAAAP/wEAAAIAAAAPYgAAAEIAAAAPAAIAAAIAAAAPbgAAAE4AAAAPAQIAAAIAAAAPbQAAAE0AAAAPAgIAAAIAAAAPLAAAADwAAAAPAwIAAAIAAAAPLgAAAD4AAAAPBAIAAAIAAAAPLwAAAD8AAAAPBQIAAAAAAAAPDwYCAAAAAAAADw8HAgAAAQAAAA9gAAAADwgCAAACAAAADzEAAAAhAAAADwkCAAACAAAADzIAAAAiAAAADwoCAAACAAAADzMAAACj////DwsCAAACAAAADzQAAAAkAAAADwwCAAACAAAADzUAAAAlAAAADw0CAAACAAAADzYAAABeAAAADw4CAAACAAAADzcAAAAmAAAADw8CAAACAAAADzgAAAAqAAAADxACAAACAAAADzkAAAAoAAAADxECAAACAAAADzAAAAApAAAADxICAAACAAAADy0AAABfAAAADxMCAAACAAAADz0AAAArAAAADxQCAAACAAAAD3EAAABRAAAADxUCAAACAAAAD3cAAABXAAAADxYCAAACAAAAD2UAAABFAAAADxcCAAACAAAAD3IAAABSAAAADxgCAAACAAAAD3QAAABUAAAADxkCAAACAAAAD3kAAABZAAAADxoCAAACAAAAD3UAAABVAAAADxsCAAACAAAAD2kAAABJAAAADxwCAAACAAAAD28AAABPAAAADx0CAAACAAAAD3AAAABQAAAADx4CAAACAAAAD1sAAAB7AAAADx8CAAACAAAAD10AAAB9AAAADyACAAACAAAAD2EAAABBAAAADyECAAACAAAAD3MAAABTAAAADyICAAACAAAAD2QAAABEAAAADyMCAAACAAAAD2YAAABGAAAADyQCAAACAAAAD2cAAABHAAAADyUCAAACAAAAD2gAAABIAAAADyYCAAACAAAAD2oAAABKAAAADycCAAACAAAAD2sAAABLAAAADygCAAACAAAAD2wAAABMAAAADykCAAACAAAADzsAAAA6AAAADyoCAAACAAAADycAAABAAAAADysCAAACAAAADyMAAAB+AAAADywCAAACAAAAD3oAAABaAAAADy0CAAACAAAAD3gAAABYAAAADy4CAAACAAAAD2MAAABDAAAADy8CAAACAAAAD3YAAABWAAAADzACAAACAAAAD2IAAABCAAAADzECAAACAAAAD24AAABOAAAADzICAAACAAAAD20AAABNAAAADzMCAAACAAAADywAAAA8AAAADzQCAAACAAAADy4AAAA+AAAADzUCAAACAAAADy8AAAA/AAAADzYCAAACAAAAD1wAAAB8AAAADzcCAAAAAAAADw84AgAAAgAAAA9eAAAAsP///w85AgAAAgAAAA8xAAAAIQAAAA86AgAAAgAAAA8yAAAAIgAAAA87AgAAAgAAAA8zAAAAp////w88AgAAAgAAAA80AAAAJAAAAA89AgAAAgAAAA81AAAA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AAAvAAAADzUDAAACAAAADzgAAAAoAAAADzYDAAACAAAADzkAAAApAAAADzcDAAACAAAADzAAAAA9AAAADzgDAAACAAAADycAAAA/AAAADzkDAAACAAAAD14AAABgAAAADzoDAAACAAAAD3EAAABRAAAADzsDAAACAAAAD3cAAABXAAAADzwDAAACAAAAD2UAAABFAAAADz0DAAACAAAAD3IAAABSAAAADz4DAAACAAAAD3QAAABUAAAADz8DAAACAAAAD3oAAABaAAAAD0ADAAACAAAAD3UAAABVAAAAD0EDAAACAAAAD2kAAABJAAAAD0IDAAACAAAAD28AAABPAAAAD0MDAAACAAAAD3AAAABQAAAAD0QDAAACAAAAD+j////8////D0UDAAACAAAAD6j///8hAAAAD0YDAAACAAAAD2EAAABBAAAAD0cDAAACAAAAD3MAAABTAAAAD0gDAAACAAAAD2QAAABEAAAAD0kDAAACAAAAD2YAAABGAAAAD0oDAAACAAAAD2cAAABHAAAAD0sDAAACAAAAD2gAAABIAAAAD0wDAAACAAAAD2oAAABKAAAAD00DAAACAAAAD2sAAABLAAAAD04DAAACAAAAD2wAAABMAAAAD08DAAACAAAAD+n////2////D1ADAAACAAAAD+D////k////D1EDAAACAAAADyQAAACj////D1IDAAACAAAAD3kAAABZAAAAD1MDAAACAAAAD3gAAABYAAAAD1QDAAACAAAAD2MAAABDAAAAD1UDAAACAAAAD3YAAABWAAAAD1YDAAACAAAAD2IAAABCAAAAD1cDAAACAAAAD24AAABOAAAAD1gDAAACAAAAD20AAABNAAAAD1kDAAACAAAADywAAAA7AAAAD1oDAAACAAAADy4AAAA6AAAAD1sDAAACAAAADy0AAABfAAAAD1wDAAACAAAADzwAAAA+AAAAD10DAAAAAAAADw9eAwAAAgAAAA+n////vf///w9fAwAAAgAAAA8xAAAAIQAAAA9gAwAAAgAAAA8yAAAAIgAAAA9hAwAAAgAAAA8zAAAAIwAAAA9iAwAAAgAAAA80AAAApP///w9jAwAAAgAAAA81AAAAJQAAAA9kAwAAAgAAAA82AAAAJgAAAA9lAwAAAgAAAA83AAAALwAAAA9mAwAAAgAAAA84AAAAKAAAAA9n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D4wEAAACAAAADzgAAAAqAAAAD40EAAACAAAADzkAAAAoAAAAD44EAAACAAAADzAAAAApAAAAD48EAAACAAAADy0AAABfAAAAD5AEAAACAAAADz0AAAArAAAAD5EEAAACAAAAD3EAAABRAAAAD5IEAAACAAAAD3cAAABXAAAAD5MEAAACAAAAD2UAAABFAAAAD5QEAAACAAAAD3IAAABSAAAAD5UEAAACAAAAD3QAAABUAAAAD5YEAAACAAAAD3kAAABZAAAAD5cEAAACAAAAD3UAAABVAAAAD5gEAAACAAAAD2kAAABJAAAAD5kEAAACAAAAD28AAABPAAAAD5oEAAACAAAAD3AAAABQAAAAD5sEAAACAAAAD14AAABeAAAAD5wEAAACAAAAD7j///+o////D50EAAACAAAAD2EAAABBAAAAD54EAAACAAAAD3MAAABTAAAAD58EAAACAAAAD2QAAABEAAAAD6AEAAACAAAAD2YAAABGAAAAD6EEAAACAAAAD2cAAABHAAAAD6IEAAACAAAAD2gAAABIAAAAD6MEAAACAAAAD2oAAABKAAAAD6QEAAACAAAAD2sAAABLAAAAD6UEAAACAAAAD2wAAABMAAAAD6YEAAACAAAADzsAAAA6AAAAD6cEAAACAAAAD2AAAABgAAAAD6gEAAACAAAADzwAAAA+AAAAD6kEAAACAAAAD3oAAABaAAAAD6oEAAACAAAAD3gAAABYAAAAD6sEAAACAAAAD2MAAABDAAAAD6wEAAACAAAAD3YAAABWAAAAD60EAAACAAAAD2IAAABCAAAAD64EAAACAAAAD24AAABOAAAAD68EAAACAAAAD20AAABNAAAAD7AEAAACAAAADywAAAAnAAAAD7EEAAABAAAADy4AAAAPsgQAAAIAAAAP6f///8n///8PswQAAAIAAAAPq////7v///8PtAQAAAAAAAAPD7UEAAACAAAADy8AAABcAAAAD7YEAAAEAAAADzEAAAAhAAAAuf///6H///8PtwQAAAMAAAAPMgAAAEAAAACy////D7gEAAAEAAAADzMAAAAjAAAAs////6P///8PuQQAAAQAAAAPNAAAACQAAAC8////pP///w+6BAAAAwAAAA81AAAAJQAAAL3///8PuwQAAAMAAAAPNgAAAD8AAAC+////D7wEAAACAAAADzcAAAAmAAAAD70EAAACAAAADzgAAAAqAAAAD74EAAACAAAADzkAAAAoAAAAD78EAAACAAAADzAAAAApAAAAD8AEAAACAAAADy0AAABfAAAAD8EEAAACAAAADz0AAAArAAAAD8IEAAACAAAAD3EAAABRAAAAD8MEAAACAAAAD3cAAABXAAAAD8QEAAACAAAAD2UAAABFAAAAD8UEAAACAAAAD3IAAABSAAAAD8YEAAACAAAAD3QAAABUAAAAD8cEAAACAAAAD3kAAABZAAAAD8gEAAACAAAAD3UAAABVAAAAD8kEAAACAAAAD2kAAABJAAAAD8oEAAAEAAAAD28AAABPAAAA+P///9j///8PywQAAAQAAAAPcAAAAFAAAAD+////3v///w/MBAAAAwAAAA9eAAAAqP///6j///8PzQQAAAMAAAAP5////8f///9+AAAAD84EAAAEAAAAD2EAAABBAAAA5v///8b///8PzwQAAAQAAAAPcwAAAFMAAADf////p////w/QBAAABAAAAA9kAAAARAAAAPD////Q////D9EEAAACAAAAD2YAAABGAAAAD9IEAAACAAAAD2cAAABHAAAAD9MEAAACAAAAD2gAAABIAAAAD9QEAAACAAAAD2oAAABKAAAAD9UEAAACAAAAD2sAAABLAAAAD9YEAAACAAAAD2wAAABMAAAAD9cEAAADAAAADzsAAAA6AAAAtP///w/YBAAAAgAAAA/o////yP///w/ZBAAAAgAAAA/g////wP///w/aBAAAAgAAAA96AAAAWgAAAA/bBAAAAgAAAA94AAAAWAAAAA/cBAAABAAAAA9jAAAAQwAAAKL///+p////D90EAAACAAAAD3YAAABWAAAAD94EAAACAAAAD2IAAABCAAAAD98EAAACAAAAD24AAABOAAAAD+AEAAAEAAAAD20AAABNAAAAtf///7r///8P4QQAAAIAAAAPLAAAACcAAAAP4gQAAAQAAAAPLgAAACIAAAC3////9////w/jBAAAAgAAAA/p////yf///w/kBAAAAgAAAA/5////2f///w/lBAAAAAAAAA8P5gQAAAAAAAAPD+cEAAADAAAADyYAAAAxAAAAfAAAAA/oBAAAAwAAAA/p////MgAAAEAAAAAP6QQAAAMAAAAPIgAAADMAAAAjAAAAD+oEAAACAAAADycAAAA0AAAAD+sEAAACAAAADygAAAA1AAAAD+wEAAADAAAAD6f///82AAAAXgAAAA/tBAAAAgAAAA/o////NwAAAA/uBAAAAgAAAA8hAAAAOAAAAA/vBAAAAwAAAA/n////OQAAAHsAAAAP8AQAAAMAAAAP4P///zAAAAB9AAAAD/EEAAACAAAADykAAACw////D/IEAAACAAAADy0AAABfAAAAD/MEAAACAAAAD2EAAABBAAAAD/QEAAACAAAAD3oAAABaAAAAD/UEAAADAAAAD2UAAABFAAAApP///w/2BAAAAgAAAA9yAAAAUgAAAA/3BAAAAgAAAA90AAAAVAAAAA/4BAAAAgAAAA95AAAAWQAAAA/5BAAAAgAAAA91AAAAVQAAAA/6BAAAAgAAAA9pAAAASQAAAA/7BAAAAgAAAA9vAAAATwAAAA/8BAAAAgAAAA9wAAAAUAAAAA/9BAAAAwAAAA9eAAAAqP///1sAAAAP/gQAAAMAAAAPJAAAACoAAABdAAAAD/8EAAACAAAAD3EAAABRAAAADwAFAAADAAAAD3MAAABTAAAA3////w8BBQAAAgAAAA9kAAAARAAAAA8CBQAAAgAAAA9mAAAARgAAAA8DBQAAAgAAAA9nAAAARwAAAA8EBQAAAgAAAA9oAAAASAAAAA8FBQAAAgAAAA9qAAAASgAAAA8GBQAAAgAAAA9rAAAASwAAAA8HBQAAAgAAAA9sAAAATAAAAA8IBQAAAgAAAA9tAAAATQAAAA8JBQAAAwAAAA/5////JQAAALT///8PCgUAAAMAAAAPtf///6P///9gAAAADwsFAAACAAAAD3cAAABXAAAADwwFAAACAAAAD3gAAABYAAAADw0FAAACAAAAD2MAAABDAAAADw4FAAACAAAAD3YAAABWAAAADw8FAAACAAAAD2IAAABCAAAADxAFAAACAAAAD24AAABOAAAADxEFAAACAAAADywAAAA/AAAADxIFAAACAAAADzsAAAAuAAAADxMFAAACAAAADzoAAAAvAAAADxQFAAADAAAADz0AAAArAAAAfgAAAA8VBQAAAwAAAA88AAAAPgAAAFwAAAAPFgUAAAAAAAAPDxcFAAACAAAAD1wAAAB8AAAADxgFAAACAAAADzEAAAAhAAAADxkFAAACAAAADzIAAAAiAAAADxoFAAACAAAADzMAAAAjAAAADxsFAAACAAAADzQAAAAkAAAADxwFAAACAAAADzUAAAAlAAAADx0FAAACAAAADzYAAAAmAAAADx4FAAACAAAADzcAAAAvAAAADx8FAAACAAAADzgAAAAoAAAADyAFAAACAAAADzkAAAApAAAADyEFAAACAAAADzAAAAA9AAAADyIFAAACAAAADycAAAA/AAAADyMFAAACAAAAD6v///+7////DyQFAAACAAAAD3EAAABRAAAADyUFAAACAAAAD3cAAABXAAAADyYFAAACAAAAD2UAAABFAAAADycFAAACAAAAD3IAAABSAAAADygFAAACAAAAD3QAAABUAAAADykFAAACAAAAD3kAAABZAAAADyoFAAACAAAAD3UAAABVAAAADysFAAACAAAAD2kAAABJAAAADywFAAACAAAAD28AAABPAAAADy0FAAACAAAAD3AAAABQAAAADy4FAAACAAAADysAAAAqAAAADy8FAAACAAAAD7T///9gAAAADzAFAAACAAAAD2EAAABBAAAADzEFAAACAAAAD3MAAABTAAAADzIFAAACAAAAD2QAAABEAAAADzMFAAACAAAAD2YAAABGAAAADzQFAAACAAAAD2cAAABHAAAADzUFAAACAAAAD2gAAABIAAAADzYFAAACAAAAD2oAAABKAAAADzcFAAACAAAAD2sAAABLAAAADzgFAAACAAAAD2wAAABMAAAADzkFAAACAAAAD+f////H////DzoFAAACAAAAD7r///+q////DzsFAAACAAAAD34AAABeAAAADzwFAAACAAAAD3oAAABaAAAADz0FAAACAAAAD3gAAABYAAAADz4FAAACAAAAD2MAAABDAAAADz8FAAACAAAAD3YAAABWAAAAD0AFAAACAAAAD2IAAABCAAAAD0EFAAACAAAAD24AAABOAAAAD0IFAAACAAAAD20AAABNAAAAD0MFAAACAAAADywAAAA7AAAAD0QFAAACAAAADy4AAAA6AAAAD0UFAAACAAAADy0AAABfAAAAD0YFAAACAAAADzwAAAA+AAAAD0cFAAAAAAAADw9IBQAAAgAAAA8nAAAAIgAAAA9JBQAAAgAAAA8xAAAAIQAAAA9KBQAAAgAAAA8yAAAAQAAAAA9LBQAAAgAAAA8zAAAAIwAAAA9MBQAAAgAAAA80AAAAJAAAAA9NBQAAAgAAAA81AAAAJQAAAA9OBQAAAgAAAA82AAAAqP///w9PBQAAAgAAAA83AAAAJgAAAA9QBQAAAgAAAA84AAAAKgAAAA9RBQAAAgAAAA85AAAAKAAAAA9SBQAAAgAAAA8wAAAAKQAAAA9TBQAAAgAAAA8tAAAAXwAAAA9UBQAAAgAAAA89AAAAKwAAAA9VBQAAAgAAAA9xAAAAUQAAAA9WBQAAAgAAAA93AAAAVwAAAA9XBQAAAgAAAA9lAAAARQAAAA9YBQAAAgAAAA9yAAAAUgAAAA9ZBQAAAgAAAA90AAAAVAAAAA9aBQAAAgAAAA95AAAAWQAAAA9bBQAAAgAAAA91AAAAVQAAAA9cBQAAAgAAAA9pAAAASQAAAA9dBQAAAgAAAA9vAAAATwAAAA9eBQAAAgAAAA9wAAAAUAAAAA9fBQAAAgAAAA+0////YAAAAA9gBQAAAgAAAA9bAAAAewAAAA9hBQAAAgAAAA9hAAAAQQAAAA9iBQAAAgAAAA9zAAAAUwAAAA9jBQAAAgAAAA9kAAAARAAAAA9kBQAAAgAAAA9mAAAARgAAAA9lBQAAAgAAAA9nAAAARwAAAA9mBQAAAgAAAA9oAAAASAAAAA9nBQAAAgAAAA9qAAAASgAAAA9oBQAAAgAAAA9rAAAASwAAAA9pBQAAAgAAAA9sAAAATAAAAA9qBQAAAgAAAA/n////x////w9rBQAAAgAAAA9+AAAAXgAAAA9sBQAAAgAAAA9dAAAAfQAAAA9tBQAAAgAAAA9cAAAAfAAAAA9uBQAAAgAAAA96AAAAWgAAAA9vBQAAAgAAAA94AAAAWAAAAA9wBQAAAgAAAA9jAAAAQwAAAA9xBQAAAgAAAA92AAAAVgAAAA9yBQAAAgAAAA9iAAAAQgAAAA9zBQAAAgAAAA9uAAAATgAAAA90BQAAAgAAAA9tAAAATQAAAA91BQAAAgAAAA8sAAAAPAAAAA92BQAAAgAAAA8uAAAAPgAAAA93BQAAAgAAAA87AAAAOgAAAA94BQAAAgAAAA8vAAAAPwAAAA95BQAAAgAAAA8nAAAAIgAAAA96BQAAAwAAAA8xAAAAIQAAADkAAAAPewUAAAMAAAAPMgAAAEAAAAAyAAAAD3wFAAADAAAADzMAAAAjAAAAMwAAAA99BQAAAwAAAA80AAAAJAAAACMAAAAPfgUAAAMAAAAPNQAAACUAAAAiAAAAD38FAAADAAAADzYAAAAoAAAALAAAAA+ABQAAAgAAAA83AAAAJgAAAA+BBQAAAgAAAA84AAAAKgAAAA+CBQAAAgAAAA85AAAAKAAAAA+DBQAAAgAAAA8wAAAAKQAAAA+EBQAAAgAAAA8tAAAAXwAAAA+FBQAAAwAAAA89AAAAKwAAACcAAAAPhgUAAAIAAAAPcQAAAFEAAAAPhwUAAAIAAAAPdwAAAFcAAAAPiAUAAAIAAAAPZQAAAEUAAAAPiQUAAAIAAAAPcgAAAFIAAAAPigUAAAIAAAAPdAAAAFQAAAAPiwUAAAIAAAAPeQAAAFkAAAAPjAUAAAIAAAAPdQAAAFUAAAAPjQUAAAIAAAAPaQAAAEkAAAAPjgUAAAIAAAAPbwAAAE8AAAAPjwUAAAIAAAAPcAAAAFAAAAAPkAUAAAIAAAAPNAAAAGAAAAAPkQUAAAMAAAAPWwAAAHsAAAAqAAAAD5IFAAACAAAAD2EAAABBAAAAD5MFAAACAAAAD3MAAABTAAAAD5QFAAACAAAAD2QAAABEAAAAD5UFAAACAAAAD2YAAABGAAAAD5YFAAACAAAAD2cAAABHAAAAD5cFAAACAAAAD2gAAABIAAAAD5gFAAACAAAAD2oAAABKAAAAD5kFAAACAAAAD2sAAABLAAAAD5oFAAACAAAAD2wAAABMAAAAD5sFAAACAAAAD2cAAABHAAAAD5wFAAACAAAAD34AAABeAAAAD50FAAADAAAAD10AAAB9AAAAOgAAAA+eBQAAAgAAAA9cAAAAfAAAAA+fBQAAAgAAAA96AAAAWgAAAA+gBQAAAgAAAA94AAAAWAAAAA+hBQAAAgAAAA9jAAAAQwAAAA+iBQAAAgAAAA92AAAAVgAAAA+jBQAAAgAAAA9iAAAAQgAAAA+kBQAAAgAAAA9uAAAATgAAAA+lBQAAAgAAAA9tAAAATQAAAA+mBQAAAgAAAA8sAAAAPAAAAA+nBQAAAgAAAA8uAAAAPgAAAA+oBQAAAgAAAA87AAAAOgAAAA+pBQAAAwAAAA8vAAAAPwAAADAAAAAPqgUAAAIAAAAPp////73///8PqwUAAAIAAAAPMQAAACEAAAAPrAUAAAIAAAAPMgAAACIAAAAPrQUAAAIAAAAPMwAAACMAAAAPrgUAAAIAAAAPNAAAAKT///8PrwUAAAIAAAAPNQAAACUAAAAPsAUAAAIAAAAPNgAAACYAAAAPsQUAAAIAAAAPNwAAAC8AAAAPsgUAAAIAAAAPOAAAACgAAAAPswUAAAIAAAAPOQAAACkAAAAPtAUAAAIAAAAPMAAAAD0AAAAPtQUAAAIAAAAPKwAAAD8AAAAPtgUAAAIAAAAPtP///2AAAAAPtwUAAAIAAAAPcQAAAFEAAAAPuAUAAAIAAAAPdwAAAFcAAAAPuQUAAAIAAAAPZQAAAEUAAAAPugUAAAIAAAAPcgAAAFIAAAAPuwUAAAIAAAAPdAAAAFQAAAAPvAUAAAIAAAAPeQAAAFkAAAAPvQUAAAIAAAAPdQAAAFUAAAAPvgUAAAIAAAAPaQAAAEkAAAAPvwUAAAIAAAAPbwAAAE8AAAAPwAUAAAIAAAAPcAAAAFAAAAAPwQUAAAIAAAAP5f///8X///8PwgUAAAIAAAAPqP///14AAAAPwwUAAAIAAAAPYQAAAEEAAAAPxAUAAAIAAAAPcwAAAFMAAAAPxQUAAAIAAAAPZAAAAEQAAAAPxgUAAAIAAAAPZgAAAEYAAAAPxwUAAAIAAAAPZwAAAEcAAAAPyAUAAAIAAAAPaAAAAEgAAAAPyQUAAAIAAAAPagAAAEoAAAAPygUAAAIAAAAPawAAAEsAAAAPywUAAAIAAAAPbAAAAEwAAAAPzAUAAAIAAAAP9v///9b///8PzQUAAAIAAAAP5P///8T///8PzgUAAAIAAAAPJwAAACoAAAAPzwUAAAIAAAAPegAAAFoAAAAP0AUAAAIAAAAPeAAAAFgAAAAP0QUAAAIAAAAPYwAAAEMAAAAP0gUAAAIAAAAPdgAAAFYAAAAP0wUAAAIAAAAPYgAAAEIAAAAP1AUAAAIAAAAPbgAAAE4AAAAP1QUAAAIAAAAPbQAAAE0AAAAP1gUAAAIAAAAPLAAAADsAAAAP1wUAAAIAAAAPLgAAADoAAAAP2AUAAAIAAAAPLQAAAF8AAAAP2QUAAAIAAAAPPAAAAD4AAAAP2gUAAAAAAAAPD9sFAAAEAAAAD2AAAAB+AAAAKAAAACkAAAAP3AUAAAIAAAAPMQAAACEAAAAP3QUAAAQAAAAPMgAAAEAAAAAyAAAAPwAAAA/eBQAABAAAAA8zAAAAIwAAADMAAAArAAAAD98FAAAEAAAADzQAAAAkAAAANAAAACIAAAAP4AUAAAIAAAAPNQAAACUAAAAP4QUAAAQAAAAPNgAAAF4AAAA2AAAAPQAAAA/iBQAABAAAAA83AAAAJgAAADcAAAA6AAAAD+MFAAAEAAAADzgAAAAqAAAAOAAAAC8AAAAP5AUAAAIAAAAPOQAAACgAAAAP5QUAAAIAAAAPMAAAACkAAAAP5gUAAAQAAAAPLQAAAF8AAAAtAAAASQAAAA/nBQAABAAAAA89AAAAKwAAAC4AAABWAAAAD+gFAAAEAAAAD3EAAABRAAAALAAAAPv///8P6QUAAAQAAAAPdwAAAFcAAADz////0////w/qBQAABAAAAA9lAAAARQAAAOX////F////D+sFAAAEAAAAD3IAAABSAAAA6P///8j///8P7AUAAAQAAAAPdAAAAFQAAAD4////2P///w/tBQAABAAAAA95AAAAWQAAAPn////Z////D+4FAAAEAAAAD3UAAABVAAAA6v///8r///8P7wUAAAQAAAAPaQAAAEkAAADx////0f///w/wBQAABAAAAA9vAAAATwAAAOT////E////D/EFAAAEAAAAD3AAAABQAAAA5////8f///8P8gUAAAQAAAAPWwAAAHsAAAD2////1v///w/zBQAAAwAAAA9dAAAAfQAAADsAAAAP9AUAAAQAAAAPYQAAAEEAAAD8////3P///w/1BQAABAAAAA9zAAAAUwAAAP/////f////D/YFAAAEAAAAD2QAAABEAAAA4P///8D///8P9wUAAAQAAAAPZgAAAEYAAADu////zv///w/4BQAABAAAAA9nAAAARwAAAOb////G////D/kFAAAEAAAAD2gAAABIAAAA4////8P///8P+gUAAAQAAAAPagAAAEoAAADy////0v///w/7BQAABAAAAA9rAAAASwAAAO3////N////D/wFAAAEAAAAD2wAAABMAAAA4v///8L///8P/QUAAAQAAAAPOwAAADoAAADs////zP///w/+BQAABAAAAA8nAAAAIgAAAPf////X////D/8FAAAEAAAAD1wAAAB8AAAAJwAAANv///8PAAYAAAQAAAAPegAAAFoAAAD+////3v///w8BBgAABAAAAA94AAAAWAAAAOn////J////DwIGAAAEAAAAD2MAAABDAAAA+v///9r///8PAwYAAAQAAAAPdgAAAFYAAAD9////3f///w8EBgAABAAAAA9iAAAAQgAAAPT////U////DwUGAAAEAAAAD24AAABOAAAA9f///9X///8PBgYAAAQAAAAPbQAAAE0AAADv////z////w8HBgAABAAAAA8sAAAAPAAAAPD////Q////DwgGAAAEAAAADy4AAAA+AAAA6////8v///8PCQYAAAQAAAAPLwAAAD8AAADh////wf///w8KBgAAAgAAAA88AAAAPgAAAA8LBgAAAAAAAA8PDAYAAAQAAAAPYAAAAH4AAAD3////1////w8NBgAAAgAAAA8xAAAAIQAAAA8OBgAAAgAAAA8yAAAAQAAAAA8PBgAAAgAAAA8zAAAAIwAAAA8QBgAAAgAAAA80AAAAJAAAAA8RBgAAAgAAAA81AAAAJQAAAA8SBgAAAgAAAA82AAAAXgAAAA8TBgAAAgAAAA83AAAAJgAAAA8UBgAAAgAAAA84AAAAKgAAAA8VBgAAAgAAAA85AAAAKAAAAA8WBgAAAgAAAA8wAAAAKQAAAA8XBgAAAgAAAA8tAAAAXwAAAA8YBgAAAgAAAA89AAAAKwAAAA8ZBgAABAAAAA9xAAAAUQAAAP/////f////DxoGAAAEAAAAD3cAAABXAAAA4v///8L///8PGwYAAAQAAAAPZQAAAEUAAADl////xf///w8cBgAABAAAAA9yAAAAUgAAAPD////Q////Dx0GAAAEAAAAD3QAAABUAAAA8v///9L///8PHgYAAAQAAAAPeQAAAFkAAAD6////2v///w8fBgAABAAAAA91AAAAVQAAAPP////T////DyAGAAAEAAAAD2kAAABJAAAA6P///8j///8PIQYAAAQAAAAPbwAAAE8AAADu////zv///w8iBgAABAAAAA9wAAAAUAAAAO/////P////DyMGAAAEAAAAD1sAAAB7AAAA+P///9j///8PJAYAAAQAAAAPXQAAAH0AAAD5////2f///w8lBgAABAAAAA9hAAAAQQAAAOD////A////DyYGAAAEAAAAD3MAAABTAAAA8f///9H///8PJwYAAAQAAAAPZAAAAEQAAADk////xP///w8oBgAABAAAAA9mAAAARgAAAPT////U////DykGAAAEAAAAD2cAAABHAAAA4////8P///8PKgYAAAQAAAAPaAAAAEgAAAD1////1f///w8rBgAABAAAAA9qAAAASgAAAOn////J////DywGAAAEAAAAD2sAAABLAAAA6v///8r///8PLQYAAAQAAAAPbAAAAEwAAADr////y////w8uBgAAAgAAAA87AAAAOgAAAA8vBgAAAgAAAA8nAAAAIgAAAA8wBgAABAAAAA9cAAAAfAAAAP7////e////DzEGAAAEAAAAD3oAAABaAAAA5////8f///8PMgYAAAQAAAAPeAAAAFgAAAD8////3P///w8zBgAABAAAAA9jAAAAQwAAAPb////W////DzQGAAAEAAAAD3YAAABWAAAA5v///8b///8PNQYAAAQAAAAPYgAAAEIAAADh////wf///w82BgAABAAAAA9uAAAATgAAAO3////N////DzcGAAAEAAAAD20AAABNAAAA7P///8z///8POAYAAAIAAAAPLAAAADwAAAAPOQYAAAIAAAAPLgAAAD4AAAAPOgYAAAIAAAAPLwAAAD8AAAAPOwYAAAIAAAAPPAAAAD4AAAAPPAYAAAAAAAAPDz0GAAAEAAAAD2AAAAB+AAAAo////7P///8PPgYAAAIAAAAPMQAAACEAAAAPPwYAAAIAAAAPMgAAAEAAAAAPQAYAAAIAAAAPMwAAACMAAAAPQQYAAAIAAAAPNAAAACQAAAAPQgYAAAIAAAAPNQAAACUAAAAPQwYAAAIAAAAPNgAAAF4AAAAPRAYAAAIAAAAPNwAAACYAAAAPRQYAAAIAAAAPOAAAACoAAAAPRgYAAAIAAAAPOQAAACgAAAAPRwYAAAIAAAAPMAAAACkAAAAPSAYAAAIAAAAPLQAAAF8AAAAPSQYAAAIAAAAPPQAAACsAAAAPSgYAAAQAAAAPcQAAAFEAAADK////6v///w9LBgAABAAAAA93AAAAVwAAAMP////j////D0wGAAAEAAAAD2UAAABFAAAA1f////X///8PTQYAAAQAAAAPcgAAAFIAAADL////6////w9OBgAABAAAAA90AAAAVAAAAMX////l////D08GAAAEAAAAD3kAAABZAAAAzv///+7///8PUAYAAAQAAAAPdQAAAFUAAADH////5////w9RBgAABAAAAA9pAAAASQAAANv////7////D1IGAAAEAAAAD28AAABPAAAArv///77///8PUwYAAAQAAAAPcAAAAFAAAADa////+v///w9UBgAABAAAAA9bAAAAewAAAMj////o////D1UGAAAEAAAAD10AAAB9AAAAJwAAACcAAAAPVgYAAAQAAAAPYQAAAEEAAADG////5v///w9XBgAABAAAAA9zAAAAUwAAANn////5////D1gGAAAEAAAAD2QAAABEAAAA1/////f///8PWQYAAAQAAAAPZgAAAEYAAADB////4f///w9aBgAABAAAAA9nAAAARwAAAND////w////D1sGAAAEAAAAD2gAAABIAAAA0v////L///8PXAYAAAQAAAAPagAAAEoAAADP////7////w9dBgAABAAAAA9rAAAASwAAAMz////s////D14GAAAEAAAAD2wAAABMAAAAxP///+T///8PXwYAAAQAAAAPOwAAADoAAADW////9v///w9gBgAABAAAAA8nAAAAIgAAANz////8////D2EGAAAEAAAAD1wAAAB8AAAALwAAAHwAAAAPYgYAAAQAAAAPegAAAFoAAADR////8f///w9jBgAABAAAAA94AAAAWAAAAN7////+////D2QGAAAEAAAAD2MAAABDAAAA0/////P///8PZQYAAAQAAAAPdgAAAFYAAADN////7f///w9mBgAABAAAAA9iAAAAQgAAAKb///+2////D2cGAAAEAAAAD24AAABOAAAA1P////T///8PaAYAAAQAAAAPbQAAAE0AAADY////+P///w9pBgAABAAAAA8sAAAAPAAAAML////i////D2oGAAAEAAAADy4AAAA+AAAAwP///+D///8PawYAAAQAAAAPLwAAAD8AAAAuAAAALAAAAA9sBgAABAAAAA88AAAAPgAAAHwAAACm////D20GAAAAAAAADw9uBgAAAgAAAA9gAAAAfgAAAA9vBgAAAgAAAA8xAAAAIQAAAA9wBgAAAgAAAA8yAAAAQAAAAA9xBgAAAgAAAA8zAAAAIwAAAA9yBgAAAgAAAA80AAAAJAAAAA9zBgAAAgAAAA81AAAAJQAAAA90BgAAAgAAAA82AAAAXgAAAA91BgAAAgAAAA83AAAAJgAAAA92BgAAAgAAAA84AAAAKgAAAA93BgAAAgAAAA85AAAAKAAAAA94BgAAAgAAAA8wAAAAKQAAAA95BgAAAgAAAA8tAAAAXwAAAA96BgAAAgAAAA89AAAAKwAAAA97BgAABAAAAA9xAAAAUQAAAMr////q////D3wGAAAEAAAAD3cAAABXAAAAw////+P///8PfQYAAAQAAAAPZQAAAEUAAADV////9f///w9+BgAABAAAAA9yAAAAUgAAAMv////r////D38GAAAEAAAAD3QAAABUAAAAxf///+X///8PgAYAAAQAAAAPeQAAAFkAAADO////7v///w+BBgAABAAAAA91AAAAVQAAAMf////n////D4IGAAAEAAAAD2kAAABJAAAA2/////v///8PgwYAAAQAAAAPbwAAAE8AAADd/////f///w+EBgAABAAAAA9wAAAAUAAAANr////6////D4UGAAAEAAAAD1sAAAB7AAAAyP///+j///8PhgYAAAQAAAAPXQAAAH0AAADf/////////w+HBgAABAAAAA9hAAAAQQAAAMb////m////D4gGAAAEAAAAD3MAAABTAAAA2f////n///8PiQYAAAQAAAAPZAAAAEQAAADX////9////w+KBgAABAAAAA9mAAAARgAAAMH////h////D4sGAAAEAAAAD2cAAABHAAAA0P////D///8PjAYAAAQAAAAPaAAAAEgAAADS////8v///w+NBgAABAAAAA9qAAAASgAAAM/////v////D44GAAAEAAAAD2sAAABLAAAAzP///+z///8PjwYAAAQAAAAPbAAAAEwAAADE////5P///w+QBgAABAAAAA87AAAAOgAAANb////2////D5EGAAAEAAAADycAAAAiAAAA3P////z///8PkgYAAAIAAAAPXAAAAHwAAAAPkwYAAAQAAAAPegAAAFoAAADR////8f///w+UBgAABAAAAA94AAAAWAAAAN7////+////D5UGAAAEAAAAD2MAAABDAAAA0/////P///8PlgYAAAQAAAAPdgAAAFYAAADN////7f///w+XBgAABAAAAA9iAAAAQgAAAMn////p////D5gGAAAEAAAAD24AAABOAAAA1P////T///8PmQYAAAQAAAAPbQAAAE0AAADY////+P///w+aBgAABAAAAA8sAAAAPAAAAML////i////D5sGAAAEAAAADy4AAAA+AAAAwP///+D///8PnAYAAAIAAAAPLwAAAD8AAAAPnQYAAAAAAAAPD54GAAAAAAAADw+fBgAAAgAAAA9gAAAAfgAAAA+gBgAAAgAAAA8xAAAAIQAAAA+hBgAAAgAAAA8yAAAAQAAAAA+iBgAAAgAAAA8zAAAAIwAAAA+jBgAAAgAAAA80AAAAJAAAAA+kBgAAAgAAAA81AAAAJQAAAA+lBgAAAgAAAA82AAAAXgAAAA+mBgAAAgAAAA83AAAAJgAAAA+nBgAAAgAAAA84AAAAKgAAAA+oBgAAAgAAAA85AAAAKAAAAA+pBgAAAgAAAA8wAAAAKQAAAA+qBgAAAgAAAA8tAAAAXwAAAA+rBgAAAgAAAA89AAAAKwAAAA+sBgAABAAAAA9xAAAAUQAAAMr////q////D60GAAAEAAAAD3cAAABXAAAAw////+P///8PrgYAAAQAAAAPZQAAAEUAAADV////9f///w+vBgAABAAAAA9yAAAAUgAAAMv////r////D7AGAAAEAAAAD3QAAABUAAAAxf///+X///8PsQYAAAQAAAAPeQAAAFkAAADO////7v///w+yBgAABAAAAA91AAAAVQAAAMf////n////D7MGAAAEAAAAD2kAAABJAAAA2/////v///8PtAYAAAQAAAAPbwAAAE8AAADd/////f///w+1BgAABAAAAA9wAAAAUAAAANr////6////D7YGAAAEAAAAD1sAAAB7AAAAyP///+j///8PtwYAAAQAAAAPXQAAAH0AAADf/////////w+4BgAABAAAAA9hAAAAQQAAAMb////m////D7kGAAAEAAAAD3MAAABTAAAA2f////n///8PugYAAAQAAAAPZAAAAEQAAADX////9////w+7BgAABAAAAA9mAAAARgAAAMH////h////D7wGAAAEAAAAD2cAAABHAAAA0P////D///8PvQYAAAQAAAAPaAAAAEgAAADS////8v///w++BgAABAAAAA9qAAAASgAAAM/////v////D78GAAAEAAAAD2sAAABLAAAAzP///+z///8PwAYAAAQAAAAPbAAAAEwAAADE////5P///w/BBgAABAAAAA87AAAAOgAAANb////2////D8IGAAAEAAAADycAAAAiAAAA3P////z///8PwwYAAAIAAAAPXAAAAHwAAAAPxAYAAAQAAAAPegAAAFoAAADR////8f///w/FBgAABAAAAA94AAAAWAAAAN7////+////D8YGAAAEAAAAD2MAAABDAAAA0/////P///8PxwYAAAQAAAAPdgAAAFYAAADN////7f///w/IBgAABAAAAA9iAAAAQgAAAMn////p////D8kGAAAEAAAAD24AAABOAAAA1P////T///8PygYAAAQAAAAPbQAAAE0AAADY////+P///w/LBgAABAAAAA8sAAAAPAAAAML////i////D8wGAAAEAAAADy4AAAA+AAAAwP///+D///8PzQYAAAIAAAAPLwAAAD8AAAAPzgYAAAIAAAAPPAAAAD4AAAAPzwYAAAAAAAAPD9AGAAACAAAADygAAAApAAAAD9EGAAACAAAADzEAAAAhAAAAD9IGAAACAAAADzIAAAAiAAAAD9MGAAACAAAADzMAAAAvAAAAD9QGAAACAAAADzQAAAAkAAAAD9UGAAACAAAADzUAAAA6AAAAD9YGAAACAAAADzYAAAAsAAAAD9cGAAACAAAADzcAAAAuAAAAD9gGAAACAAAADzgAAAA7AAAAD9kGAAACAAAADzkAAAA/AAAAD9oGAAACAAAADzAAAAAlAAAAD9sGAAACAAAADy0AAABfAAAAD9wGAAACAAAADz0AAAArAAAAD90GAAACAAAAD8r////q////D94GAAACAAAAD8P////j////D98GAAACAAAAD9X////1////D+AGAAACAAAAD8v////r////D+EGAAACAAAAD8X////l////D+IGAAACAAAAD87////u////D+MGAAACAAAAD8f////n////D+QGAAACAAAAD9v////7////D+UGAAACAAAAD93////9////D+YGAAACAAAAD9r////6////D+cGAAACAAAAD8j////o////D+gGAAACAAAAD9//////////D+kGAAACAAAAD8b////m////D+oGAAACAAAAD9n////5////D+sGAAACAAAAD9f////3////D+wGAAACAAAAD8H////h////D+0GAAACAAAAD9D////w////D+4GAAACAAAAD9L////y////D+8GAAACAAAAD8/////v////D/AGAAACAAAAD8z////s////D/EGAAACAAAAD8T////k////D/IGAAACAAAAD9b////2////D/MGAAACAAAAD9z////8////D/QGAAACAAAAD1wAAAB8AAAAD/UGAAACAAAAD9H////x////D/YGAAACAAAAD97////+////D/cGAAACAAAAD9P////z////D/gGAAACAAAAD83////t////D/kGAAACAAAAD8n////p////D/oGAAACAAAAD9T////0////D/sGAAACAAAAD9j////4////D/wGAAACAAAAD8L////i////D/0GAAACAAAAD8D////g////D/4GAAACAAAADy8AAAA/AAAAD/8GAAACAAAADzwAAAA+AAAADwAHAAAAAAAADw8BBwAAAgAAAA9gAAAAfgAAAA8CBwAAAgAAAA8xAAAAIQAAAA8DBwAAAgAAAA8yAAAAQAAAAA8EBwAAAgAAAA8zAAAAIwAAAA8FBwAAAgAAAA80AAAAJAAAAA8GBwAAAgAAAA81AAAAJQAAAA8HBwAAAgAAAA82AAAAXgAAAA8IBwAAAgAAAA83AAAAJgAAAA8JBwAAAgAAAA84AAAAKgAAAA8KBwAAAgAAAA85AAAAKAAAAA8LBwAAAgAAAA8wAAAAKQAAAA8MBwAAAgAAAA8tAAAAXwAAAA8NBwAAAgAAAA89AAAAKwAAAA8OBwAABAAAAA9xAAAAUQAAAOn////J////Dw8HAAAEAAAAD3cAAABXAAAA9v///9b///8PEAcAAAQAAAAPZQAAAEUAAADz////0////w8RBwAABAAAAA9yAAAAUgAAAOr////K////DxIHAAAEAAAAD3QAAABUAAAA5f///8X///8PEwcAAAQAAAAPeQAAAFkAAADt////zf///w8UBwAABAAAAA91AAAAVQAAAOP////D////DxUHAAAEAAAAD2kAAABJAAAA+P///9j///8PFgcAAAQAAAAPbwAAAE8AAAD5////2f///w8XBwAABAAAAA9wAAAAUAAAAOf////H////DxgHAAAEAAAAD1sAAAB7AAAA9f///9X///8PGQcAAAQAAAAPXQAAAH0AAAD6////2v///w8aBwAABAAAAA9hAAAAQQAAAPT////U////DxsHAAAEAAAAD3MAAABTAAAA+////9v///8PHAcAAAQAAAAPZAAAAEQAAADi////wv///w8dBwAABAAAAA9mAAAARgAAAOD////A////Dx4HAAAEAAAAD2cAAABHAAAA7////8////8PHwcAAAQAAAAPaAAAAEgAAADw////0P///w8gBwAABAAAAA9qAAAASgAAAO7////O////DyEHAAAEAAAAD2sAAABLAAAA6////8v///8PIgcAAAQAAAAPbAAAAEwAAADk////xP///w8jBwAABAAAAA87AAAAOgAAAOb////G////DyQHAAAEAAAADycAAAAiAAAA/f///93///8PJQcAAAIAAAAPXAAAAHwAAAAPJgcAAAQAAAAPegAAAFoAAAD/////3////w8nBwAABAAAAA94AAAAWAAAAPf////X////DygHAAAEAAAAD2MAAABDAAAA8f///9H///8PKQcAAAQAAAAPdgAAAFYAAADs////zP///w8qBwAABAAAAA9iAAAAQgAAAOj////I////DysHAAAEAAAAD24AAABOAAAA8v///9L///8PLAcAAAQAAAAPbQAAAE0AAAD8////3P///w8tBwAABAAAAA8sAAAAPAAAAOH////B////Dy4HAAAEAAAADy4AAAA+AAAA/v///97///8PLwcAAAIAAAAPLwAAAD8AAAAPMAcAAAIAAAAPPAAAAD4AAAAPMQcAAAAAAAAPDzIHAAACAAAAD2AAAAB+AAAADzMHAAACAAAADzEAAAAhAAAADzQHAAACAAAADzIAAABAAAAADzUHAAACAAAADzMAAAAjAAAADzYHAAACAAAADzQAAAAkAAAADzcHAAACAAAADzUAAAAlAAAADzgHAAACAAAADzYAAABeAAAADzkHAAACAAAADzcAAAAmAAAADzoHAAACAAAADzgAAAAqAAAADzsHAAACAAAADzkAAAAoAAAADzwHAAACAAAADzAAAAApAAAADz0HAAACAAAADy0AAABfAAAADz4HAAACAAAADz0AAAArAAAADz8HAAAEAAAAD3EAAABRAAAA0f////H///8PQAcAAAQAAAAPdwAAAFcAAADX////9////w9BBwAABAAAAA9lAAAARQAAAMX////l////D0IHAAAEAAAAD3IAAABSAAAA0v////L///8PQwcAAAQAAAAPdAAAAFQAAADU////9P///w9EBwAABAAAAA95AAAAWQAAANn////5////D0UHAAAEAAAAD3UAAABVAAAA1f////X///8PRgcAAAQAAAAPaQAAAEkAAADJ////6f///w9HBwAABAAAAA9vAAAATwAAAM/////v////D0gHAAAEAAAAD3AAAABQAAAA0P////D///8PSQcAAAQAAAAPWwAAAHsAAADb////+////w9KBwAABAAAAA9dAAAAfQAAAN3////9////D0sHAAAEAAAAD2EAAABBAAAAwf///+H///8PTAcAAAQAAAAPcwAAAFMAAADT////8////w9NBwAABAAAAA9kAAAARAAAAMT////k////D04HAAAEAAAAD2YAAABGAAAAxv///+b///8PTwcAAAQAAAAPZwAAAEcAAADH////5////w9QBwAABAAAAA9oAAAASAAAAMj////o////D1EHAAAEAAAAD2oAAABKAAAAyv///+r///8PUgcAAAQAAAAPawAAAEsAAADL////6////w9TBwAABAAAAA9sAAAATAAAAMz////s////D1QHAAACAAAADzsAAAA6AAAAD1UHAAACAAAADycAAAAiAAAAD1YHAAACAAAAD1wAAAB8AAAAD1cHAAAEAAAAD3oAAABaAAAA2v////r///8PWAcAAAQAAAAPeAAAAFgAAADY////+P///w9ZBwAABAAAAA9jAAAAQwAAAMP////j////D1oHAAAEAAAAD3YAAABWAAAA1v////b///8PWwcAAAQAAAAPYgAAAEIAAADC////4v///w9cBwAABAAAAA9uAAAATgAAAM7////u////D10HAAAEAAAAD20AAABNAAAAzf///+3///8PXgcAAAIAAAAPLAAAADwAAAAPXwcAAAIAAAAPLgAAAD4AAAAPYAcAAAIAAAAPLwAAAD8AAAAPYQcAAAIAAAAPPAAAAD4AAAAPYgcAAAAAAAAPD2MHAAAEAAAAD2AAAAB+AAAArf///73///8PZAcAAAQAAAAPMQAAACEAAAAxAAAAIQAAAA9lBwAABAAAAA8yAAAAQAAAADIAAAAiAAAAD2YHAAAEAAAADzMAAAAjAAAAMwAAACcAAAAPZwcAAAQAAAAPNAAAACQAAAA0AAAAKgAAAA9oBwAABAAAAA81AAAAJQAAADUAAAA6AAAAD2kHAAAEAAAADzYAAABeAAAANgAAACwAAAAPagcAAAQAAAAPNwAAACYAAAA3AAAALgAAAA9rBwAABAAAAA84AAAAKgAAADgAAAA7AAAAD2wHAAAEAAAADzkAAAAoAAAAOQAAACgAAAAPbQcAAAQAAAAPMAAAACkAAAAwAAAAKQAAAA9uBwAABAAAAA8tAAAAXwAAAC0AAABfAAAAD28HAAAEAAAADz0AAAArAAAAPQAAACsAAAAPcAcAAAQAAAAPcQAAAFEAAADK////6v///w9xBwAABAAAAA93AAAAVwAAAMP////j////D3IHAAAEAAAAD2UAAABFAAAA1f////X///8PcwcAAAQAAAAPcgAAAFIAAADL////6////w90BwAABAAAAA90AAAAVAAAAMX////l////D3UHAAAEAAAAD3kAAABZAAAAzv///+7///8PdgcAAAQAAAAPdQAAAFUAAADH////5////w93BwAABAAAAA9pAAAASQAAANv////7////D3gHAAAEAAAAD28AAABPAAAA3f////3///8PeQcAAAQAAAAPcAAAAFAAAADa////+v///w96BwAABAAAAA9bAAAAewAAAMj////o////D3sHAAAEAAAAD10AAAB9AAAAp////7f///8PfAcAAAQAAAAPYQAAAEEAAADG////5v///w99BwAABAAAAA9zAAAAUwAAAKb///+2////D34HAAAEAAAAD2QAAABEAAAA1/////f///8PfwcAAAQAAAAPZgAAAEYAAADB////4f///w+ABwAABAAAAA9nAAAARwAAAND////w////D4EHAAAEAAAAD2gAAABIAAAA0v////L///8PggcAAAQAAAAPagAAAEoAAADP////7////w+DBwAABAAAAA9rAAAASwAAAMz////s////D4QHAAAEAAAAD2wAAABMAAAAxP///+T///8PhQcAAAQAAAAPOwAAADoAAADW////9v///w+GBwAABAAAAA8nAAAAIgAAAKT///+0////D4cHAAAEAAAAD1wAAAB8AAAAXAAAAHwAAAAPiAcAAAQAAAAPegAAAFoAAADR////8f///w+JBwAABAAAAA94AAAAWAAAAN7////+////D4oHAAAEAAAAD2MAAABDAAAA0/////P///8PiwcAAAQAAAAPdgAAAFYAAADN////7f///w+MBwAABAAAAA9iAAAAQgAAAMn////p////D40HAAAEAAAAD24AAABOAAAA1P////T///8PjgcAAAQAAAAPbQAAAE0AAADY////+P///w+PBwAABAAAAA8sAAAAPAAAAML////i////D5AHAAAEAAAADy4AAAA+AAAAwP///+D///8PkQcAAAQAAAAPLwAAAD8AAAAvAAAAPwAAAA+SBwAAAgAAAA88AAAAPgAAAA+TBwAAAAAAAA8PlAcAAAIAAAAPrf///73///8PlQcAAAIAAAAPMQAAACEAAAAPlgcAAAIAAAAPMgAAACIAAAAPlwcAAAIAAAAPMwAAACcAAAAPmAcAAAIAAAAPNAAAADsAAAAPmQcAAAIAAAAPNQAAACUAAAAPmgcAAAIAAAAPNgAAADoAAAAPmwcAAAIAAAAPNwAAAD8AAAAPnAcAAAIAAAAPOAAAACoAAAAPnQcAAAIAAAAPOQAAACgAAAAPngcAAAIAAAAPMAAAACkAAAAPnwcAAAIAAAAPLQAAAF8AAAAPoAcAAAIAAAAPPQAAACsAAAAPoQcAAAIAAAAPyv///+r///8PogcAAAIAAAAPw////+P///8PowcAAAIAAAAP1f////X///8PpAcAAAIAAAAPy////+v///8PpQcAAAIAAAAPxf///+X///8PpgcAAAIAAAAPzv///+7///8PpwcAAAIAAAAPx////+f///8PqAcAAAIAAAAP2/////v///8PqQcAAAIAAAAP3f////3///8PqgcAAAIAAAAP2v////r///8PqwcAAAIAAAAPyP///+j///8PrAcAAAIAAAAPp////7f///8PrQcAAAIAAAAPxv///+b///8PrgcAAAIAAAAPpv///7b///8PrwcAAAIAAAAP1/////f///8PsAcAAAIAAAAPwf///+H///8PsQcAAAIAAAAP0P////D///8PsgcAAAIAAAAP0v////L///8PswcAAAIAAAAPz////+////8PtAcAAAIAAAAPzP///+z///8PtQcAAAIAAAAPxP///+T///8PtgcAAAIAAAAP1v////b///8PtwcAAAIAAAAPpP///7T///8PuAcAAAIAAAAPXAAAAC8AAAAPuQcAAAIAAAAP0f////H///8PugcAAAIAAAAP3v////7///8PuwcAAAIAAAAP0/////P///8PvAcAAAIAAAAPzf///+3///8PvQcAAAIAAAAPyf///+n///8PvgcAAAIAAAAP1P////T///8PvwcAAAIAAAAP2P////j///8PwAcAAAIAAAAPwv///+L///8PwQcAAAIAAAAPwP///+D///8PwgcAAAIAAAAPLgAAACwAAAAPwwcAAAIAAAAPPAAAAD4AAAAPxAcAAAAAAAAPD8UHAAACAAAAD6P///+z////D8YHAAACAAAADzEAAAAhAAAAD8cHAAACAAAADzIAAAAiAAAAD8gHAAACAAAADzMAAAAnAAAAD8kHAAACAAAADzQAAAA7AAAAD8oHAAACAAAADzUAAAAlAAAAD8sHAAACAAAADzYAAAA6AAAAD8wHAAACAAAADzcAAAA/AAAAD80HAAACAAAADzgAAAAqAAAAD84HAAACAAAADzkAAAAoAAAAD88HAAACAAAADzAAAAApAAAAD9AHAAACAAAADy0AAABfAAAAD9EHAAACAAAADz0AAAArAAAAD9IHAAACAAAAD8r////q////D9MHAAACAAAAD8P////j////D9QHAAACAAAAD9X////1////D9UHAAACAAAAD8v////r////D9YHAAACAAAAD8X////l////D9cHAAACAAAAD87////u////D9gHAAACAAAAD8f////n////D9kHAAACAAAAD9v////7////D9oHAAACAAAAD93////9////D9sHAAACAAAAD9r////6////D9wHAAACAAAAD8j////o////D90HAAACAAAAD9//////////D94HAAACAAAAD8b////m////D98HAAACAAAAD9n////5////D+AHAAACAAAAD9f////3////D+EHAAACAAAAD8H////h////D+IHAAACAAAAD9D////w////D+MHAAACAAAAD9L////y////D+QHAAACAAAAD8/////v////D+UHAAACAAAAD8z////s////D+YHAAACAAAAD8T////k////D+cHAAACAAAAD9b////2////D+gHAAACAAAAD9z////8////D+kHAAACAAAAD1wAAAAvAAAAD+oHAAACAAAAD9H////x////D+sHAAACAAAAD97////+////D+wHAAACAAAAD9P////z////D+0HAAACAAAAD83////t////D+4HAAACAAAAD8n////p////D+8HAAACAAAAD9T////0////D/AHAAACAAAAD9j////4////D/EHAAACAAAAD8L////i////D/IHAAACAAAAD8D////g////D/MHAAACAAAADy4AAAAsAAAA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IgAAALf///8PjAgAAAMAAAAPMwAAACsAAABeAAAAD40IAAADAAAADzQAAAAhAAAAov///w+OCAAABAAAAA81AAAAJQAAADAAAACw////D48IAAADAAAADzYAAAAvAAAAsv///w+QCAAAAwAAAA83AAAAPQAAAGAAAAAPkQgAAAMAAAAPOAAAACgAAAD/////D5IIAAADAAAADzkAAAApAAAAtP///w+TCAAAAwAAAA/2////1v///73///8PlAgAAAMAAAAP/P///9z///+o////D5UIAAADAAAAD/P////T////uP///w+WCAAAAwAAAA9xAAAAUQAAAFwAAAAPlwgAAAMAAAAPdwAAAFcAAAB8AAAAD5gIAAACAAAAD2UAAABFAAAAD5kIAAACAAAAD3IAAABSAAAAD5oIAAACAAAAD3QAAABUAAAAD5sIAAACAAAAD3oAAABaAAAAD5wIAAACAAAAD3UAAABVAAAAD50IAAADAAAAD2kAAABJAAAAzf///w+eCAAAAwAAAA9vAAAATwAAAPj///8PnwgAAAIAAAAPcAAAAFAAAAAPoAgAAAMAAAAP9f///9X////3////D6EIAAADAAAAD/r////a////1////w+iCAAAAgAAAA9hAAAAQQAAAA+jCAAAAwAAAA9zAAAAUwAAAPD///8PpAgAAAMAAAAPZAAAAEQAAADQ////D6UIAAADAAAAD2YAAABGAAAAWwAAAA+mCAAAAwAAAA9nAAAARwAAAF0AAAAPpwgAAAIAAAAPaAAAAEgAAAAPqAgAAAMAAAAPagAAAEoAAADt////D6kIAAADAAAAD2sAAABLAAAAs////w+qCAAAAwAAAA9sAAAATAAAAKP///8PqwgAAAMAAAAP6f///8n///8kAAAAD6wIAAADAAAAD+H////B////3////w+tCAAAAwAAAA/7////2////6T///8PrggAAAMAAAAPeQAAAFkAAAA+AAAAD68IAAADAAAAD3gAAABYAAAAIwAAAA+wCAAAAwAAAA9jAAAAQwAAACYAAAAPsQgAAAMAAAAPdgAAAFYAAABAAAAAD7IIAAADAAAAD2IAAABCAAAAewAAAA+zCAAAAwAAAA9uAAAATgAAAH0AAAAPtAgAAAIAAAAPbQAAAE0AAAAPtQgAAAMAAAAPLAAAAD8AAAA7AAAA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TgAAAA8WCQAAAgAAAA9tAAAATQAAAA8XCQAAAgAAAA8sAAAAOwAAAA8YCQAAAgAAAA8uAAAAOgAAAA8ZCQAAAgAAAA8tAAAAXwAAAA8aCQAAAgAAAA88AAAAPgAAAA8bCQAAAAAAAA8PHAkAAAIAAAAPYAAAAH4AAAAPHQkAAAIAAAAPMQAAACEAAAAPHgkAAAIAAAAPMgAAACIAAAAPHwkAAAIAAAAPMwAAACMAAAAPIAkAAAIAAAAPNAAAACQAAAAPIQkAAAIAAAAPNQAAACUAAAAPIgkAAAIAAAAPNgAAACYAAAAPIwkAAAIAAAAPNwAAAC8AAAAPJAkAAAIAAAAPOAAAACgAAAAPJQkAAAIAAAAPOQAAACkAAAAPJgkAAAIAAAAPMAAAAD0AAAAPJwkAAAIAAAAPJwAAAD8AAAAPKAkAAAIAAAAPKwAAACoAAAAPKQkAAAIAAAAPqf///7n///8PKgkAAAIAAAAPqv///7r///8PKwkAAAIAAAAPxf///+X///8PLAkAAAIAAAAP0v////L///8PLQkAAAIAAAAP1P////T///8PLgkAAAIAAAAP2v////r///8PLwkAAAIAAAAP1f////X///8PMAkAAAIAAAAPyf///+n///8PMQkAAAIAAAAPz////+////8PMgkAAAIAAAAP0P////D///8PMwkAAAIAAAAP2/////v///8PNAkAAAIAAAAPWwAAAF0AAAAPNQkAAAIAAAAPwf///+H///8PNgkAAAIAAAAP0/////P///8PNwkAAAIAAAAPxP///+T///8POAkAAAIAAAAPxv///+b///8POQkAAAIAAAAPx////+f///8POgkAAAIAAAAPyP///+j///8POwkAAAIAAAAPqP///7j///8PPAkAAAIAAAAPy////+v///8PPQkAAAIAAAAPzP///+z///8PPgkAAAIAAAAP3v////7///8PPwkAAAIAAAAPq////7v///8PQAkAAAIAAAAPLQAAAF8AAAAPQQkAAAIAAAAPof///7H///8PQgkAAAIAAAAPr////7////8PQwkAAAIAAAAPw////+P///8PRAkAAAIAAAAP1/////f///8PRQkAAAIAAAAPwv///+L///8PRgkAAAIAAAAPzv///+7///8PRwkAAAIAAAAPzf///+3///8PSAkAAAIAAAAPLAAAADsAAAAPSQkAAAIAAAAPLgAAADoAAAAPSgkAAAIAAAAP1v////b///8PSwkAAAIAAAAPPAAAAD4AAAAPTAkAAAAAAAAPD00JAAACAAAAD2AAAAB+AAAAD04JAAACAAAADzEAAAAhAAAAD08JAAAEAAAADzIAAABAAAAAMgAAACIAAAAPUAkAAAIAAAAPMwAAACMAAAAPUQkAAAIAAAAPNAAAACQAAAAPUgkAAAIAAAAPNQAAACUAAAAPUwkAAAQAAAAPNgAAAF4AAAA2AAAAJgAAAA9UCQAABAAAAA83AAAAJgAAADcAAAAvAAAAD1UJAAAEAAAADzgAAAAqAAAAOAAAACgAAAAPVgkAAAQAAAAPOQAAACgAAAA5AAAAKQAAAA9XCQAABAAAAA8wAAAAKQAAADAAAAA9AAAAD1gJAAAEAAAADy0AAABfAAAAJwAAAD8AAAAPWQkAAAQAAAAPPQAAACsAAAArAAAAKgAAAA9aCQAABAAAAA9xAAAAUQAAAKn///+5////D1sJAAAEAAAAD3cAAABXAAAAqv///7r///8PXAkAAAQAAAAPZQAAAEUAAADF////5f///w9dCQAABAAAAA9yAAAAUgAAANL////y////D14JAAAEAAAAD3QAAABUAAAA1P////T///8PXwkAAAQAAAAPeQAAAFkAAADa////+v///w9gCQAABAAAAA91AAAAVQAAANX////1////D2EJAAAEAAAAD2kAAABJAAAAyf///+n///8PYgkAAAQAAAAPbwAAAE8AAADP////7////w9jCQAABAAAAA9wAAAAUAAAAND////w////D2QJAAAEAAAAD1sAAAB7AAAA2/////v///8PZQkAAAQAAAAPXQAAAH0AAABbAAAAXQAAAA9mCQAABAAAAA9hAAAAQQAAAMH////h////D2cJAAAEAAAAD3MAAABTAAAA0/////P///8PaAkAAAQAAAAPZAAAAEQAAADE////5P///w9pCQAABAAAAA9mAAAARgAAAMb////m////D2oJAAAEAAAAD2cAAABHAAAAx////+f///8PawkAAAQAAAAPaAAAAEgAAADI////6P///w9sCQAABAAAAA9qAAAASgAAAKj///+4////D20JAAAEAAAAD2sAAABLAAAAy////+v///8PbgkAAAQAAAAPbAAAAEwAAADM////7P///w9vCQAABAAAAA87AAAAOgAAAN7////+////D3AJAAAEAAAADycAAAAiAAAAq////7v///8PcQkAAAQAAAAPXAAAAHwAAAAtAAAAXwAAAA9yCQAABAAAAA96AAAAWgAAAKH///+x////D3MJAAAEAAAAD3gAAABYAAAAr////7////8PdAkAAAQAAAAPYwAAAEMAAADD////4////w91CQAABAAAAA92AAAAVgAAANf////3////D3YJAAAEAAAAD2IAAABCAAAAwv///+L///8PdwkAAAQAAAAPbgAAAE4AAADO////7v///w94CQAABAAAAA9tAAAATQAAAM3////t////D3kJAAAEAAAADywAAAA8AAAALAAAADsAAAAPegkAAAQAAAAPLgAAAD4AAAAuAAAAOgAAAA97CQAABAAAAA8vAAAAPwAAANb////2////D3wJAAACAAAADzwAAAA+AAAAD30JAAAAAAAADw9+CQAAAgAAAA+4////qP///w9/CQAAAgAAAA8xAAAAIQAAAA+ACQAAAgAAAA8yAAAAIgAAAA+BCQAAAgAAAA8zAAAAIwAAAA+CCQAAAgAAAA80AAAAJAAAAA+DCQAAAgAAAA81AAAAJQAAAA+ECQAAAgAAAA82AAAAJgAAAA+FCQAAAgAAAA83AAAALwAAAA+GCQAAAgAAAA84AAAAKAAAAA+HCQAAAgAAAA85AAAAKQAAAA+ICQAAAgAAAA8wAAAAPQAAAA+JCQAAAgAAAA8nAAAAPwAAAA+KCQAAAgAAAA8rAAAAKgAAAA+LCQAAAgAAAA9xAAAAUQAAAA+MCQAAAgAAAA93AAAAVwAAAA+NCQAAAgAAAA9lAAAARQAAAA+OCQAAAgAAAA9yAAAAUgAAAA+PCQAAAgAAAA90AAAAVAAAAA+QCQAAAgAAAA96AAAAWgAAAA+RCQAAAgAAAA91AAAAVQAAAA+SCQAAAgAAAA9pAAAASQAAAA+TCQAAAgAAAA9vAAAATwAAAA+UCQAAAgAAAA9wAAAAUAAAAA+VCQAAAgAAAA+5////qf///w+WCQAAAgAAAA/w////0P///w+XCQAAAgAAAA9hAAAAQQAAAA+YCQAAAgAAAA9zAAAAUwAAAA+ZCQAAAgAAAA9kAAAARAAAAA+aCQAAAgAA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D2IKAAACAAAAD2sAAABLAAAAD2MKAAACAAAAD2wAAABMAAAAD2QKAAACAAAAD/T///8iAAAAD2UKAAACAAAAD6f///8hAAAAD2YKAAACAAAAD/L///8pAAAAD2cKAAACAAAAD3oAAABaAAAAD2gKAAACAAAAD3gAAABYAAAAD2kKAAACAAAAD2MAAABDAAAAD2oKAAACAAAAD3YAAABWAAAAD2sKAAACAAAAD2IAAABCAAAAD2wKAAACAAAAD24AAABOAAAAD20KAAACAAAAD20AAABNAAAAD24KAAACAAAADywAAAA/AAAAD28KAAACAAAADy4AAAA6AAAAD3AKAAACAAAADy0AAABfAAAAD3EKAAACAAAADzwAAAA+AAAAD3IKAAAAAAAADw9zCgAAAgAAAA9gAAAAfgAAAA90CgAAAgAAAA8xAAAAIQAAAA91CgAAAgAAAA8yAAAAQAAAAA92CgAAAgAAAA8zAAAAIwAAAA93CgAAAgAAAA80AAAAJAAAAA94CgAAAgAAAA81AAAAJQAAAA95CgAAAgAAAA82AAAAXgAAAA96CgAAAgAAAA83AAAAJgAAAA97CgAAAgAAAA84AAAAKgAAAA98CgAAAgAAAA85AAAAKAAAAA99CgAAAgAAAA8wAAAAKQAAAA9+CgAAAgAAAA8tAAAAXwAAAA9/CgAAAgAAAA89AAAAKwAAAA+ACgAABAAAAA9xAAAAUQAAAOT////E////D4EKAAAEAAAAD3cAAABXAAAA7P///8z///8PggoAAAQAAAAPZQAAAEUAAADp////yf///w+DCgAABAAAAA9yAAAAUgAAAPj////Y////D4QKAAAEAAAAD3QAAABUAAAAu////6v///8PhQoAAAQAAAAPeQAAAFkAAAD9////3f///w+GCgAABAAAAA91AAAAVQAAAPn////Z////D4cKAAAEAAAAD2kAAABJAAAA7f///83///8PiAoAAAQAAAAPbwAAAE8AAADz////0////w+JCgAABAAAAA9wAAAAUAAAAPb////W////D4oKAAACAAAAD1sAAAB7AAAAD4sKAAACAAAAD10AAAB9AAAAD4wKAAAEAAAAD2EAAABBAAAA4f///8H///8PjQoAAAQAAAAPcwAAAFMAAAC5////qf///w+OCgAABAAAAA9kAAAARAAAAO/////P////D48KAAAEAAAAD2YAAABGAAAA6////8v///8PkAoAAAQAAAAPZwAAAEcAAADg////wP///w+RCgAABAAAAA9oAAAASAAAAPr////a////D5IKAAAEAAAAD2oAAABKAAAA/P///9z///8PkwoAAAQAAAAPawAAAEsAAAD0////1P///w+UCgAABAAAAA9sAAAATAAAALX///+l////D5UKAAACAAAADzsAAAA6AAAAD5YKAAACAAAADycAAAAiAAAAD5cKAAACAAAAD1wAAAB8AAAAD5gKAAAEAAAAD3oAAABaAAAAvv///67///8PmQoAAAMAAAAPeAAAAFgAAACk////D5oKAAAEAAAAD2MAAABDAAAA6P///8j///8PmwoAAAQAAAAPdgAAAFYAAADn////x////w+cCgAAAgAAAA9iAAAAQgAAAA+dCgAABAAAAA9uAAAATgAAAPL////S////D54KAAAEAAAAD20AAABNAAAA5f///8X///8PnwoAAAIAAAAPLAAAADwAAAAPoAoAAAIAAAAPLgAAAD4AAAAPoQoAAAIAAAAPLwAAAD8AAAAPogoAAAIAAAAPPAAAAD4AAAAPowoAAAAAAAAPD6QKAAABAAAADzsAAAAPpQoAAAIAAAAPKwAAADEAAAAPpgoAAAIAAAAP7P///zIAAAAPpwoAAAIAAAAPuf///zMAAAAPqAoAAAIAAAAP6P///zQAAAAPqQoAAAIAAAAP+P///zUAAAAPqgoAAAIAAAAPvv///zYAAAAPqwoAAAIAAAAP/f///zcAAAAPrAoAAAIAAAAP4f///zgAAAAPrQoAAAIAAAAP7f///zkAAAAPrgoAAAQAAAAP6f///zAAAAC9////KQAAAA+vCgAAAgAAAA89AAAAJQAAAA+wCgAAAAAAAA8PsQoAAAMAAAAPcQAAAFEAAABcAAAAD7IKAAADAAAAD3cAAABXAAAAfAAAAA+zCgAAAgAAAA9lAAAARQAAAA+0CgAAAgAAAA9yAAAAUgAAAA+1CgAAAgAAAA90AAAAVAAAAA+2CgAAAgAAAA95AAAAWQAAAA+3CgAAAgAAAA91AAAAVQAAAA+4CgAAAgAAAA9pAAAASQAAAA+5CgAAAgAAAA9vAAAATwAAAA+6CgAAAgAAAA9wAAAAUAAAAA+7CgAABAAAAA/6////LwAAAFsAAAB7AAAAD7wKAAAEAAAADykAAAAoAAAAXQAAAH0AAAAPvQoAAAIAAAAPYQAAAEEAAAAPvgoAAAMAAAAPcwAAAFMAAADw////D78KAAADAAAAD2QAAABEAAAA0P///w/ACgAAAwAAAA9mAAAARgAAAFsAAAAPwQoAAAMAAAAPZwAAAEcAAABdAAAAD8IKAAACAAAAD2gAAABIAAAAD8MKAAACAAAAD2oAAABKAAAAD8QKAAADAAAAD2sAAABLAAAAs////w/FCgAAAwAAAA9sAAAATAAAAKP///8PxgoAAAMAAAAP+f///yIAAAAkAAAAD8cKAAADAAAAD6f///8hAAAA3////w/ICgAAAgAAAA+o////JwAAAA/JCgAAAwAAAA96AAAAWgAAAD4AAAAPygoAAAMAAAAPeAAAAFgAAAAjAAAAD8sKAAADAAAAD2MAAABDAAAAJgAAAA/MCgAAAwAAAA92AAAAVgAAAEAAAAAPzQoAAAMAAAAPYgAAAEIAAAB7AAAAD84KAAADAAAAD24AAABOAAAAfQAAAA/PCgAAAgAAAA9tAAAATQAAAA/QCgAAAwAAAA8sAAAAPwAAADwAAAAP0QoAAAMAAAAPLgAAADoAAAA+AAAAD9IKAAADAAAADy0AAABfAAAAKgAAAA/TCgAABAAAAA88AAAAPgAAAFwAAAB8AAAAD9QKAAAAAAAADw/VCgAAAQAAAA87AAAAD9YKAAACAAAADysAAAAxAAAAD9cKAAACAAAAD+z///8yAAAAD9gKAAACAAAAD7n///8zAAAAD9kKAAACAAAAD+j///80AAAAD9oKAAACAAAAD/j///81AAAAD9sKAAACAAAAD77///82AAAAD9wKAAACAAAAD/3///83AAAAD90KAAACAAAAD+H///84AAAAD94KAAACAAAAD+3///85AAAAD98KAAACAAAAD+n///8wAAAAD+AKAAACAAAADz0AAAAlAAAAD+EKAAACAAAAD7T///+3////D+IKAAACAAAAD3EAAABRAAAAD+MKAAACAAAAD3cAAABXAAAAD+QKAAACAAAAD2UAAABFAAAAD+UKAAACAAAAD3IAAABSAAAAD+YKAAACAAAAD3QAAABUAAAAD+cKAAACAAAAD3oAAABaAAAAD+gKAAACAAAAD3UAAABVAAAAD+kKAAACAAAAD2kAAABJAAAAD+oKAAACAAAAD28AAABPAAAAD+sKAAACAAAAD3AAAABQAAAAD+wKAAACAAAAD/r///8vAAAAD+0KAAACAAAADykAAAAoAAAAD+4KAAACAAAAD2EAAABBAAAAD+8KAAACAAAAD3MAAABTAAAAD/AKAAACAAAAD2QAAABEAAAAD/EKAAACAAAAD2YAAABGAAAAD/IKAAACAAAAD2cAAABHAAAAD/MKAAACAAAAD2gAAABIAAAAD/QKAAACAAAAD2oAAABKAAAAD/UKAAACAAAAD2sAAABLAAAAD/YKAAACAAAAD2wAAABMAAAAD/cKAAACAAAAD/n///8iAAAAD/gKAAACAAAAD6f///8hAAAAD/kKAAACAAAAD6j///8nAAAAD/oKAAACAAAAD3kAAABZAAAAD/sKAAACAAAAD3gAAABYAAAAD/wKAAACAAAAD2MAAABDAAAAD/0KAAACAAAAD3YAAABWAAAAD/4KAAACAAAAD2IAAABCAAAAD/8KAAACAAAAD24AAABOAAAADwALAAACAAAAD20AAABNAAAADwELAAACAAAADywAAAA/AAAADwILAAACAAAADy4AAAA6AAAADwMLAAACAAAADy0AAABfAAAADwQLAAABAAAAD1wAAAAPBQsAAAAAAAAPDwYLAAABAAAADzsAAAAPBwsAAAIAAAAPKwAAADEAAAAPCAsAAAIAAAAP7P///zIAAAAPCQsAAAIAAAAPuf///zMAAAAPCgsAAAIAAAAP6P///zQAAAAPCwsAAAIAAAAP+P///zUAAAAPDAsAAAIAAAAPvv///zYAAAAPDQsAAAIAAAAP/f///zcAAAAPDgsAAAIAAAAP4f///zgAAAAPDwsAAAIAAAAP7f///zkAAAAPEAsAAAIAAAAP6f///zAAAAAPEQsAAAIAAAAPPQAAACUAAAAPEgsAAAIAAAAPtP///7f///8PEwsAAAIAAAAPcQAAAFEAAAAPFAsAAAIAAAAPdwAAAFcAAAAPFQsAAAIAAAAPZQAAAEUAAAAPFgsAAAIAAAAPcgAAAFIAAAAPFwsAAAIAAAAPdAAAAFQAAAAPGAsAAAIAAAAPeQAAAFkAAAAPGQsAAAIAAAAPdQAAAFUAAAAPGgsAAAIAAAAPaQAAAEkAAAAPGwsAAAIAAAAPbwAAAE8AAAAPHAsAAAIAAAAPcAAAAFAAAAAPHQsAAAIAAAAP+v///y8AAAAPHgsAAAIAAAAPKQAAACgAAAAPHwsAAAIAAAAPYQAAAEEAAAAPIAsAAAIAAAAPcwAAAFMAAAAPIQsAAAIAAAAPZAAAAEQAAAAPIgsAAAIAAAAPZgAAAEYAAAAPIwsAAAIAAAAPZwAAAEcAAAAPJAsAAAIAAAAPaAAAAEgAAAAPJQsAAAIAAAAPagAAAEoAAAAPJgsAAAIAAAAPawAAAEsAAAAPJwsAAAIAAAAPbAAAAEwAAAAPKAsAAAIAAAAP+f///yIAAAAPKQsAAAIAAAAPp////yEAAAAPKgsAAAIAAAAPqP///ycAAAAPKwsAAAIAAAAPegAAAFoAAAAPLAsAAAIAAAAPeAAAAFgAAAAPLQsAAAIAAAAPYwAAAEMAAAAPLgsAAAIAAAAPdgAAAFYAAAAPLwsAAAIAAAAPYgAAAEIAAAAPMAsAAAIAAAAPbgAAAE4AAAAPMQsAAAIAAAAPbQAAAE0AAAAPMgsAAAIAAAAPLAAAAD8AAAAPMwsAAAIAAAAPLgAAADoAAAAPNAsAAAIAAAAPLQAAAF8AAAAPNQsAAAEAAAAPXAAAAA82CwAAAAAAAA8PNwsAAAIAAAAPfAAAALD///8POAsAAAIAAAAPMQAAACEAAAAPOQsAAAIAAAAPMgAAACIAAAAPOgsAAAIAAAAPMwAAACMAAAAPOwsAAAIAAAAPNAAAACQAAAAPPAsAAAIAAAAPNQAAACUAAAAPPQsAAAIAAAAPNgAAACYAAAAPPgsAAAIAAAAPNwAAAC8AAAAPPwsAAAIAAAAPOAAAACgAAAAPQAsAAAIAAAAPOQAAACkAAAAPQQsAAAIAAAAPMAAAAD0AAAAPQgsAAAIAAAAPJwAAAD8AAAAPQwsAAAIAAAAPv////6H///8PRAsAAAMAAAAPcQAAAFEAAABAAAAAD0ULAAACAAAAD3cAAABXAAAAD0YLAAACAAAAD2UAAABFAAAAD0cLAAACAAAAD3IAAABSAAAAD0gLAAACAAAAD3QAAABUAAAAD0kLAAACAAAAD3kAAABZAAAAD0oLAAACAAAAD3UAAABVAAAAD0sLAAACAAAAD2kAAABJAAAAD0wLAAACAAAAD28AAABPAAAAD00LAAACAAAAD3AAAABQAAAAD04LAAACAAAAD7T///+o////D08LAAACAAAADysAAAAqAAAAD1ALAAACAAAAD2EAAABBAAAAD1ELAAACAAAAD3MAAABTAAAAD1ILAAACAAAAD2QAAABEAAAAD1MLAAACAAAAD2YAAABGAAAAD1QLAAACAAAAD2cAAABHAAAAD1ULAAACAAAAD2gAAABIAAAAD1YLAAACAAAAD2oAAABKAAAAD1cLAAACAAAAD2sAAABLAAAAD1gLAAACAAAAD2wAAABMAAAAD1kLAAACAAAAD/H////R////D1oLAAADAAAAD3sAAABbAAAAXgAAAA9bCwAAAgAAAA99AAAAXQAAAA9cCwAAAgAAAA96AAAAWgAAAA9dCwAAAgAAAA94AAAAWAAAAA9eCwAAAgAAAA9jAAAAQwAAAA9fCwAAAgAAAA92AAAAVgAAAA9gCwAAAgAAAA9iAAAAQgAAAA9hCwAAAgAAAA9uAAAATgAAAA9iCwAAAgAAAA9tAAAATQAAAA9jCwAAAgAAAA8sAAAAOwAAAA9kCwAAAgAAAA8uAAAAOgAAAA9lCwAAAgAAAA8tAAAAXwAAAA9mCwAAAgAAAA88AAAAPgAAAA9nCwAAAAAAAA8PaAsAAAIAAAAPYAAAAH4AAAAPaQsAAAIAAAAP4P///8D///8PagsAAAIAAAAP6P///8j///8PawsAAAIAAAAP5v///8b///8PbAsAAAIAAAAP6////8v///8PbQsAAAIAAAAP4f///8H///8PbgsAAAIAAAAP8P///9D///8PbwsAAAIAAAAP+P///9j///8PcAsAAAIAAAAP+////9v///8PcQsAAAIAAAAPpf///ygAAAAPcgsAAAIAAAAPtP///ykAAAAPcwsAAAIAAAAPLQAAAF8AAAAPdAsAAAIAAAAP/v///97///8PdQsAAAIAAAAPXAAAAHwAAAAPdgsAAAIAAAAPcQAAAFEAAAAPdwsAAAIAAAAPdwAAAFcAAAAPeAsAAAIAAAAPZQAAAEUAAAAPeQsAAAIAAAAPcgAAAFIAAAAPegsAAAIAAAAPdAAAAFQAAAAPewsAAAIAAAAPeQAAAFkAAAAPfAsAAAIAAAAPdQAAAFUAAAAPfQsAAAIAAAAPaQAAAEkAAAAPfgsAAAIAAAAPbwAAAE8AAAAPfwsAAAIAAAAPcAAAAFAAAAAPgAsAAAIAAAAPWwAAAHsAAAAPgQsAAAIAAAAPXQAAAH0AAAAPggsAAAIAAAAPYQAAAEEAAAAPgwsAAAIAAAAPcwAAAFMAAAAPhAsAAAIAAAAPZAAAAEQAAAAPhQsAAAIAAAAPZgAAAEYAAAAPhgsAAAIAAAAPZwAAAEcAAAAPhwsAAAIAAAAPaAAAAEgAAAAPiAsAAAIAAAAPagAAAEoAAAAPiQsAAAIAAAAPawAAAEsAAAAPigsAAAIAAAAPbAAAAEwAAAAPiwsAAAIAAAAPOwAAADoAAAAPjAsAAAIAAAAPJwAAACIAAAAPjQsAAAIAAAAPegAAAFoAAAAPjgsAAAIAAAAPeAAAAFgAAAAPjwsAAAIAAAAPYwAAAEMAAAAPkAsAAAIAAAAPdgAAAFYAAAAPkQsAAAIAAAAPYgAAAEIAAAAPkgsAAAIAAAAPbgAAAE4AAAAPkwsAAAIAAAAPbQAAAE0AAAAPlAsAAAIAAAAPLAAAADwAAAAPlQsAAAIAAAAPLgAAAD4AAAAPlgsAAAIAAAAPLwAAAD8AAAAPlwsAAAAAAAAPD5gLAAAAAAAADw+ZCwAAAgAAAA8iAAAA6f///w+aCwAAAgAAAA8xAAAAIQAAAA+bCwAAAgAAAA8yAAAAJwAAAA+cCwAAAwAAAA8zAAAAXgAAACMAAAAPnQsAAAMAAAAPNAAAACsAAAAkAAAAD54LAAACAAAADzUAAAAlAAAAD58LAAACAAAADzYAAAAmAAAAD6ALAAADAAAADzcAAAAvAAAAewAAAA+hCwAAAwAAAA84AAAAKAAAAFsAAAAPogsAAAMAAAAPOQAAACkAAABdAAAAD6MLAAADAAAADzAAAAA9AAAAfQAAAA+kCwAAAwAAAA8qAAAAPwAAAFwAAAAPpQsAAAIAAAAPLQAAAF8AAAAPpgsAAAMAAAAPcQAAAFEAAABAAAAAD6cLAAACAAAAD3cAAABXAAAAD6gLAAACAAAAD2UAAABFAAAAD6kLAAACAAAAD3IAAABSAAAAD6oLAAACAAAAD3QAAABUAAAAD6sLAAACAAAAD3kAAABZAAAAD6wLAAACAAAAD3UAAABVAAAAD60LAAADAAAAD/3///9JAAAA7v///w+uCwAAAgAAAA9vAAAATwAAAA+vCwAAAgAAAA9wAAAAUAAAAA+wCwAAAgAAAA/w////0P///w+xCwAAAwAAAA/8////3P///34AAAAPsgsAAAMAAAAPYQAAAEEAAADm////D7MLAAADAAAAD3MAAABTAAAA3////w+0CwAAAgAAAA9kAAAARAAAAA+1CwAAAgAAAA9mAAAARgAAAA+2CwAAAgAAAA9nAAAARwAAAA+3CwAAAgAAAA9oAAAASAAAAA+4CwAAAgAAAA9qAAAASgAAAA+5CwAAAgAAAA9rAAAASwAAAA+6CwAAAgAAAA9sAAAATAAAAA+7CwAAAgAAAA/+////3v///w+8CwAAAgAAAA9pAAAA3f///w+9CwAAAwAAAA8sAAAAOwAAAGAAAAAPvgsAAAIAAAAPegAAAFoAAAAPvwsAAAIAAAAPeAAAAFgAAAAPwAsAAAIAAAAPYwAAAEMAAAAPwQsAAAIAAAAPdgAAAFYAAAAPwgsAAAIAAAAPYgAAAEIAAAAPwwsAAAIAAAAPbgAAAE4AAAAPxAsAAAIAAAAPbQAAAE0AAAAPxQsAAAIAAAAP9v///9b///8PxgsAAAIAAAAP5////8f///8PxwsAAAIAAAAPLgAAADoAAAAPyAsAAAAAAAAPD8kLAAAAAAAADw/KCwAAAgAAAA8iAAAAXAAAAA/LCwAAAgAAAA8xAAAAIQAAAA/MCwAAAgAAAA8yAAAAJwAAAA/NCwAAAgAAAA8zAAAAXgAAAA/OCwAAAgAAAA80AAAAKwAAAA/PCwAAAgAAAA81AAAAJQAAAA/QCwAAAgAAAA82AAAAJgAAAA/RCwAAAgAAAA83AAAALwAAAA/SCwAAAgAAAA84AAAAKAAAAA/TCwAAAgAAAA85AAAAKQAAAA/UCwAAAgAAAA8wAAAAPQAAAA/VCwAAAgAAAA8qAAAAPwAAAA/WCwAAAgAAAA8tAAAAXwAAAA/XCwAAAgAAAA9xAAAAUQAAAA/YCwAAAgAAAA93AAAAVwAAAA/ZCwAAAgAAAA9lAAAARQAAAA/aCwAAAgAAAA9yAAAAUgAAAA/bCwAAAgAAAA90AAAAVAAAAA/cCwAAAgAAAA95AAAAWQAAAA/dCwAAAgAAAA91AAAAVQAAAA/eCwAAAgAAAA+5////SQAAAA/fCwAAAgAAAA9vAAAATwAAAA/gCwAAAgAAAA9wAAAAUAAAAA/hCwAAAgAAAA+7////q////w/iCwAAAgAAAA/8////3P///w/jCwAAAgAAAA9hAAAAQQAAAA/kCwAAAgAAAA9zAAAAUwAAAA/lCwAAAgAAAA9kAAAARAAAAA/mCwAAAgAAAA9mAAAARgAAAA/nCwAAAgAAAA9nAAAARwAAAA/oCwAAAgAAAA9oAAAASAAAAA/pCwAAAgAAAA9qAAAASgAAAA/qCwAAAgAAAA9rAAAASwAAAA/rCwAAAgAAAA9sAAAATAAAAA/sCwAAAgAAAA+6////qv///w/tCwAAAQAAAA9pAAAAD+4LAAACAAAADywAAAA7AAAAD+8LAAACAAAAD3oAAABaAAAAD/ALAAACAAAAD3gAAABYAAAAD/ELAAACAAAAD2MAAABDAAAAD/ILAAACAAAAD3YAAABWAAAAD/MLAAACAAAAD2IAAABCAAAAD/QLAAACAAAAD24AAABOAAAAD/ULAAACAAAAD20AAABNAAAAD/YLAAACAAAAD/b////W////D/cLAAACAAAAD+f////H////D/gLAAACAAAADy4AAAA6AAAAD/kLAAACAAAADzwAAAA+AAAAD/oLAAAAAAAADw/7CwAAAgAAAA8rAAAAKgAAAA/8CwAAAgAAAA8xAAAAIQAAAA/9CwAAAgAAAA8yAAAAIgAAAA/+CwAAAwAAAA8zAAAAXgAAACMAAAAP/wsAAAIAAAAPNAAAACQAAAAPAAwAAAIAAAAPNQAAACUAAAAPAQwAAAIAAAAPNgAAACYAAAAPAgwAAAIAAAAPNwAAACcAAAAPAwwAAAIAAAAPOAAAACgAAAAPBAwAAAIAAAAPOQAAACkAAAAPBQwAAAIAAAAPMAAAAD0AAAAPBgwAAAIAAAAPLwAAAD8AAAAPBwwAAAIAAAAPLQAAAF8AAAAPCAwAAAIAAAAPZgAAAEYAAAAPCQwAAAIAAAAPZwAAAEcAAAAPCgwAAAIAAAAPu////6v///8PCwwAAAIAAAAPuf///0kAAAAPDAwAAAIAAAAPbwAAAE8AAAAPDQwAAAIAAAAPZAAAAEQAAAAPDgwAAAIAAAAPcgAAAFIAAAAPDwwAAAIAAAAPbgAAAE4AAAAPEAwAAAIAAAAPaAAAAEgAAAAPEQwAAAIAAAAPcAAAAFAAAAAPEgwAAAIAAAAPcQAAAFEAAAAPEwwAAAIAAAAPdwAAAFcAAAAPFAwAAAIAAAAPdQAAAFUAAAAPFQwAAAEAAAAPaQAAAA8WDAAAAgAAAA9lAAAARQAAAA8XDAAAAgAAAA9hAAAAQQAAAA8YDAAAAgAAAA/8////3P///w8ZDAAAAgAAAA90AAAAVAAAAA8aDAAAAgAAAA9rAAAASwAAAA8bDAAAAgAAAA9tAAAATQAAAA8cDAAAAgAAAA9sAAAATAAAAA8dDAAAAgAAAA95AAAAWQAAAA8eDAAAAgAAAA+6////qv///w8fDAAAAgAAAA94AAAAWAAAAA8gDAAAAgAAAA9qAAAASgAAAA8hDAAAAgAAAA/2////1v///w8iDAAAAgAAAA92AAAAVgAAAA8jDAAAAgAAAA9jAAAAQwAAAA8kDAAAAgAAAA/n////x////w8lDAAAAgAAAA96AAAAWgAAAA8mDAAAAgAAAA9zAAAAUwAAAA8nDAAAAgAAAA9iAAAAQgAAAA8oDAAAAgAAAA8uAAAAOgAAAA8pDAAAAgAAAA8sAAAAOwAAAA8qDAAAAgAAAA88AAAAPgAAAA8rDAAAAAAAAA8PLAwAAAMAAAAPYAAAAH4AAAA7AAAADy0MAAACAAAADzEAAAAhAAAADy4MAAACAAAADzIAAABAAAAADy8MAAACAAAADzMAAAAjAAAADzAMAAACAAAADzQAAAAkAAAADzEMAAACAAAADzUAAAAlAAAADzIMAAACAAAADzYAAABeAAAADzMMAAACAAAADzcAAAAmAAAADzQMAAACAAAADzgAAAAqAAAADzUMAAACAAAADzkAAAAoAAAADzYMAAACAAAADzAAAAApAAAADzcMAAACAAAADy0AAABfAAAADzgMAAACAAAADz0AAAArAAAADzkMAAADAAAAD3EAAABRAAAALwAAAA86DAAAAwAAAA93AAAAVwAAACcAAAAPOwwAAAMAAAAPZQAAAEUAAAD3////DzwMAAADAAAAD3IAAABSAAAA+P///w89DAAAAwAAAA90AAAAVAAAAOD///8PPgwAAAMAAAAPeQAAAFkAAADo////Dz8MAAADAAAAD3UAAABVAAAA5f///w9ADAAAAwAAAA9pAAAASQAAAO////8PQQwAAAMAAAAPbwAAAE8AAADt////D0IMAAADAAAAD3AAAABQAAAA9P///w9DDAAAAgAAAA9bAAAAewAAAA9EDAAAAgAAAA9dAAAAfQAAAA9FDAAAAwAAAA9hAAAAQQAAAPn///8PRgwAAAMAAAAPcwAAAFMAAADj////D0cMAAADAAAAD2QAAABEAAAA4v///w9IDAAAAwAAAA9mAAAARgAAAOv///8PSQwAAAMAAAAPZwAAAEcAAADy////D0oMAAADAAAAD2gAAABIAAAA6f///w9LDAAAAwAAAA9qAAAASgAAAOf///8PTAwAAAMAAAAPawAAAEsAAADs////D00MAAADAAAAD2wAAABMAAAA6v///w9ODAAAAwAAAA87AAAAOgAAAPP///8PTwwAAAMAAAAPJwAAACIAAAAsAAAAD1AMAAACAAAAD1wAAAB8AAAAD1EMAAADAAAAD3oAAABaAAAA5v///w9SDAAAAwAAAA94AAAAWAAAAPH///8PUwwAAAMAAAAPYwAAAEMAAADh////D1QMAAADAAAAD3YAAABWAAAA5P///w9VDAAAAwAAAA9iAAAAQgAAAPD///8PVgwAAAMAAAAPbgAAAE4AAADu////D1cMAAADAAAAD20AAABNAAAA9v///w9YDAAAAwAAAA8sAAAAPAAAAPr///8PWQwAAAMAAAAPLgAAAD4AAAD1////D1oMAAADAAAADy8AAAA/AAAALgAAAA9bDAAAAgAAAA88AAAAPgAAAA9cDAAAAAAAAA8PXQwAAAIAAAAPYAAAAH4AAAAPXgwAAAIAAAAPMQAAACEAAAAPXwwAAAIAAAAPMgAAAEAAAAAPYAwAAAIAAAAPMwAAACMAAAAPYQwAAAIAAAAPNAAAACQAAAAPYgwAAAIAAAAPNQAAACUAAAAPYwwAAAIAAAAPNgAAAF4AAAAPZAwAAAIAAAAPNwAAACYAAAAPZQwAAAIAAAAPOAAAACoAAAAPZgwAAAIAAAAPOQAAACgAAAAPZwwAAAIAAAAPMAAAACkAAAAPaAwAAAIAAAAPLQAAAF8AAAAPaQwAAAIAAAAPPQAAACsAAAAPagwAAAMAAAAPcQAAAFEAAAD3////D2sMAAADAAAAD3cAAABXAAAA5f///w9sDAAAAwAAAA9lAAAARQAAAOD///8PbQwAAAMAAAAPcgAAAFIAAAD4////D24MAAADAAAAD3QAAABUAAAA+v///w9vDAAAAwAAAA95AAAAWQAAAPL///8PcAwAAAMAAAAPdQAAAFUAAADl////D3EMAAADAAAAD2kAAABJAAAA6f///w9yDAAAAwAA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AA9yAAAAUgAAAPH////R////DwENAAAEAAAAD3QAAABUAAAA9P///9T///8PAg0AAAQAAAAPeQAAAFkAAAD1////1f///w8DDQAABAAAAA91AAAAVQAAAOj////I////DwQNAAAEAAAAD2kAAABJAAAA6f///8n///8PBQ0AAAQAAAAPbwAAAE8AAADv////z////w8GDQAABAAAAA9wAAAAUAAAAPD////Q////DwcNAAACAAAAD1sAAAB7AAAADwgNAAACAAAAD10AAAB9AAAADwkNAAAEAAAAD2EAAABBAAAA4f///8H///8PCg0AAAIAAAAPcwAAAFMAAAAPCw0AAAQAAAAPZAAAAEQAAADk////xP///w8MDQAABAAAAA9mAAAARgAAAPb////W////Dw0NAAAEAAAAD2cAAABHAAAA4////8P///8PDg0AAAQAAAAPaAAAAEgAAADn////x////w8PDQAABAAAAA9qAAAASgAAAO7////O////DxANAAAEAAAAD2sAAABLAAAA6v///8r///8PEQ0AAAQAAAAPbAAAAEwAAADr////y////w8SDQAABAAAAA87AAAAOgAAALT///+o////DxMNAAACAAAADycAAAAiAAAADxQNAAACAAAAD1wAAAB8AAAADxUNAAAEAAAAD3oAAABaAAAA5v///8b///8PFg0AAAQAAAAPeAAAAFgAAAD3////1////w8XDQAABAAAAA9jAAAAQwAAAPj////Y////DxgNAAAEAAAAD3YAAABWAAAA+f///9n///8PGQ0AAAQAAAAPYgAAAEIAAADi////wv///w8aDQAABAAAAA9uAAAATgAAAO3////N////DxsNAAAEAAAAD20AAABNAAAA7P///8z///8PHA0AAAIAAAAPLAAAADwAAAAPHQ0AAAIAAAAPLgAAAD4AAAAPHg0AAAIAAAAPLwAAAD8AAAAPHw0AAAIAAAAPPAAAAD4AAAAPIA0AAAAAAAAPDyENAAAEAAAAD2AAAAB+AAAAXwAAACUAAAAPIg0AAAQAAAAPMQAAACEAAADl////KwAAAA8jDQAABAAAAA8yAAAAQAAAAC8AAADx////DyQNAAAEAAAADzMAAAAjAAAALQAAAPL///8PJQ0AAAQAAAAPNAAAACQAAADA////8////w8mDQAABAAAAA81AAAAJQAAALb////0////DycNAAAEAAAADzYAAABeAAAA2P///9n///8PKA0AAAQAAAAPNwAAACYAAADW////3////w8pDQAABAAAAA84AAAAKgAAAKT////1////DyoNAAAEAAAADzkAAAAoAAAAtf////b///8PKw0AAAQAAAAPMAAAACkAAACo////9////w8sDQAABAAAAA8tAAAAXwAAAKL////4////Dy0NAAAEAAAADz0AAAArAAAAqv////n///8PLg0AAAQAAAAPcQAAAFEAAADm////8P///w8vDQAABAAAAA93AAAAVwAAAOT///8iAAAADzANAAAEAAAAD2UAAABFAAAA0////67///8PMQ0AAAQAAAAPcgAAAFIAAAC+////sf///w8yDQAABAAAAA90AAAAVAAAAND///+4////DzMNAAAEAAAAD3kAAABZAAAA0f///+3///8PNA0AAAQAAAAPdQAAAFUAAADV////6v///w81DQAABAAAAA9pAAAASQAAAMP///+z////DzYNAAAEAAAAD28AAABPAAAAuf///8////8PNw0AAAQAAAAPcAAAAFAAAADC////rf///w84DQAABAAAAA9bAAAAewAAALr///+w////DzkNAAAEAAAAD10AAAB9AAAAxf///ywAAAAPOg0AAAQAAAAPYQAAAEEAAAC/////xP///w87DQAABAAAAA9zAAAAUwAAAMv///+m////DzwNAAAEAAAAD2QAAABEAAAAof///6////8PPQ0AAAQAAAAPZgAAAEYAAAC0////4v///w8+DQAABAAAAA9nAAAARwAAAOD///+s////Dz8NAAAEAAAAD2gAAABIAAAA6f///+f///8PQA0AAAQAAAAPagAAAEoAAADo////6////w9BDQAABAAAAA9rAAAASwAAANL////J////D0INAAAEAAAAD2wAAABMAAAAyv///8j///8PQw0AAAQAAAAPOwAAADoAAADH////q////w9EDQAABAAAAA8nAAAAIgAAAKf///8uAAAAD0UNAAAEAAAAD1wAAAB8AAAAo////6X///8PRg0AAAQAAAAPegAAAFoAAAC8////KAAAAA9HDQAABAAAAA94AAAAWAAAALv///8pAAAAD0gNAAAEAAAAD2MAAABDAAAA4f///6n///8PSQ0AAAQAAAAPdgAAAFYAAADN////zv///w9KDQAAAwAAAA9iAAAAQgAAANr///8PSw0AAAQAAAAPbgAAAE4AAADX////7P///w9MDQAABAAAAA9tAAAATQAAALf///8/AAAAD00NAAAEAAAADywAAAA8AAAAwf///7L///8PTg0AAAQAAAAPLgAAAD4AAADj////zP///w9PDQAABAAAAA8vAAAAPwAAAL3////G////D1ANAAAAAAAADw9RDQAAAAAAAA8PUg0AAAIAAAAPQAAAAKf///8PUw0AAAIAAAAPMQAAACEAAAAPVA0AAAIAAAAPMgAAACIAAAAPVQ0AAAIAAAAPMwAAACMAAAAPVg0AAAIAAAAPNAAAACQAAAAPVw0AAAIAAAAPNQAAACUAAAAPWA0AAAIAAAAPNgAAACYAAAAPWQ0AAAIAAAAPNwAAAF8AAAAPWg0AAAIAAAAPOAAAACgAAAAPWw0AAAIAAAAPOQAAACkAAAAPXA0AAAIAAAAPMAAAACcAAAAPXQ0AAAIAAAAPLwAAAD8AAAAPXg0AAAIAAAAPsP///34AAAAPXw0AAAIAAAAPcQAAAFEAAAAPYA0AAAIAAAAPdwAAAFcAAAAPYQ0AAAIAAAAPZQAAAEUAAAAPYg0AAAIAAAAPcgAAAFIAAAAPYw0AAAIAAAAPdAAAAFQAAAAPZA0AAAIAAAAPeQAAAFkAAAAPZQ0AAAIAAAAPdQAAAFUAAAAPZg0AAAIAAAAPaQAAAEkAAAAPZw0AAAIAAAAPbwAAAE8AAAAPaA0AAAIAAAAPcAAAAFAAAAAPaQ0AAAIAAAAPqP///34AAAAPag0AAAIAAAAPKgAAAHwAAAAPaw0AAAIAAAAPYQAAAEEAAAAPbA0AAAIAAAAPcwAAAFMAAAAPbQ0AAAIAAAAPZAAAAEQAAAAPbg0AAAIAAAAPZgAAAEYAAAAPbw0AAAIAAAAPZwAAAEcAAAAPcA0AAAIAAAAPaAAAAEgAAAAPcQ0AAAIAAAAPagAAAEoAAAAPcg0AAAIAAAAPawAAAEsAAAAPcw0AAAIAAAAPbAAAAEwAAAAPdA0AAAIAAAAPKwAAALH///8PdQ0AAAIAAAAPJwAAAGAAAAAPdg0AAAIAAAAPPAAAAD4AAAAPdw0AAAIAAAAPegAAAFoAAAAPeA0AAAIAAAAPeAAAAFgAAAAPeQ0AAAIAAAAPYwAAAEMAAAAPeg0AAAIAAAAPdgAAAFYAAAAPew0AAAIAAAAPYgAAAEIAAAAPfA0AAAIAAAAPbgAAAE4AAAAPfQ0AAAIAAAAPbQAAAE0AAAAPfg0AAAIAAAAPLAAAADsAAAAPfw0AAAIAAAAPLgAAADoAAAAPgA0AAAIAAAAPLQAAAD0AAAAPgQ0AAAIAAAAPWwAAAF0AAAAPgg0AAAAAAAAPCw==</value></data><data name="scan_table" mimetype="application/x-microsoft.net.object.binary.base64"><value>AAEAAAD/////AQAAAAAAAAAHAQAAAAEBAAAABQAAAAcHCQIAAAAJAwAAAAkEAAAACQUAAAAJBgAAAA8CAAAAMAAAAAcpAAIAAwAEAAUABgAHAAgACQAKAAsADAANABAAEQASABMAFAAVABYAFwAYABkAGgAbAB4AHwAgACEAIgAjACQAJQAmACcAKAArACwALQAuAC8AMAAxADIAMwA0ADUAVgAPAwAAADAAAAAHKQACAAMABAAFAAYABwAIAAkACgALABoAGwAoADMANAAZABUAIQAiAC4AEwAmADUADQAeABgAEgAWABcAIAAjABQAMQAfAAwAKwAnABAAJAAlAC0AMAAyABEALwAsAFYADwQAAAAyAAAABykAAgADAAQABQAGAAcACAAJAAoACwAMAA0AEAARABIAEwAUABUAFgAXABgAGQAaABsAHgAfACAAIQAiACMAJAAlACYAJwAoACsAXgAsAC0ALgAvADAAMQAyADMANAA1AFYANQAPBQAAADAAAAAHAgADAAQABQAGAAcACAAJAAoACwAMAA0AKQAQABEAEgATABQAFQAWABcAGAAZABoAGwAeAB8AIAAhACIAIwAkACUAJgAnACgAKwAsAC0ALgAvADAAMQAyADMANAA1AFYADwYAAAAwAAAABwIAAwAEAAUABgAHAAgACQAKAAsADAANABoAGwAnACgAKQAzADQANQArAB4AMAAuACAAEgAhACIAIwAXACQAJQAmADIAMQAYABkAEAATAB8AFAAWAC8AEQAtABUALABWAAs=</value></data><data name="vkey_table" mimetype="application/x-microsoft.net.object.binary.base64"><value>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</value></data></root>A4gAAAAs=</value></data></root>
\ No newline at end of file
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="keyboard_table" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>
+ AAEAAAD/////AQAAAAAAAAAMAgAAAEdjcmVhdGUta2V5Ym9hcmRzLCBWZXJzaW9uPTAuMC4wLjAsIEN1
+ bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAcBAAAAAAEAAABAAAAABCNTeXN0ZW0uV2lu
+ ZG93cy5Gb3Jtcy5LZXlib2FyZExheW91dAIAAAAJAwAAAAkEAAAACQUAAAAJBgAAAAkHAAAACQgAAAAJ
+ CQAAAAkKAAAACQsAAAAJDAAAAAkNAAAACQ4AAAAJDwAAAAkQAAAACREAAAAJEgAAAAkTAAAACRQAAAAJ
+ FQAAAAkWAAAACRcAAAAJGAAAAAkZAAAACRoAAAAJGwAAAAkcAAAACR0AAAAJHgAAAAkfAAAACSAAAAAJ
+ IQAAAAkiAAAACSMAAAAJJAAAAAklAAAACSYAAAAJJwAAAAkoAAAACSkAAAAJKgAAAAkrAAAACSwAAAAJ
+ LQAAAAkuAAAACS8AAAAJMAAAAAkxAAAACTIAAAAJMwAAAAk0AAAACTUAAAAJNgAAAAk3AAAACTgAAAAJ
+ OQAAAAk6AAAACTsAAAAJPAAAAAk9AAAACT4AAAAJPwAAAAlAAAAACUEAAAAJQgAAAAUDAAAAI1N5c3Rl
+ bS5XaW5kb3dzLkZvcm1zLktleWJvYXJkTGF5b3V0BQAAAARMY2lkBE5hbWUJU2NhbkluZGV4CVZLZXlJ
+ bmRleARLZXlzAAEEBAMII1N5c3RlbS5XaW5kb3dzLkZvcm1zLlNjYW5UYWJsZUluZGV4AgAAACNTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5WS2V5VGFibGVJbmRleAIAAAARU3lzdGVtLlVJbnQzMltdW10CAAAACQQA
+ AAZDAAAAHVVuaXRlZCBTdGF0ZXMga2V5Ym9hcmQgbGF5b3V0Bbz///8jU3lzdGVtLldpbmRvd3MuRm9y
+ bXMuU2NhblRhYmxlSW5kZXgBAAAAB3ZhbHVlX18ACAIAAAAAAAAABbv///8jU3lzdGVtLldpbmRvd3Mu
+ Rm9ybXMuVktleVRhYmxlSW5kZXgBAAAAB3ZhbHVlX18ACAIAAAAAAAAACUYAAAABBAAAAAMAAAAJBAAA
+ BkcAAAAzVW5pdGVkIFN0YXRlcyBrZXlib2FyZCBsYXlvdXQgKHBoYW50b20ga2V5IHZlcnNpb24pAbj/
+ //+8////AAAAAAG3////u////wAAAAAJSgAAAAEFAAAAAwAAAAkEAAAGSwAAACZVbml0ZWQgU3RhdGVz
+ IGtleWJvYXJkIGxheW91dCAoZHZvcmFrKQG0////vP///wEAAAABs////7v///8CAAAACU4AAAABBgAA
+ AAMAAAAJBAAABk8AAAArVW5pdGVkIFN0YXRlcyBJbnRlcm5hdGlvbmFsIGtleWJvYXJkIGxheW91dAGw
+ ////vP///wAAAAABr////7v///8AAAAACVIAAAABBwAAAAMAAAAJCAAABlMAAAAXQnJpdGlzaCBrZXli
+ b2FyZCBsYXlvdXQBrP///7z///8AAAAAAav///+7////AAAAAAlWAAAAAQgAAAADAAAABwQAAAZXAAAA
+ Fkdlcm1hbiBrZXlib2FyZCBsYXlvdXQBqP///7z///8AAAAAAaf///+7////AQAAAAlaAAAAAQkAAAAD
+ AAAABwQAAAZbAAAAKEdlcm1hbiBrZXlib2FyZCBsYXlvdXQgd2l0aG91dCBkZWFkIGtleXMBpP///7z/
+ //8AAAAAAaP///+7////AQAAAAleAAAAAQoAAAADAAAABwQAAAZfAAAAL0dlcm1hbiBrZXlib2FyZCBs
+ YXlvdXQgZm9yIGxvZ2l0ZWNoIGRlc2t0b3AgcHJvAaD///+8////AAAAAAGf////u////wEAAAAJYgAA
+ AAELAAAAAwAAAAcEAAAGYwAAACxHZXJtYW4ga2V5Ym9hcmQgbGF5b3V0IHdpdGhvdXQgZGVhZCBrZXlz
+ IDEwNQGc////vP///wAAAAABm////7v///8DAAAACWYAAAABDAAAAAMAAAAHCAAABmcAAAAcU3dpc3Mg
+ R2VybWFuIGtleWJvYXJkIGxheW91dAGY////vP///wAAAAABl////7v///8BAAAACWoAAAABDQAAAAMA
+ AAAMEAAABmsAAAAcU3dpc3MgRnJlbmNoIGtleWJvYXJkIGxheW91dAGU////vP///wAAAAABk////7v/
+ //8BAAAACW4AAAABDgAAAAMAAAAdBAAABm8AAAAXU3dlZGlzaCBrZXlib2FyZCBsYXlvdXQBkP///7z/
+ //8AAAAAAY////+7////BQAAAAlyAAAAAQ8AAAADAAAAJQQAAAZzAAAAGEVzdG9uaWFuIGtleWJvYXJk
+ IGxheW91dAGM////vP///wAAAAABi////7v///8AAAAACXYAAAABEAAAAAMAAAAUBAAABncAAAAZTm9y
+ d2VnaWFuIGtleWJvYXJkIGxheW91dAGI////vP///wAAAAABh////7v///8AAAAACXoAAAABEQAAAAMA
+ AAAGBAAABnsAAAAWRGFuaXNoIGtleWJvYXJkIGxheW91dAGE////vP///wAAAAABg////7v///8AAAAA
+ CX4AAAABEgAAAAMAAAAMBAAABn8AAAAWRnJlbmNoIGtleWJvYXJkIGxheW91dAGA////vP///wAAAAAB
+ f////7v///8EAAAACYIAAAABEwAAAAMAAAAMDAAABoMAAAAfQ2FuYWRpYW4gRnJlbmNoIGtleWJvYXJk
+ IGxheW91dAF8////vP///wAAAAABe////7v///8AAAAACYYAAAABFAAAAAMAAAAMDAAABocAAAAnQ2Fu
+ YWRpYW4gRnJlbmNoIGtleWJvYXJkIGxheW91dCAoQ0FfZnIpAXj///+8////AAAAAAF3////u////wAA
+ AAAJigAAAAEVAAAAAwAAAAwMAAAGiwAAABhDYW5hZGlhbiBrZXlib2FyZCBsYXlvdXQBdP///7z///8A
+ AAAAAXP///+7////AAAAAAmOAAAAARYAAAADAAAADAgAAAaPAAAAF0JlbGdpYW4ga2V5Ym9hcmQgbGF5
+ b3V0AXD///+8////AAAAAAFv////u////wQAAAAJkgAAAAEXAAAAAwAAABYIAAAGkwAAABpQb3J0dWd1
+ ZXNlIGtleWJvYXJkIGxheW91dAFs////vP///wAAAAABa////7v///8AAAAACZYAAAABGAAAAAMAAAAW
+ BAAABpcAAAAgQnJhemlsaWFuIEFCTlQtMiBrZXlib2FyZCBsYXlvdXQBaP///7z///8CAAAAAWf///+7
+ ////BgAAAAmaAAAAARkAAAADAAAAFgQAAAabAAAAJ0JyYXppbGlhbiBBQk5ULTIga2V5Ym9hcmQgbGF5
+ b3V0IEFMVCBHUgFk////vP///wIAAAABY////7v///8GAAAACZ4AAAABGgAAAAMAAAALBAAABp8AAAAX
+ RmlubmlzaCBrZXlib2FyZCBsYXlvdXQBYP///7z///8AAAAAAV////+7////AAAAAAmiAAAAARsAAAAD
+ AAAAAgQAAAajAAAAHUJ1bGdhcmlhbiBiZHMga2V5Ym9hcmQgbGF5b3V0AVz///+8////AAAAAAFb////
+ u////wAAAAAJpgAAAAEcAAAAAwAAAAIEAAAGpwAAACJCdWxnYXJpYW4gcGhvbmV0aWMga2V5Ym9hcmQg
+ bGF5b3V0AVj///+8////AAAAAAFX////u////wAAAAAJqgAAAAEdAAAAAwAAACMEAAAGqwAAABpCZWxh
+ cnVzaWFuIGtleWJvYXJkIGxheW91dAFU////vP///wAAAAABU////7v///8AAAAACa4AAAABHgAAAAMA
+ AAAZBAAABq8AAAAXUnVzc2lhbiBrZXlib2FyZCBsYXlvdXQBUP///7z///8AAAAAAU////+7////AAAA
+ AAmyAAAAAR8AAAADAAAAGQQAAAazAAAALVJ1c3NpYW4ga2V5Ym9hcmQgbGF5b3V0IChwaGFudG9tIGtl
+ eSB2ZXJzaW9uKQFM////vP///wAAAAABS////7v///8AAAAACbYAAAABIAAAAAMAAAAZBAAABrcAAAAe
+ UnVzc2lhbiBrZXlib2FyZCBsYXlvdXQgS09JOC1SAUj///+8////AAAAAAFH////u////wAAAAAJugAA
+ AAEhAAAAAwAAABkEAAAGuwAAAB5SdXNzaWFuIGtleWJvYXJkIGxheW91dCBjcDEyNTEBRP///7z///8A
+ AAAAAUP///+7////AAAAAAm+AAAAASIAAAADAAAAGQQAAAa/AAAAIFJ1c3NpYW4gcGhvbmV0aWMga2V5
+ Ym9hcmQgbGF5b3V0AUD///+8////AAAAAAE/////u////wAAAAAJwgAAAAEjAAAAAwAAACIEAAAGwwAA
+ ACBVa3JhaW5pYW4ga2V5Ym9hcmQgbGF5b3V0IEtPSTgtVQE8////vP///wAAAAABO////7v///8AAAAA
+ CcYAAAABJAAAAAMAAAAiBAAABscAAAAkVWtyYWluaWFuIGtleWJvYXJkIGxheW91dCAoc3RhbmRhcmQp
+ ATj///+8////AAAAAAE3////u////wAAAAAJygAAAAElAAAAAwAAABkEAAAGywAAACJSdXNzaWFuIGtl
+ eWJvYXJkIGxheW91dCAoc3RhbmRhcmQpATT///+8////AAAAAAEz////u////wAAAAAJzgAAAAEmAAAA
+ AwAAAAoEAAAGzwAAABdTcGFuaXNoIGtleWJvYXJkIGxheW91dAEw////vP///wAAAAABL////7v///8A
+ AAAACdIAAAABJwAAAAMAAAAQBAAABtMAAAAXSXRhbGlhbiBrZXlib2FyZCBsYXlvdXQBLP///7z///8A
+ AAAAASv///+7////AAAAAAnWAAAAASgAAAADAAAADwQAAAbXAAAAGUljZWxhbmRpYyBrZXlib2FyZCBs
+ YXlvdXQBKP///7z///8AAAAAASf///+7////AAAAAAnaAAAAASkAAAADAAAADgQAAAbbAAAAGUh1bmdh
+ cmlhbiBrZXlib2FyZCBsYXlvdXQBJP///7z///8AAAAAASP///+7////AQAAAAneAAAAASoAAAADAAAA
+ FQQAAAbfAAAAJVBvbGlzaCAocHJvZ3JhbW1lcidzKSBrZXlib2FyZCBsYXlvdXQBIP///7z///8AAAAA
+ AR////+7////AAAAAAniAAAAASsAAAADAAAAJAQAAAbjAAAAGVNsb3ZlbmlhbiBrZXlib2FyZCBsYXlv
+ dXQBHP///7z///8AAAAAARv///+7////AQAAAAnmAAAAASwAAAADAAAAGgwAAAbnAAAAGlNlcmJpYW4g
+ a2V5Ym9hcmQgbGF5b3V0IHNyARj///+8////AAAAAAEX////u////wAAAAAJ6gAAAAEtAAAAAwAAABoM
+ AAAG6wAAAB1TZXJiaWFuIGtleWJvYXJkIGxheW91dCB1cyxzcgEU////vP///wAAAAABE////7v///8A
+ AAAACe4AAAABLgAAAAMAAAAaBAAABu8AAAAYQ3JvYXRpYW4ga2V5Ym9hcmQgbGF5b3V0ARD///+8////
+ AAAAAAEP////u////wEAAAAJ8gAAAAEvAAAAAwAAABoEAAAG8wAAACNDcm9hdGlhbiBrZXlib2FyZCBs
+ YXlvdXQgKHNwZWNpZmljKQEM////vP///wAAAAABC////7v///8AAAAACfYAAAABMAAAAAMAAAARBAAA
+ BvcAAAAcSmFwYW5lc2UgMTA2IGtleWJvYXJkIGxheW91dAEI////vP///wMAAAABB////7v///8HAAAA
+ CfoAAAABMQAAAAMAAAARBAAABvsAAAAfSmFwYW5lc2UgcGM5OHgxIGtleWJvYXJkIGxheW91dAEE////
+ vP///wAAAAABA////7v///8AAAAACf4AAAABMgAAAAMAAAAbBAAABv8AAAAWU2xvdmFrIGtleWJvYXJk
+ IGxheW91dAEA////vP///wAAAAAB//7//7v///8AAAAACQIBAAABMwAAAAMAAAAbBAAABgMBAAAyU2xv
+ dmFrIGFuZCBDemVjaCBrZXlib2FyZCBsYXlvdXQgd2l0aG91dCBkZWFkIGtleXMB/P7//7z///8AAAAA
+ Afv+//+7////AAAAAAkGAQAAATQAAAADAAAABQQAAAYHAQAAFUN6ZWNoIGtleWJvYXJkIGxheW91dAH4
+ /v//vP///wAAAAAB9/7//7v///8AAAAACQoBAAABNQAAAAMAAAAFBAAABgsBAAAYQ3plY2gga2V5Ym9h
+ cmQgbGF5b3V0IGN6AfT+//+8////AAAAAAHz/v//u////wEAAAAJDgEAAAE2AAAAAwAAAAUEAAAGDwEA
+ AB9DemVjaCBrZXlib2FyZCBsYXlvdXQgY3pfcXdlcnR5AfD+//+8////AAAAAAHv/v//u////wAAAAAJ
+ EgEAAAE3AAAAAwAAAAoEAAAGEwEAAB5MYXRpbiBBbWVyaWNhbiBrZXlib2FyZCBsYXlvdXQB7P7//7z/
+ //8AAAAAAev+//+7////AAAAAAkWAQAAATgAAAADAAAAJwQAAAYXAQAAI0xpdGh1YW5pYW4gKEJhbHRp
+ Yykga2V5Ym9hcmQgbGF5b3V0Aej+//+8////AAAAAAHn/v//u////wAAAAAJGgEAAAE5AAAAAwAAAB8E
+ AAAGGwEAABdUdXJraXNoIGtleWJvYXJkIGxheW91dAHk/v//vP///wAAAAAB4/7//7v///8AAAAACR4B
+ AAABOgAAAAMAAAAfBAAABh8BAAAaVHVya2lzaCBrZXlib2FyZCBsYXlvdXQgdHIB4P7//7z///8AAAAA
+ Ad/+//+7////AAAAAAkiAQAAATsAAAADAAAAHwQAAAYjAQAAG1R1cmtpc2gga2V5Ym9hcmQgbGF5b3V0
+ IHRyZgHc/v//vP///wAAAAAB2/7//7v///8AAAAACSYBAAABPAAAAAMAAAANBAAABicBAAAZSXNyYWVs
+ aWFuIGtleWJvYXJkIGxheW91dAHY/v//vP///wAAAAAB1/7//7v///8AAAAACSoBAAABPQAAAAMAAAAN
+ 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
+ D3IBAAAAAAAADw9zAQAAAAAAAA8PdAEAAAIAAAAPYAAAAH4AAAAPdQEAAAIAAAAPMQAAACEAAAAPdgEA
+ AAIAAAAPMgAAAEAAAAAPdwEAAAIAAAAPMwAAACMAAAAPeAEAAAIAAAAPNAAAACQAAAAPeQEAAAIAAAAP
+ NQAAACUAAAAPegEAAAIAAAAPNgAAAF4AAAAPewEAAAIAAAAPNwAAACYAAAAPfAEAAAIAAAAPOAAAACoA
+ AAAPfQEAAAIAAAAPOQAAACgAAAAPfgEAAAIAAAAPMAAAACkAAAAPfwEAAAIAAAAPLQAAAF8AAAAPgAEA
+ AAIAAAAPPQAAACsAAAAPgQEAAAIAAAAPcQAAAFEAAAAPggEAAAIAAAAPdwAAAFcAAAAPgwEAAAIAAAAP
+ ZQAAAEUAAAAPhAEAAAIAAAAPcgAAAFIAAAAPhQEAAAIAAAAPdAAAAFQAAAAPhgEAAAIAAAAPeQAAAFkA
+ AAAPhwEAAAIAAAAPdQAAAFUAAAAPiAEAAAIAAAAPaQAAAEkAAAAPiQEAAAIAAAAPbwAAAE8AAAAPigEA
+ AAIAAAAPcAAAAFAAAAAPiwEAAAIAAAAPWwAAAHsAAAAPjAEAAAIAAAAPXQAAAH0AAAAPjQEAAAIAAAAP
+ YQAAAEEAAAAPjgEAAAIAAAAPcwAAAFMAAAAPjwEAAAIAAAAPZAAAAEQAAAAPkAEAAAIAAAAPZgAAAEYA
+ AAAPkQEAAAIAAAAPZwAAAEcAAAAPkgEAAAIAAAAPaAAAAEgAAAAPkwEAAAIAAAAPagAAAEoAAAAPlAEA
+ AAIAAAAPawAAAEsAAAAPlQEAAAIAAAAPbAAAAEwAAAAPlgEAAAIAAAAPOwAAADoAAAAPlwEAAAIAAAAP
+ JwAAACIAAAAPmAEAAAIAAAAPXAAAAHwAAAAPmQEAAAIAAAAPegAAAFoAAAAPmgEAAAIAAAAPeAAAAFgA
+ AAAPmwEAAAIAAAAPYwAAAEMAAAAPnAEAAAIAAAAPdgAAAFYAAAAPnQEAAAIAAAAPYgAAAEIAAAAPngEA
+ AAIAAAAPbgAAAE4AAAAPnwEAAAIAAAAPbQAAAE0AAAAPoAEAAAIAAAAPLAAAADwAAAAPoQEAAAIAAAAP
+ LgAAAD4AAAAPogEAAAIAAAAPLwAAAD8AAAAPowEAAAIAAAAPPAAAAD4AAAAPpAEAAAAAAAAPD6UBAAAC
+ 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
+ AAAADzQAAAAkAAAADwwCAAACAAAADzUAAAAlAAAADw0CAAACAAAADzYAAABeAAAADw4CAAACAAAADzcA
+ AAAmAAAADw8CAAACAAAADzgAAAAqAAAADxACAAACAAAADzkAAAAoAAAADxECAAACAAAADzAAAAApAAAA
+ DxICAAACAAAADy0AAABfAAAADxMCAAACAAAADz0AAAArAAAADxQCAAACAAAAD3EAAABRAAAADxUCAAAC
+ AAAAD3cAAABXAAAADxYCAAACAAAAD2UAAABFAAAADxcCAAACAAAAD3IAAABSAAAADxgCAAACAAAAD3QA
+ AABUAAAADxkCAAACAAAAD3kAAABZAAAADxoCAAACAAAAD3UAAABVAAAADxsCAAACAAAAD2kAAABJAAAA
+ DxwCAAACAAAAD28AAABPAAAADx0CAAACAAAAD3AAAABQAAAADx4CAAACAAAAD1sAAAB7AAAADx8CAAAC
+ AAAAD10AAAB9AAAADyACAAACAAAAD2EAAABBAAAADyECAAACAAAAD3MAAABTAAAADyICAAACAAAAD2QA
+ AABEAAAADyMCAAACAAAAD2YAAABGAAAADyQCAAACAAAAD2cAAABHAAAADyUCAAACAAAAD2gAAABIAAAA
+ DyYCAAACAAAAD2oAAABKAAAADycCAAACAAAAD2sAAABLAAAADygCAAACAAAAD2wAAABMAAAADykCAAAC
+ AAAADzsAAAA6AAAADyoCAAACAAAADycAAABAAAAADysCAAACAAAADyMAAAB+AAAADywCAAACAAAAD3oA
+ AABaAAAADy0CAAACAAAAD3gAAABYAAAADy4CAAACAAAAD2MAAABDAAAADy8CAAACAAAAD3YAAABWAAAA
+ DzACAAACAAAAD2IAAABCAAAADzECAAACAAAAD24AAABOAAAADzICAAACAAAAD20AAABNAAAADzMCAAAC
+ AAAADywAAAA8AAAADzQCAAACAAAADy4AAAA+AAAADzUCAAACAAAADy8AAAA/AAAADzYCAAACAAAAD1wA
+ AAB8AAAADzcCAAAAAAAADw84AgAAAgAAAA9eAAAAsP///w85AgAAAgAAAA8xAAAAIQAAAA86AgAAAgAA
+ AA8yAAAAIgAAAA87AgAAAgAAAA8zAAAAp////w88AgAAAgAAAA80AAAAJAAAAA89AgAAAgAAAA81AAAA
+ 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
+ AAAvAAAADzUDAAACAAAADzgAAAAoAAAADzYDAAACAAAADzkAAAApAAAADzcDAAACAAAADzAAAAA9AAAA
+ DzgDAAACAAAADycAAAA/AAAADzkDAAACAAAAD14AAABgAAAADzoDAAACAAAAD3EAAABRAAAADzsDAAAC
+ AAAAD3cAAABXAAAADzwDAAACAAAAD2UAAABFAAAADz0DAAACAAAAD3IAAABSAAAADz4DAAACAAAAD3QA
+ AABUAAAADz8DAAACAAAAD3oAAABaAAAAD0ADAAACAAAAD3UAAABVAAAAD0EDAAACAAAAD2kAAABJAAAA
+ D0IDAAACAAAAD28AAABPAAAAD0MDAAACAAAAD3AAAABQAAAAD0QDAAACAAAAD+j////8////D0UDAAAC
+ AAAAD6j///8hAAAAD0YDAAACAAAAD2EAAABBAAAAD0cDAAACAAAAD3MAAABTAAAAD0gDAAACAAAAD2QA
+ AABEAAAAD0kDAAACAAAAD2YAAABGAAAAD0oDAAACAAAAD2cAAABHAAAAD0sDAAACAAAAD2gAAABIAAAA
+ D0wDAAACAAAAD2oAAABKAAAAD00DAAACAAAAD2sAAABLAAAAD04DAAACAAAAD2wAAABMAAAAD08DAAAC
+ AAAAD+n////2////D1ADAAACAAAAD+D////k////D1EDAAACAAAADyQAAACj////D1IDAAACAAAAD3kA
+ AABZAAAAD1MDAAACAAAAD3gAAABYAAAAD1QDAAACAAAAD2MAAABDAAAAD1UDAAACAAAAD3YAAABWAAAA
+ D1YDAAACAAAAD2IAAABCAAAAD1cDAAACAAAAD24AAABOAAAAD1gDAAACAAAAD20AAABNAAAAD1kDAAAC
+ AAAADywAAAA7AAAAD1oDAAACAAAADy4AAAA6AAAAD1sDAAACAAAADy0AAABfAAAAD1wDAAACAAAADzwA
+ AAA+AAAAD10DAAAAAAAADw9eAwAAAgAAAA+n////vf///w9fAwAAAgAAAA8xAAAAIQAAAA9gAwAAAgAA
+ AA8yAAAAIgAAAA9hAwAAAgAAAA8zAAAAIwAAAA9iAwAAAgAAAA80AAAApP///w9jAwAAAgAAAA81AAAA
+ JQAAAA9kAwAAAgAAAA82AAAAJgAAAA9lAwAAAgAAAA83AAAALwAAAA9mAwAAAgAAAA84AAAAKAAAAA9n
+ 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
+ D4wEAAACAAAADzgAAAAqAAAAD40EAAACAAAADzkAAAAoAAAAD44EAAACAAAADzAAAAApAAAAD48EAAAC
+ AAAADy0AAABfAAAAD5AEAAACAAAADz0AAAArAAAAD5EEAAACAAAAD3EAAABRAAAAD5IEAAACAAAAD3cA
+ AABXAAAAD5MEAAACAAAAD2UAAABFAAAAD5QEAAACAAAAD3IAAABSAAAAD5UEAAACAAAAD3QAAABUAAAA
+ D5YEAAACAAAAD3kAAABZAAAAD5cEAAACAAAAD3UAAABVAAAAD5gEAAACAAAAD2kAAABJAAAAD5kEAAAC
+ AAAAD28AAABPAAAAD5oEAAACAAAAD3AAAABQAAAAD5sEAAACAAAAD14AAABeAAAAD5wEAAACAAAAD7j/
+ //+o////D50EAAACAAAAD2EAAABBAAAAD54EAAACAAAAD3MAAABTAAAAD58EAAACAAAAD2QAAABEAAAA
+ D6AEAAACAAAAD2YAAABGAAAAD6EEAAACAAAAD2cAAABHAAAAD6IEAAACAAAAD2gAAABIAAAAD6MEAAAC
+ AAAAD2oAAABKAAAAD6QEAAACAAAAD2sAAABLAAAAD6UEAAACAAAAD2wAAABMAAAAD6YEAAACAAAADzsA
+ AAA6AAAAD6cEAAACAAAAD2AAAABgAAAAD6gEAAACAAAADzwAAAA+AAAAD6kEAAACAAAAD3oAAABaAAAA
+ D6oEAAACAAAAD3gAAABYAAAAD6sEAAACAAAAD2MAAABDAAAAD6wEAAACAAAAD3YAAABWAAAAD60EAAAC
+ AAAAD2IAAABCAAAAD64EAAACAAAAD24AAABOAAAAD68EAAACAAAAD20AAABNAAAAD7AEAAACAAAADywA
+ AAAnAAAAD7EEAAABAAAADy4AAAAPsgQAAAIAAAAP6f///8n///8PswQAAAIAAAAPq////7v///8PtAQA
+ AAAAAAAPD7UEAAACAAAADy8AAABcAAAAD7YEAAAEAAAADzEAAAAhAAAAuf///6H///8PtwQAAAMAAAAP
+ MgAAAEAAAACy////D7gEAAAEAAAADzMAAAAjAAAAs////6P///8PuQQAAAQAAAAPNAAAACQAAAC8////
+ pP///w+6BAAAAwAAAA81AAAAJQAAAL3///8PuwQAAAMAAAAPNgAAAD8AAAC+////D7wEAAACAAAADzcA
+ AAAmAAAAD70EAAACAAAADzgAAAAqAAAAD74EAAACAAAADzkAAAAoAAAAD78EAAACAAAADzAAAAApAAAA
+ D8AEAAACAAAADy0AAABfAAAAD8EEAAACAAAADz0AAAArAAAAD8IEAAACAAAAD3EAAABRAAAAD8MEAAAC
+ AAAAD3cAAABXAAAAD8QEAAACAAAAD2UAAABFAAAAD8UEAAACAAAAD3IAAABSAAAAD8YEAAACAAAAD3QA
+ AABUAAAAD8cEAAACAAAAD3kAAABZAAAAD8gEAAACAAAAD3UAAABVAAAAD8kEAAACAAAAD2kAAABJAAAA
+ D8oEAAAEAAAAD28AAABPAAAA+P///9j///8PywQAAAQAAAAPcAAAAFAAAAD+////3v///w/MBAAAAwAA
+ AA9eAAAAqP///6j///8PzQQAAAMAAAAP5////8f///9+AAAAD84EAAAEAAAAD2EAAABBAAAA5v///8b/
+ //8PzwQAAAQAAAAPcwAAAFMAAADf////p////w/QBAAABAAAAA9kAAAARAAAAPD////Q////D9EEAAAC
+ AAAAD2YAAABGAAAAD9IEAAACAAAAD2cAAABHAAAAD9MEAAACAAAAD2gAAABIAAAAD9QEAAACAAAAD2oA
+ AABKAAAAD9UEAAACAAAAD2sAAABLAAAAD9YEAAACAAAAD2wAAABMAAAAD9cEAAADAAAADzsAAAA6AAAA
+ tP///w/YBAAAAgAAAA/o////yP///w/ZBAAAAgAAAA/g////wP///w/aBAAAAgAAAA96AAAAWgAAAA/b
+ BAAAAgAAAA94AAAAWAAAAA/cBAAABAAAAA9jAAAAQwAAAKL///+p////D90EAAACAAAAD3YAAABWAAAA
+ D94EAAACAAAAD2IAAABCAAAAD98EAAACAAAAD24AAABOAAAAD+AEAAAEAAAAD20AAABNAAAAtf///7r/
+ //8P4QQAAAIAAAAPLAAAACcAAAAP4gQAAAQAAAAPLgAAACIAAAC3////9////w/jBAAAAgAAAA/p////
+ yf///w/kBAAAAgAAAA/5////2f///w/lBAAAAAAAAA8P5gQAAAAAAAAPD+cEAAADAAAADyYAAAAxAAAA
+ fAAAAA/oBAAAAwAAAA/p////MgAAAEAAAAAP6QQAAAMAAAAPIgAAADMAAAAjAAAAD+oEAAACAAAADycA
+ AAA0AAAAD+sEAAACAAAADygAAAA1AAAAD+wEAAADAAAAD6f///82AAAAXgAAAA/tBAAAAgAAAA/o////
+ NwAAAA/uBAAAAgAAAA8hAAAAOAAAAA/vBAAAAwAAAA/n////OQAAAHsAAAAP8AQAAAMAAAAP4P///zAA
+ AAB9AAAAD/EEAAACAAAADykAAACw////D/IEAAACAAAADy0AAABfAAAAD/MEAAACAAAAD2EAAABBAAAA
+ D/QEAAACAAAAD3oAAABaAAAAD/UEAAADAAAAD2UAAABFAAAApP///w/2BAAAAgAAAA9yAAAAUgAAAA/3
+ BAAAAgAAAA90AAAAVAAAAA/4BAAAAgAAAA95AAAAWQAAAA/5BAAAAgAAAA91AAAAVQAAAA/6BAAAAgAA
+ AA9pAAAASQAAAA/7BAAAAgAAAA9vAAAATwAAAA/8BAAAAgAAAA9wAAAAUAAAAA/9BAAAAwAAAA9eAAAA
+ qP///1sAAAAP/gQAAAMAAAAPJAAAACoAAABdAAAAD/8EAAACAAAAD3EAAABRAAAADwAFAAADAAAAD3MA
+ AABTAAAA3////w8BBQAAAgAAAA9kAAAARAAAAA8CBQAAAgAAAA9mAAAARgAAAA8DBQAAAgAAAA9nAAAA
+ RwAAAA8EBQAAAgAAAA9oAAAASAAAAA8FBQAAAgAAAA9qAAAASgAAAA8GBQAAAgAAAA9rAAAASwAAAA8H
+ BQAAAgAAAA9sAAAATAAAAA8IBQAAAgAAAA9tAAAATQAAAA8JBQAAAwAAAA/5////JQAAALT///8PCgUA
+ AAMAAAAPtf///6P///9gAAAADwsFAAACAAAAD3cAAABXAAAADwwFAAACAAAAD3gAAABYAAAADw0FAAAC
+ AAAAD2MAAABDAAAADw4FAAACAAAAD3YAAABWAAAADw8FAAACAAAAD2IAAABCAAAADxAFAAACAAAAD24A
+ AABOAAAADxEFAAACAAAADywAAAA/AAAADxIFAAACAAAADzsAAAAuAAAADxMFAAACAAAADzoAAAAvAAAA
+ DxQFAAADAAAADz0AAAArAAAAfgAAAA8VBQAAAwAAAA88AAAAPgAAAFwAAAAPFgUAAAAAAAAPDxcFAAAC
+ AAAAD1wAAAB8AAAADxgFAAACAAAADzEAAAAhAAAADxkFAAACAAAADzIAAAAiAAAADxoFAAACAAAADzMA
+ AAAjAAAADxsFAAACAAAADzQAAAAkAAAADxwFAAACAAAADzUAAAAlAAAADx0FAAACAAAADzYAAAAmAAAA
+ Dx4FAAACAAAADzcAAAAvAAAADx8FAAACAAAADzgAAAAoAAAADyAFAAACAAAADzkAAAApAAAADyEFAAAC
+ AAAADzAAAAA9AAAADyIFAAACAAAADycAAAA/AAAADyMFAAACAAAAD6v///+7////DyQFAAACAAAAD3EA
+ AABRAAAADyUFAAACAAAAD3cAAABXAAAADyYFAAACAAAAD2UAAABFAAAADycFAAACAAAAD3IAAABSAAAA
+ DygFAAACAAAAD3QAAABUAAAADykFAAACAAAAD3kAAABZAAAADyoFAAACAAAAD3UAAABVAAAADysFAAAC
+ AAAAD2kAAABJAAAADywFAAACAAAAD28AAABPAAAADy0FAAACAAAAD3AAAABQAAAADy4FAAACAAAADysA
+ AAAqAAAADy8FAAACAAAAD7T///9gAAAADzAFAAACAAAAD2EAAABBAAAADzEFAAACAAAAD3MAAABTAAAA
+ DzIFAAACAAAAD2QAAABEAAAADzMFAAACAAAAD2YAAABGAAAADzQFAAACAAAAD2cAAABHAAAADzUFAAAC
+ AAAAD2gAAABIAAAADzYFAAACAAAAD2oAAABKAAAADzcFAAACAAAAD2sAAABLAAAADzgFAAACAAAAD2wA
+ AABMAAAADzkFAAACAAAAD+f////H////DzoFAAACAAAAD7r///+q////DzsFAAACAAAAD34AAABeAAAA
+ DzwFAAACAAAAD3oAAABaAAAADz0FAAACAAAAD3gAAABYAAAADz4FAAACAAAAD2MAAABDAAAADz8FAAAC
+ AAAAD3YAAABWAAAAD0AFAAACAAAAD2IAAABCAAAAD0EFAAACAAAAD24AAABOAAAAD0IFAAACAAAAD20A
+ AABNAAAAD0MFAAACAAAADywAAAA7AAAAD0QFAAACAAAADy4AAAA6AAAAD0UFAAACAAAADy0AAABfAAAA
+ D0YFAAACAAAADzwAAAA+AAAAD0cFAAAAAAAADw9IBQAAAgAAAA8nAAAAIgAAAA9JBQAAAgAAAA8xAAAA
+ IQAAAA9KBQAAAgAAAA8yAAAAQAAAAA9LBQAAAgAAAA8zAAAAIwAAAA9MBQAAAgAAAA80AAAAJAAAAA9N
+ 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
+ NAAAACIAAAAP4AUAAAIAAAAPNQAAACUAAAAP4QUAAAQAAAAPNgAAAF4AAAA2AAAAPQAAAA/iBQAABAAA
+ AA83AAAAJgAAADcAAAA6AAAAD+MFAAAEAAAADzgAAAAqAAAAOAAAAC8AAAAP5AUAAAIAAAAPOQAAACgA
+ AAAP5QUAAAIAAAAPMAAAACkAAAAP5gUAAAQAAAAPLQAAAF8AAAAtAAAASQAAAA/nBQAABAAAAA89AAAA
+ KwAAAC4AAABWAAAAD+gFAAAEAAAAD3EAAABRAAAALAAAAPv///8P6QUAAAQAAAAPdwAAAFcAAADz////
+ 0////w/qBQAABAAAAA9lAAAARQAAAOX////F////D+sFAAAEAAAAD3IAAABSAAAA6P///8j///8P7AUA
+ AAQAAAAPdAAAAFQAAAD4////2P///w/tBQAABAAAAA95AAAAWQAAAPn////Z////D+4FAAAEAAAAD3UA
+ AABVAAAA6v///8r///8P7wUAAAQAAAAPaQAAAEkAAADx////0f///w/wBQAABAAAAA9vAAAATwAAAOT/
+ ///E////D/EFAAAEAAAAD3AAAABQAAAA5////8f///8P8gUAAAQAAAAPWwAAAHsAAAD2////1v///w/z
+ BQAAAwAAAA9dAAAAfQAAADsAAAAP9AUAAAQAAAAPYQAAAEEAAAD8////3P///w/1BQAABAAAAA9zAAAA
+ UwAAAP/////f////D/YFAAAEAAAAD2QAAABEAAAA4P///8D///8P9wUAAAQAAAAPZgAAAEYAAADu////
+ zv///w/4BQAABAAAAA9nAAAARwAAAOb////G////D/kFAAAEAAAAD2gAAABIAAAA4////8P///8P+gUA
+ AAQAAAAPagAAAEoAAADy////0v///w/7BQAABAAAAA9rAAAASwAAAO3////N////D/wFAAAEAAAAD2wA
+ AABMAAAA4v///8L///8P/QUAAAQAAAAPOwAAADoAAADs////zP///w/+BQAABAAAAA8nAAAAIgAAAPf/
+ ///X////D/8FAAAEAAAAD1wAAAB8AAAAJwAAANv///8PAAYAAAQAAAAPegAAAFoAAAD+////3v///w8B
+ BgAABAAAAA94AAAAWAAAAOn////J////DwIGAAAEAAAAD2MAAABDAAAA+v///9r///8PAwYAAAQAAAAP
+ dgAAAFYAAAD9////3f///w8EBgAABAAAAA9iAAAAQgAAAPT////U////DwUGAAAEAAAAD24AAABOAAAA
+ 9f///9X///8PBgYAAAQAAAAPbQAAAE0AAADv////z////w8HBgAABAAAAA8sAAAAPAAAAPD////Q////
+ DwgGAAAEAAAADy4AAAA+AAAA6////8v///8PCQYAAAQAAAAPLwAAAD8AAADh////wf///w8KBgAAAgAA
+ AA88AAAAPgAAAA8LBgAAAAAAAA8PDAYAAAQAAAAPYAAAAH4AAAD3////1////w8NBgAAAgAAAA8xAAAA
+ IQAAAA8OBgAAAgAAAA8yAAAAQAAAAA8PBgAAAgAAAA8zAAAAIwAAAA8QBgAAAgAAAA80AAAAJAAAAA8R
+ BgAAAgAAAA81AAAAJQAAAA8SBgAAAgAAAA82AAAAXgAAAA8TBgAAAgAAAA83AAAAJgAAAA8UBgAAAgAA
+ AA84AAAAKgAAAA8VBgAAAgAAAA85AAAAKAAAAA8WBgAAAgAAAA8wAAAAKQAAAA8XBgAAAgAAAA8tAAAA
+ XwAAAA8YBgAAAgAAAA89AAAAKwAAAA8ZBgAABAAAAA9xAAAAUQAAAP/////f////DxoGAAAEAAAAD3cA
+ AABXAAAA4v///8L///8PGwYAAAQAAAAPZQAAAEUAAADl////xf///w8cBgAABAAAAA9yAAAAUgAAAPD/
+ ///Q////Dx0GAAAEAAAAD3QAAABUAAAA8v///9L///8PHgYAAAQAAAAPeQAAAFkAAAD6////2v///w8f
+ BgAABAAAAA91AAAAVQAAAPP////T////DyAGAAAEAAAAD2kAAABJAAAA6P///8j///8PIQYAAAQAAAAP
+ bwAAAE8AAADu////zv///w8iBgAABAAAAA9wAAAAUAAAAO/////P////DyMGAAAEAAAAD1sAAAB7AAAA
+ +P///9j///8PJAYAAAQAAAAPXQAAAH0AAAD5////2f///w8lBgAABAAAAA9hAAAAQQAAAOD////A////
+ DyYGAAAEAAAAD3MAAABTAAAA8f///9H///8PJwYAAAQAAAAPZAAAAEQAAADk////xP///w8oBgAABAAA
+ AA9mAAAARgAAAPT////U////DykGAAAEAAAAD2cAAABHAAAA4////8P///8PKgYAAAQAAAAPaAAAAEgA
+ AAD1////1f///w8rBgAABAAAAA9qAAAASgAAAOn////J////DywGAAAEAAAAD2sAAABLAAAA6v///8r/
+ //8PLQYAAAQAAAAPbAAAAEwAAADr////y////w8uBgAAAgAAAA87AAAAOgAAAA8vBgAAAgAAAA8nAAAA
+ IgAAAA8wBgAABAAAAA9cAAAAfAAAAP7////e////DzEGAAAEAAAAD3oAAABaAAAA5////8f///8PMgYA
+ AAQAAAAPeAAAAFgAAAD8////3P///w8zBgAABAAAAA9jAAAAQwAAAPb////W////DzQGAAAEAAAAD3YA
+ AABWAAAA5v///8b///8PNQYAAAQAAAAPYgAAAEIAAADh////wf///w82BgAABAAAAA9uAAAATgAAAO3/
+ ///N////DzcGAAAEAAAAD20AAABNAAAA7P///8z///8POAYAAAIAAAAPLAAAADwAAAAPOQYAAAIAAAAP
+ LgAAAD4AAAAPOgYAAAIAAAAPLwAAAD8AAAAPOwYAAAIAAAAPPAAAAD4AAAAPPAYAAAAAAAAPDz0GAAAE
+ AAAAD2AAAAB+AAAAo////7P///8PPgYAAAIAAAAPMQAAACEAAAAPPwYAAAIAAAAPMgAAAEAAAAAPQAYA
+ AAIAAAAPMwAAACMAAAAPQQYAAAIAAAAPNAAAACQAAAAPQgYAAAIAAAAPNQAAACUAAAAPQwYAAAIAAAAP
+ NgAAAF4AAAAPRAYAAAIAAAAPNwAAACYAAAAPRQYAAAIAAAAPOAAAACoAAAAPRgYAAAIAAAAPOQAAACgA
+ AAAPRwYAAAIAAAAPMAAAACkAAAAPSAYAAAIAAAAPLQAAAF8AAAAPSQYAAAIAAAAPPQAAACsAAAAPSgYA
+ AAQAAAAPcQAAAFEAAADK////6v///w9LBgAABAAAAA93AAAAVwAAAMP////j////D0wGAAAEAAAAD2UA
+ AABFAAAA1f////X///8PTQYAAAQAAAAPcgAAAFIAAADL////6////w9OBgAABAAAAA90AAAAVAAAAMX/
+ ///l////D08GAAAEAAAAD3kAAABZAAAAzv///+7///8PUAYAAAQAAAAPdQAAAFUAAADH////5////w9R
+ BgAABAAAAA9pAAAASQAAANv////7////D1IGAAAEAAAAD28AAABPAAAArv///77///8PUwYAAAQAAAAP
+ cAAAAFAAAADa////+v///w9UBgAABAAAAA9bAAAAewAAAMj////o////D1UGAAAEAAAAD10AAAB9AAAA
+ JwAAACcAAAAPVgYAAAQAAAAPYQAAAEEAAADG////5v///w9XBgAABAAAAA9zAAAAUwAAANn////5////
+ D1gGAAAEAAAAD2QAAABEAAAA1/////f///8PWQYAAAQAAAAPZgAAAEYAAADB////4f///w9aBgAABAAA
+ AA9nAAAARwAAAND////w////D1sGAAAEAAAAD2gAAABIAAAA0v////L///8PXAYAAAQAAAAPagAAAEoA
+ AADP////7////w9dBgAABAAAAA9rAAAASwAAAMz////s////D14GAAAEAAAAD2wAAABMAAAAxP///+T/
+ //8PXwYAAAQAAAAPOwAAADoAAADW////9v///w9gBgAABAAAAA8nAAAAIgAAANz////8////D2EGAAAE
+ AAAAD1wAAAB8AAAALwAAAHwAAAAPYgYAAAQAAAAPegAAAFoAAADR////8f///w9jBgAABAAAAA94AAAA
+ WAAAAN7////+////D2QGAAAEAAAAD2MAAABDAAAA0/////P///8PZQYAAAQAAAAPdgAAAFYAAADN////
+ 7f///w9mBgAABAAAAA9iAAAAQgAAAKb///+2////D2cGAAAEAAAAD24AAABOAAAA1P////T///8PaAYA
+ AAQAAAAPbQAAAE0AAADY////+P///w9pBgAABAAAAA8sAAAAPAAAAML////i////D2oGAAAEAAAADy4A
+ AAA+AAAAwP///+D///8PawYAAAQAAAAPLwAAAD8AAAAuAAAALAAAAA9sBgAABAAAAA88AAAAPgAAAHwA
+ AACm////D20GAAAAAAAADw9uBgAAAgAAAA9gAAAAfgAAAA9vBgAAAgAAAA8xAAAAIQAAAA9wBgAAAgAA
+ AA8yAAAAQAAAAA9xBgAAAgAAAA8zAAAAIwAAAA9yBgAAAgAAAA80AAAAJAAAAA9zBgAAAgAAAA81AAAA
+ JQAAAA90BgAAAgAAAA82AAAAXgAAAA91BgAAAgAAAA83AAAAJgAAAA92BgAAAgAAAA84AAAAKgAAAA93
+ BgAAAgAAAA85AAAAKAAAAA94BgAAAgAAAA8wAAAAKQAAAA95BgAAAgAAAA8tAAAAXwAAAA96BgAAAgAA
+ AA89AAAAKwAAAA97BgAABAAAAA9xAAAAUQAAAMr////q////D3wGAAAEAAAAD3cAAABXAAAAw////+P/
+ //8PfQYAAAQAAAAPZQAAAEUAAADV////9f///w9+BgAABAAAAA9yAAAAUgAAAMv////r////D38GAAAE
+ AAAAD3QAAABUAAAAxf///+X///8PgAYAAAQAAAAPeQAAAFkAAADO////7v///w+BBgAABAAAAA91AAAA
+ VQAAAMf////n////D4IGAAAEAAAAD2kAAABJAAAA2/////v///8PgwYAAAQAAAAPbwAAAE8AAADd////
+ /f///w+EBgAABAAAAA9wAAAAUAAAANr////6////D4UGAAAEAAAAD1sAAAB7AAAAyP///+j///8PhgYA
+ AAQAAAAPXQAAAH0AAADf/////////w+HBgAABAAAAA9hAAAAQQAAAMb////m////D4gGAAAEAAAAD3MA
+ AABTAAAA2f////n///8PiQYAAAQAAAAPZAAAAEQAAADX////9////w+KBgAABAAAAA9mAAAARgAAAMH/
+ ///h////D4sGAAAEAAAAD2cAAABHAAAA0P////D///8PjAYAAAQAAAAPaAAAAEgAAADS////8v///w+N
+ BgAABAAAAA9qAAAASgAAAM/////v////D44GAAAEAAAAD2sAAABLAAAAzP///+z///8PjwYAAAQAAAAP
+ bAAAAEwAAADE////5P///w+QBgAABAAAAA87AAAAOgAAANb////2////D5EGAAAEAAAADycAAAAiAAAA
+ 3P////z///8PkgYAAAIAAAAPXAAAAHwAAAAPkwYAAAQAAAAPegAAAFoAAADR////8f///w+UBgAABAAA
+ AA94AAAAWAAAAN7////+////D5UGAAAEAAAAD2MAAABDAAAA0/////P///8PlgYAAAQAAAAPdgAAAFYA
+ AADN////7f///w+XBgAABAAAAA9iAAAAQgAAAMn////p////D5gGAAAEAAAAD24AAABOAAAA1P////T/
+ //8PmQYAAAQAAAAPbQAAAE0AAADY////+P///w+aBgAABAAAAA8sAAAAPAAAAML////i////D5sGAAAE
+ AAAADy4AAAA+AAAAwP///+D///8PnAYAAAIAAAAPLwAAAD8AAAAPnQYAAAAAAAAPD54GAAAAAAAADw+f
+ BgAAAgAAAA9gAAAAfgAAAA+gBgAAAgAAAA8xAAAAIQAAAA+hBgAAAgAAAA8yAAAAQAAAAA+iBgAAAgAA
+ AA8zAAAAIwAAAA+jBgAAAgAAAA80AAAAJAAAAA+kBgAAAgAAAA81AAAAJQAAAA+lBgAAAgAAAA82AAAA
+ XgAAAA+mBgAAAgAAAA83AAAAJgAAAA+nBgAAAgAAAA84AAAAKgAAAA+oBgAAAgAAAA85AAAAKAAAAA+p
+ BgAAAgAAAA8wAAAAKQAAAA+qBgAAAgAAAA8tAAAAXwAAAA+rBgAAAgAAAA89AAAAKwAAAA+sBgAABAAA
+ AA9xAAAAUQAAAMr////q////D60GAAAEAAAAD3cAAABXAAAAw////+P///8PrgYAAAQAAAAPZQAAAEUA
+ AADV////9f///w+vBgAABAAAAA9yAAAAUgAAAMv////r////D7AGAAAEAAAAD3QAAABUAAAAxf///+X/
+ //8PsQYAAAQAAAAPeQAAAFkAAADO////7v///w+yBgAABAAAAA91AAAAVQAAAMf////n////D7MGAAAE
+ AAAAD2kAAABJAAAA2/////v///8PtAYAAAQAAAAPbwAAAE8AAADd/////f///w+1BgAABAAAAA9wAAAA
+ UAAAANr////6////D7YGAAAEAAAAD1sAAAB7AAAAyP///+j///8PtwYAAAQAAAAPXQAAAH0AAADf////
+ /////w+4BgAABAAAAA9hAAAAQQAAAMb////m////D7kGAAAEAAAAD3MAAABTAAAA2f////n///8PugYA
+ AAQAAAAPZAAAAEQAAADX////9////w+7BgAABAAAAA9mAAAARgAAAMH////h////D7wGAAAEAAAAD2cA
+ AABHAAAA0P////D///8PvQYAAAQAAAAPaAAAAEgAAADS////8v///w++BgAABAAAAA9qAAAASgAAAM//
+ ///v////D78GAAAEAAAAD2sAAABLAAAAzP///+z///8PwAYAAAQAAAAPbAAAAEwAAADE////5P///w/B
+ BgAABAAAAA87AAAAOgAAANb////2////D8IGAAAEAAAADycAAAAiAAAA3P////z///8PwwYAAAIAAAAP
+ XAAAAHwAAAAPxAYAAAQAAAAPegAAAFoAAADR////8f///w/FBgAABAAAAA94AAAAWAAAAN7////+////
+ D8YGAAAEAAAAD2MAAABDAAAA0/////P///8PxwYAAAQAAAAPdgAAAFYAAADN////7f///w/IBgAABAAA
+ AA9iAAAAQgAAAMn////p////D8kGAAAEAAAAD24AAABOAAAA1P////T///8PygYAAAQAAAAPbQAAAE0A
+ AADY////+P///w/LBgAABAAAAA8sAAAAPAAAAML////i////D8wGAAAEAAAADy4AAAA+AAAAwP///+D/
+ //8PzQYAAAIAAAAPLwAAAD8AAAAPzgYAAAIAAAAPPAAAAD4AAAAPzwYAAAAAAAAPD9AGAAACAAAADygA
+ AAApAAAAD9EGAAACAAAADzEAAAAhAAAAD9IGAAACAAAADzIAAAAiAAAAD9MGAAACAAAADzMAAAAvAAAA
+ D9QGAAACAAAADzQAAAAkAAAAD9UGAAACAAAADzUAAAA6AAAAD9YGAAACAAAADzYAAAAsAAAAD9cGAAAC
+ AAAADzcAAAAuAAAAD9gGAAACAAAADzgAAAA7AAAAD9kGAAACAAAADzkAAAA/AAAAD9oGAAACAAAADzAA
+ AAAlAAAAD9sGAAACAAAADy0AAABfAAAAD9wGAAACAAAADz0AAAArAAAAD90GAAACAAAAD8r////q////
+ D94GAAACAAAAD8P////j////D98GAAACAAAAD9X////1////D+AGAAACAAAAD8v////r////D+EGAAAC
+ AAAAD8X////l////D+IGAAACAAAAD87////u////D+MGAAACAAAAD8f////n////D+QGAAACAAAAD9v/
+ ///7////D+UGAAACAAAAD93////9////D+YGAAACAAAAD9r////6////D+cGAAACAAAAD8j////o////
+ D+gGAAACAAAAD9//////////D+kGAAACAAAAD8b////m////D+oGAAACAAAAD9n////5////D+sGAAAC
+ AAAAD9f////3////D+wGAAACAAAAD8H////h////D+0GAAACAAAAD9D////w////D+4GAAACAAAAD9L/
+ ///y////D+8GAAACAAAAD8/////v////D/AGAAACAAAAD8z////s////D/EGAAACAAAAD8T////k////
+ D/IGAAACAAAAD9b////2////D/MGAAACAAAAD9z////8////D/QGAAACAAAAD1wAAAB8AAAAD/UGAAAC
+ AAAAD9H////x////D/YGAAACAAAAD97////+////D/cGAAACAAAAD9P////z////D/gGAAACAAAAD83/
+ ///t////D/kGAAACAAAAD8n////p////D/oGAAACAAAAD9T////0////D/sGAAACAAAAD9j////4////
+ D/wGAAACAAAAD8L////i////D/0GAAACAAAAD8D////g////D/4GAAACAAAADy8AAAA/AAAAD/8GAAAC
+ AAAADzwAAAA+AAAADwAHAAAAAAAADw8BBwAAAgAAAA9gAAAAfgAAAA8CBwAAAgAAAA8xAAAAIQAAAA8D
+ BwAAAgAAAA8yAAAAQAAAAA8EBwAAAgAAAA8zAAAAIwAAAA8FBwAAAgAAAA80AAAAJAAAAA8GBwAAAgAA
+ AA81AAAAJQAAAA8HBwAAAgAAAA82AAAAXgAAAA8IBwAAAgAAAA83AAAAJgAAAA8JBwAAAgAAAA84AAAA
+ KgAAAA8KBwAAAgAAAA85AAAAKAAAAA8LBwAAAgAAAA8wAAAAKQAAAA8MBwAAAgAAAA8tAAAAXwAAAA8N
+ BwAAAgAAAA89AAAAKwAAAA8OBwAABAAAAA9xAAAAUQAAAOn////J////Dw8HAAAEAAAAD3cAAABXAAAA
+ 9v///9b///8PEAcAAAQAAAAPZQAAAEUAAADz////0////w8RBwAABAAAAA9yAAAAUgAAAOr////K////
+ DxIHAAAEAAAAD3QAAABUAAAA5f///8X///8PEwcAAAQAAAAPeQAAAFkAAADt////zf///w8UBwAABAAA
+ AA91AAAAVQAAAOP////D////DxUHAAAEAAAAD2kAAABJAAAA+P///9j///8PFgcAAAQAAAAPbwAAAE8A
+ AAD5////2f///w8XBwAABAAAAA9wAAAAUAAAAOf////H////DxgHAAAEAAAAD1sAAAB7AAAA9f///9X/
+ //8PGQcAAAQAAAAPXQAAAH0AAAD6////2v///w8aBwAABAAAAA9hAAAAQQAAAPT////U////DxsHAAAE
+ AAAAD3MAAABTAAAA+////9v///8PHAcAAAQAAAAPZAAAAEQAAADi////wv///w8dBwAABAAAAA9mAAAA
+ RgAAAOD////A////Dx4HAAAEAAAAD2cAAABHAAAA7////8////8PHwcAAAQAAAAPaAAAAEgAAADw////
+ 0P///w8gBwAABAAAAA9qAAAASgAAAO7////O////DyEHAAAEAAAAD2sAAABLAAAA6////8v///8PIgcA
+ AAQAAAAPbAAAAEwAAADk////xP///w8jBwAABAAAAA87AAAAOgAAAOb////G////DyQHAAAEAAAADycA
+ AAAiAAAA/f///93///8PJQcAAAIAAAAPXAAAAHwAAAAPJgcAAAQAAAAPegAAAFoAAAD/////3////w8n
+ BwAABAAAAA94AAAAWAAAAPf////X////DygHAAAEAAAAD2MAAABDAAAA8f///9H///8PKQcAAAQAAAAP
+ dgAAAFYAAADs////zP///w8qBwAABAAAAA9iAAAAQgAAAOj////I////DysHAAAEAAAAD24AAABOAAAA
+ 8v///9L///8PLAcAAAQAAAAPbQAAAE0AAAD8////3P///w8tBwAABAAAAA8sAAAAPAAAAOH////B////
+ Dy4HAAAEAAAADy4AAAA+AAAA/v///97///8PLwcAAAIAAAAPLwAAAD8AAAAPMAcAAAIAAAAPPAAAAD4A
+ AAAPMQcAAAAAAAAPDzIHAAACAAAAD2AAAAB+AAAADzMHAAACAAAADzEAAAAhAAAADzQHAAACAAAADzIA
+ AABAAAAADzUHAAACAAAADzMAAAAjAAAADzYHAAACAAAADzQAAAAkAAAADzcHAAACAAAADzUAAAAlAAAA
+ DzgHAAACAAAADzYAAABeAAAADzkHAAACAAAADzcAAAAmAAAADzoHAAACAAAADzgAAAAqAAAADzsHAAAC
+ AAAADzkAAAAoAAAADzwHAAACAAAADzAAAAApAAAADz0HAAACAAAADy0AAABfAAAADz4HAAACAAAADz0A
+ AAArAAAADz8HAAAEAAAAD3EAAABRAAAA0f////H///8PQAcAAAQAAAAPdwAAAFcAAADX////9////w9B
+ BwAABAAAAA9lAAAARQAAAMX////l////D0IHAAAEAAAAD3IAAABSAAAA0v////L///8PQwcAAAQAAAAP
+ dAAAAFQAAADU////9P///w9EBwAABAAAAA95AAAAWQAAANn////5////D0UHAAAEAAAAD3UAAABVAAAA
+ 1f////X///8PRgcAAAQAAAAPaQAAAEkAAADJ////6f///w9HBwAABAAAAA9vAAAATwAAAM/////v////
+ D0gHAAAEAAAAD3AAAABQAAAA0P////D///8PSQcAAAQAAAAPWwAAAHsAAADb////+////w9KBwAABAAA
+ AA9dAAAAfQAAAN3////9////D0sHAAAEAAAAD2EAAABBAAAAwf///+H///8PTAcAAAQAAAAPcwAAAFMA
+ AADT////8////w9NBwAABAAAAA9kAAAARAAAAMT////k////D04HAAAEAAAAD2YAAABGAAAAxv///+b/
+ //8PTwcAAAQAAAAPZwAAAEcAAADH////5////w9QBwAABAAAAA9oAAAASAAAAMj////o////D1EHAAAE
+ AAAAD2oAAABKAAAAyv///+r///8PUgcAAAQAAAAPawAAAEsAAADL////6////w9TBwAABAAAAA9sAAAA
+ TAAAAMz////s////D1QHAAACAAAADzsAAAA6AAAAD1UHAAACAAAADycAAAAiAAAAD1YHAAACAAAAD1wA
+ AAB8AAAAD1cHAAAEAAAAD3oAAABaAAAA2v////r///8PWAcAAAQAAAAPeAAAAFgAAADY////+P///w9Z
+ BwAABAAAAA9jAAAAQwAAAMP////j////D1oHAAAEAAAAD3YAAABWAAAA1v////b///8PWwcAAAQAAAAP
+ YgAAAEIAAADC////4v///w9cBwAABAAAAA9uAAAATgAAAM7////u////D10HAAAEAAAAD20AAABNAAAA
+ zf///+3///8PXgcAAAIAAAAPLAAAADwAAAAPXwcAAAIAAAAPLgAAAD4AAAAPYAcAAAIAAAAPLwAAAD8A
+ AAAPYQcAAAIAAAAPPAAAAD4AAAAPYgcAAAAAAAAPD2MHAAAEAAAAD2AAAAB+AAAArf///73///8PZAcA
+ AAQAAAAPMQAAACEAAAAxAAAAIQAAAA9lBwAABAAAAA8yAAAAQAAAADIAAAAiAAAAD2YHAAAEAAAADzMA
+ AAAjAAAAMwAAACcAAAAPZwcAAAQAAAAPNAAAACQAAAA0AAAAKgAAAA9oBwAABAAAAA81AAAAJQAAADUA
+ AAA6AAAAD2kHAAAEAAAADzYAAABeAAAANgAAACwAAAAPagcAAAQAAAAPNwAAACYAAAA3AAAALgAAAA9r
+ BwAABAAAAA84AAAAKgAAADgAAAA7AAAAD2wHAAAEAAAADzkAAAAoAAAAOQAAACgAAAAPbQcAAAQAAAAP
+ MAAAACkAAAAwAAAAKQAAAA9uBwAABAAAAA8tAAAAXwAAAC0AAABfAAAAD28HAAAEAAAADz0AAAArAAAA
+ PQAAACsAAAAPcAcAAAQAAAAPcQAAAFEAAADK////6v///w9xBwAABAAAAA93AAAAVwAAAMP////j////
+ D3IHAAAEAAAAD2UAAABFAAAA1f////X///8PcwcAAAQAAAAPcgAAAFIAAADL////6////w90BwAABAAA
+ AA90AAAAVAAAAMX////l////D3UHAAAEAAAAD3kAAABZAAAAzv///+7///8PdgcAAAQAAAAPdQAAAFUA
+ AADH////5////w93BwAABAAAAA9pAAAASQAAANv////7////D3gHAAAEAAAAD28AAABPAAAA3f////3/
+ //8PeQcAAAQAAAAPcAAAAFAAAADa////+v///w96BwAABAAAAA9bAAAAewAAAMj////o////D3sHAAAE
+ AAAAD10AAAB9AAAAp////7f///8PfAcAAAQAAAAPYQAAAEEAAADG////5v///w99BwAABAAAAA9zAAAA
+ UwAAAKb///+2////D34HAAAEAAAAD2QAAABEAAAA1/////f///8PfwcAAAQAAAAPZgAAAEYAAADB////
+ 4f///w+ABwAABAAAAA9nAAAARwAAAND////w////D4EHAAAEAAAAD2gAAABIAAAA0v////L///8PggcA
+ AAQAAAAPagAAAEoAAADP////7////w+DBwAABAAAAA9rAAAASwAAAMz////s////D4QHAAAEAAAAD2wA
+ AABMAAAAxP///+T///8PhQcAAAQAAAAPOwAAADoAAADW////9v///w+GBwAABAAAAA8nAAAAIgAAAKT/
+ //+0////D4cHAAAEAAAAD1wAAAB8AAAAXAAAAHwAAAAPiAcAAAQAAAAPegAAAFoAAADR////8f///w+J
+ BwAABAAAAA94AAAAWAAAAN7////+////D4oHAAAEAAAAD2MAAABDAAAA0/////P///8PiwcAAAQAAAAP
+ dgAAAFYAAADN////7f///w+MBwAABAAAAA9iAAAAQgAAAMn////p////D40HAAAEAAAAD24AAABOAAAA
+ 1P////T///8PjgcAAAQAAAAPbQAAAE0AAADY////+P///w+PBwAABAAAAA8sAAAAPAAAAML////i////
+ D5AHAAAEAAAADy4AAAA+AAAAwP///+D///8PkQcAAAQAAAAPLwAAAD8AAAAvAAAAPwAAAA+SBwAAAgAA
+ AA88AAAAPgAAAA+TBwAAAAAAAA8PlAcAAAIAAAAPrf///73///8PlQcAAAIAAAAPMQAAACEAAAAPlgcA
+ AAIAAAAPMgAAACIAAAAPlwcAAAIAAAAPMwAAACcAAAAPmAcAAAIAAAAPNAAAADsAAAAPmQcAAAIAAAAP
+ NQAAACUAAAAPmgcAAAIAAAAPNgAAADoAAAAPmwcAAAIAAAAPNwAAAD8AAAAPnAcAAAIAAAAPOAAAACoA
+ AAAPnQcAAAIAAAAPOQAAACgAAAAPngcAAAIAAAAPMAAAACkAAAAPnwcAAAIAAAAPLQAAAF8AAAAPoAcA
+ AAIAAAAPPQAAACsAAAAPoQcAAAIAAAAPyv///+r///8PogcAAAIAAAAPw////+P///8PowcAAAIAAAAP
+ 1f////X///8PpAcAAAIAAAAPy////+v///8PpQcAAAIAAAAPxf///+X///8PpgcAAAIAAAAPzv///+7/
+ //8PpwcAAAIAAAAPx////+f///8PqAcAAAIAAAAP2/////v///8PqQcAAAIAAAAP3f////3///8PqgcA
+ AAIAAAAP2v////r///8PqwcAAAIAAAAPyP///+j///8PrAcAAAIAAAAPp////7f///8PrQcAAAIAAAAP
+ xv///+b///8PrgcAAAIAAAAPpv///7b///8PrwcAAAIAAAAP1/////f///8PsAcAAAIAAAAPwf///+H/
+ //8PsQcAAAIAAAAP0P////D///8PsgcAAAIAAAAP0v////L///8PswcAAAIAAAAPz////+////8PtAcA
+ AAIAAAAPzP///+z///8PtQcAAAIAAAAPxP///+T///8PtgcAAAIAAAAP1v////b///8PtwcAAAIAAAAP
+ pP///7T///8PuAcAAAIAAAAPXAAAAC8AAAAPuQcAAAIAAAAP0f////H///8PugcAAAIAAAAP3v////7/
+ //8PuwcAAAIAAAAP0/////P///8PvAcAAAIAAAAPzf///+3///8PvQcAAAIAAAAPyf///+n///8PvgcA
+ AAIAAAAP1P////T///8PvwcAAAIAAAAP2P////j///8PwAcAAAIAAAAPwv///+L///8PwQcAAAIAAAAP
+ wP///+D///8PwgcAAAIAAAAPLgAAACwAAAAPwwcAAAIAAAAPPAAAAD4AAAAPxAcAAAAAAAAPD8UHAAAC
+ AAAAD6P///+z////D8YHAAACAAAADzEAAAAhAAAAD8cHAAACAAAADzIAAAAiAAAAD8gHAAACAAAADzMA
+ AAAnAAAAD8kHAAACAAAADzQAAAA7AAAAD8oHAAACAAAADzUAAAAlAAAAD8sHAAACAAAADzYAAAA6AAAA
+ D8wHAAACAAAADzcAAAA/AAAAD80HAAACAAAADzgAAAAqAAAAD84HAAACAAAADzkAAAAoAAAAD88HAAAC
+ AAAADzAAAAApAAAAD9AHAAACAAAADy0AAABfAAAAD9EHAAACAAAADz0AAAArAAAAD9IHAAACAAAAD8r/
+ ///q////D9MHAAACAAAAD8P////j////D9QHAAACAAAAD9X////1////D9UHAAACAAAAD8v////r////
+ D9YHAAACAAAAD8X////l////D9cHAAACAAAAD87////u////D9gHAAACAAAAD8f////n////D9kHAAAC
+ AAAAD9v////7////D9oHAAACAAAAD93////9////D9sHAAACAAAAD9r////6////D9wHAAACAAAAD8j/
+ ///o////D90HAAACAAAAD9//////////D94HAAACAAAAD8b////m////D98HAAACAAAAD9n////5////
+ D+AHAAACAAAAD9f////3////D+EHAAACAAAAD8H////h////D+IHAAACAAAAD9D////w////D+MHAAAC
+ AAAAD9L////y////D+QHAAACAAAAD8/////v////D+UHAAACAAAAD8z////s////D+YHAAACAAAAD8T/
+ ///k////D+cHAAACAAAAD9b////2////D+gHAAACAAAAD9z////8////D+kHAAACAAAAD1wAAAAvAAAA
+ D+oHAAACAAAAD9H////x////D+sHAAACAAAAD97////+////D+wHAAACAAAAD9P////z////D+0HAAAC
+ AAAAD83////t////D+4HAAACAAAAD8n////p////D+8HAAACAAAAD9T////0////D/AHAAACAAAAD9j/
+ ///4////D/EHAAACAAAAD8L////i////D/IHAAACAAAAD8D////g////D/MHAAACAAAADy4AAAAsAAAA
+ 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
+ IgAAALf///8PjAgAAAMAAAAPMwAAACsAAABeAAAAD40IAAADAAAADzQAAAAhAAAAov///w+OCAAABAAA
+ AA81AAAAJQAAADAAAACw////D48IAAADAAAADzYAAAAvAAAAsv///w+QCAAAAwAAAA83AAAAPQAAAGAA
+ AAAPkQgAAAMAAAAPOAAAACgAAAD/////D5IIAAADAAAADzkAAAApAAAAtP///w+TCAAAAwAAAA/2////
+ 1v///73///8PlAgAAAMAAAAP/P///9z///+o////D5UIAAADAAAAD/P////T////uP///w+WCAAAAwAA
+ AA9xAAAAUQAAAFwAAAAPlwgAAAMAAAAPdwAAAFcAAAB8AAAAD5gIAAACAAAAD2UAAABFAAAAD5kIAAAC
+ AAAAD3IAAABSAAAAD5oIAAACAAAAD3QAAABUAAAAD5sIAAACAAAAD3oAAABaAAAAD5wIAAACAAAAD3UA
+ AABVAAAAD50IAAADAAAAD2kAAABJAAAAzf///w+eCAAAAwAAAA9vAAAATwAAAPj///8PnwgAAAIAAAAP
+ cAAAAFAAAAAPoAgAAAMAAAAP9f///9X////3////D6EIAAADAAAAD/r////a////1////w+iCAAAAgAA
+ AA9hAAAAQQAAAA+jCAAAAwAAAA9zAAAAUwAAAPD///8PpAgAAAMAAAAPZAAAAEQAAADQ////D6UIAAAD
+ AAAAD2YAAABGAAAAWwAAAA+mCAAAAwAAAA9nAAAARwAAAF0AAAAPpwgAAAIAAAAPaAAAAEgAAAAPqAgA
+ AAMAAAAPagAAAEoAAADt////D6kIAAADAAAAD2sAAABLAAAAs////w+qCAAAAwAAAA9sAAAATAAAAKP/
+ //8PqwgAAAMAAAAP6f///8n///8kAAAAD6wIAAADAAAAD+H////B////3////w+tCAAAAwAAAA/7////
+ 2////6T///8PrggAAAMAAAAPeQAAAFkAAAA+AAAAD68IAAADAAAAD3gAAABYAAAAIwAAAA+wCAAAAwAA
+ AA9jAAAAQwAAACYAAAAPsQgAAAMAAAAPdgAAAFYAAABAAAAAD7IIAAADAAAAD2IAAABCAAAAewAAAA+z
+ CAAAAwAAAA9uAAAATgAAAH0AAAAPtAgAAAIAAAAPbQAAAE0AAAAPtQgAAAMAAAAPLAAAAD8AAAA7AAAA
+ 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
+ TgAAAA8WCQAAAgAAAA9tAAAATQAAAA8XCQAAAgAAAA8sAAAAOwAAAA8YCQAAAgAAAA8uAAAAOgAAAA8Z
+ CQAAAgAAAA8tAAAAXwAAAA8aCQAAAgAAAA88AAAAPgAAAA8bCQAAAAAAAA8PHAkAAAIAAAAPYAAAAH4A
+ AAAPHQkAAAIAAAAPMQAAACEAAAAPHgkAAAIAAAAPMgAAACIAAAAPHwkAAAIAAAAPMwAAACMAAAAPIAkA
+ AAIAAAAPNAAAACQAAAAPIQkAAAIAAAAPNQAAACUAAAAPIgkAAAIAAAAPNgAAACYAAAAPIwkAAAIAAAAP
+ NwAAAC8AAAAPJAkAAAIAAAAPOAAAACgAAAAPJQkAAAIAAAAPOQAAACkAAAAPJgkAAAIAAAAPMAAAAD0A
+ AAAPJwkAAAIAAAAPJwAAAD8AAAAPKAkAAAIAAAAPKwAAACoAAAAPKQkAAAIAAAAPqf///7n///8PKgkA
+ AAIAAAAPqv///7r///8PKwkAAAIAAAAPxf///+X///8PLAkAAAIAAAAP0v////L///8PLQkAAAIAAAAP
+ 1P////T///8PLgkAAAIAAAAP2v////r///8PLwkAAAIAAAAP1f////X///8PMAkAAAIAAAAPyf///+n/
+ //8PMQkAAAIAAAAPz////+////8PMgkAAAIAAAAP0P////D///8PMwkAAAIAAAAP2/////v///8PNAkA
+ AAIAAAAPWwAAAF0AAAAPNQkAAAIAAAAPwf///+H///8PNgkAAAIAAAAP0/////P///8PNwkAAAIAAAAP
+ xP///+T///8POAkAAAIAAAAPxv///+b///8POQkAAAIAAAAPx////+f///8POgkAAAIAAAAPyP///+j/
+ //8POwkAAAIAAAAPqP///7j///8PPAkAAAIAAAAPy////+v///8PPQkAAAIAAAAPzP///+z///8PPgkA
+ AAIAAAAP3v////7///8PPwkAAAIAAAAPq////7v///8PQAkAAAIAAAAPLQAAAF8AAAAPQQkAAAIAAAAP
+ of///7H///8PQgkAAAIAAAAPr////7////8PQwkAAAIAAAAPw////+P///8PRAkAAAIAAAAP1/////f/
+ //8PRQkAAAIAAAAPwv///+L///8PRgkAAAIAAAAPzv///+7///8PRwkAAAIAAAAPzf///+3///8PSAkA
+ AAIAAAAPLAAAADsAAAAPSQkAAAIAAAAPLgAAADoAAAAPSgkAAAIAAAAP1v////b///8PSwkAAAIAAAAP
+ PAAAAD4AAAAPTAkAAAAAAAAPD00JAAACAAAAD2AAAAB+AAAAD04JAAACAAAADzEAAAAhAAAAD08JAAAE
+ AAAADzIAAABAAAAAMgAAACIAAAAPUAkAAAIAAAAPMwAAACMAAAAPUQkAAAIAAAAPNAAAACQAAAAPUgkA
+ AAIAAAAPNQAAACUAAAAPUwkAAAQAAAAPNgAAAF4AAAA2AAAAJgAAAA9UCQAABAAAAA83AAAAJgAAADcA
+ AAAvAAAAD1UJAAAEAAAADzgAAAAqAAAAOAAAACgAAAAPVgkAAAQAAAAPOQAAACgAAAA5AAAAKQAAAA9X
+ CQAABAAAAA8wAAAAKQAAADAAAAA9AAAAD1gJAAAEAAAADy0AAABfAAAAJwAAAD8AAAAPWQkAAAQAAAAP
+ PQAAACsAAAArAAAAKgAAAA9aCQAABAAAAA9xAAAAUQAAAKn///+5////D1sJAAAEAAAAD3cAAABXAAAA
+ qv///7r///8PXAkAAAQAAAAPZQAAAEUAAADF////5f///w9dCQAABAAAAA9yAAAAUgAAANL////y////
+ D14JAAAEAAAAD3QAAABUAAAA1P////T///8PXwkAAAQAAAAPeQAAAFkAAADa////+v///w9gCQAABAAA
+ AA91AAAAVQAAANX////1////D2EJAAAEAAAAD2kAAABJAAAAyf///+n///8PYgkAAAQAAAAPbwAAAE8A
+ AADP////7////w9jCQAABAAAAA9wAAAAUAAAAND////w////D2QJAAAEAAAAD1sAAAB7AAAA2/////v/
+ //8PZQkAAAQAAAAPXQAAAH0AAABbAAAAXQAAAA9mCQAABAAAAA9hAAAAQQAAAMH////h////D2cJAAAE
+ AAAAD3MAAABTAAAA0/////P///8PaAkAAAQAAAAPZAAAAEQAAADE////5P///w9pCQAABAAAAA9mAAAA
+ RgAAAMb////m////D2oJAAAEAAAAD2cAAABHAAAAx////+f///8PawkAAAQAAAAPaAAAAEgAAADI////
+ 6P///w9sCQAABAAAAA9qAAAASgAAAKj///+4////D20JAAAEAAAAD2sAAABLAAAAy////+v///8PbgkA
+ AAQAAAAPbAAAAEwAAADM////7P///w9vCQAABAAAAA87AAAAOgAAAN7////+////D3AJAAAEAAAADycA
+ AAAiAAAAq////7v///8PcQkAAAQAAAAPXAAAAHwAAAAtAAAAXwAAAA9yCQAABAAAAA96AAAAWgAAAKH/
+ //+x////D3MJAAAEAAAAD3gAAABYAAAAr////7////8PdAkAAAQAAAAPYwAAAEMAAADD////4////w91
+ CQAABAAAAA92AAAAVgAAANf////3////D3YJAAAEAAAAD2IAAABCAAAAwv///+L///8PdwkAAAQAAAAP
+ bgAAAE4AAADO////7v///w94CQAABAAAAA9tAAAATQAAAM3////t////D3kJAAAEAAAADywAAAA8AAAA
+ LAAAADsAAAAPegkAAAQAAAAPLgAAAD4AAAAuAAAAOgAAAA97CQAABAAAAA8vAAAAPwAAANb////2////
+ D3wJAAACAAAADzwAAAA+AAAAD30JAAAAAAAADw9+CQAAAgAAAA+4////qP///w9/CQAAAgAAAA8xAAAA
+ IQAAAA+ACQAAAgAAAA8yAAAAIgAAAA+BCQAAAgAAAA8zAAAAIwAAAA+CCQAAAgAAAA80AAAAJAAAAA+D
+ CQAAAgAAAA81AAAAJQAAAA+ECQAAAgAAAA82AAAAJgAAAA+FCQAAAgAAAA83AAAALwAAAA+GCQAAAgAA
+ AA84AAAAKAAAAA+HCQAAAgAAAA85AAAAKQAAAA+ICQAAAgAAAA8wAAAAPQAAAA+JCQAAAgAAAA8nAAAA
+ PwAAAA+KCQAAAgAAAA8rAAAAKgAAAA+LCQAAAgAAAA9xAAAAUQAAAA+MCQAAAgAAAA93AAAAVwAAAA+N
+ CQAAAgAAAA9lAAAARQAAAA+OCQAAAgAAAA9yAAAAUgAAAA+PCQAAAgAAAA90AAAAVAAAAA+QCQAAAgAA
+ AA96AAAAWgAAAA+RCQAAAgAAAA91AAAAVQAAAA+SCQAAAgAAAA9pAAAASQAAAA+TCQAAAgAAAA9vAAAA
+ TwAAAA+UCQAAAgAAAA9wAAAAUAAAAA+VCQAAAgAAAA+5////qf///w+WCQAAAgAAAA/w////0P///w+X
+ CQAAAgAAAA9hAAAAQQAAAA+YCQAAAgAAAA9zAAAAUwAAAA+ZCQAAAgAAAA9kAAAARAAAAA+aCQAAAgAA
+ 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
+ AAAP/QkAAAIAAAAPZwAAAEcAAAAP/gkAAAIAAAAPaAAAAEgAAAAP/wkAAAIAAAAPagAAAEoAAAAPAAoA
+ AAIAAAAPawAAAEsAAAAPAQoAAAIAAAAPbAAAAEwAAAAPAgoAAAIAAAAPOwAAACsAAAAPAwoAAAIAAAAP
+ OgAAACoAAAAPBAoAAAIAAAAPXQAAAH0AAAAPBQoAAAIAAAAPegAAAFoAAAAPBgoAAAIAAAAPeAAAAFgA
+ AAAPBwoAAAIAAAAPYwAAAEMAAAAPCAoAAAIAAAAPdgAAAFYAAAAPCQoAAAIAAAAPYgAAAEIAAAAPCgoA
+ AAIAAAAPbgAAAE4AAAAPCwoAAAIAAAAPbQAAAE0AAAAPDAoAAAIAAAAPLAAAADwAAAAPDQoAAAIAAAAP
+ LgAAAD4AAAAPDgoAAAIAAAAPLwAAAD8AAAAPDwoAAAIAAAAPXAAAAF8AAAAPEAoAAAAAAAAPDxEKAAAC
+ AAAADzEAAAAhAAAADxIKAAACAAAADzIAAAAiAAAADxMKAAACAAAADzMAAAAjAAAADxQKAAACAAAADzQA
+ AAAkAAAADxUKAAACAAAADzUAAAAlAAAADxYKAAACAAAADzYAAAAmAAAADxcKAAACAAAADzcAAAAnAAAA
+ DxgKAAACAAAADzgAAAAoAAAADxkKAAACAAAADzkAAAApAAAADxoKAAABAAAADzAAAAAPGwoAAAIAAAAP
+ LQAAAD0AAAAPHAoAAAIAAAAPXgAAAGAAAAAPHQoAAAIAAAAPXAAAAHwAAAAPHgoAAAIAAAAPcQAAAFEA
+ AAAPHwoAAAIAAAAPdwAAAFcAAAAPIAoAAAIAAAAPZQAAAEUAAAAPIQoAAAIAAAAPcgAAAFIAAAAPIgoA
+ AAIAAAAPdAAAAFQAAAAPIwoAAAIAAAAPeQAAAFkAAAAPJAoAAAIAAAAPdQAAAFUAAAAPJQoAAAIAAAAP
+ aQAAAEkAAAAPJgoAAAIAAAAPbwAAAE8AAAAPJwoAAAIAAAAPcAAAAFAAAAAPKAoAAAIAAAAPQAAAAH4A
+ AAAPKQoAAAIAAAAPWwAAAHsAAAAPKgoAAAIAAAAPYQAAAEEAAAAPKwoAAAIAAAAPcwAAAFMAAAAPLAoA
+ AAIAAAAPZAAAAEQAAAAPLQoAAAIAAAAPZgAAAEYAAAAPLgoAAAIAAAAPZwAAAEcAAAAPLwoAAAIAAAAP
+ aAAAAEgAAAAPMAoAAAIAAAAPagAAAEoAAAAPMQoAAAIAAAAPawAAAEsAAAAPMgoAAAIAAAAPbAAAAEwA
+ AAAPMwoAAAIAAAAPOwAAACsAAAAPNAoAAAIAAAAPOgAAACoAAAAPNQoAAAIAAAAPXQAAAH0AAAAPNgoA
+ AAIAAAAPegAAAFoAAAAPNwoAAAIAAAAPeAAAAFgAAAAPOAoAAAIAAAAPYwAAAEMAAAAPOQoAAAIAAAAP
+ dgAAAFYAAAAPOgoAAAIAAAAPYgAAAEIAAAAPOwoAAAIAAAAPbgAAAE4AAAAPPAoAAAIAAAAPbQAAAE0A
+ AAAPPQoAAAIAAAAPLAAAADwAAAAPPgoAAAIAAAAPLgAAAD4AAAAPPwoAAAIAAAAPLwAAAD8AAAAPQAoA
+ AAIAAAAPXAAAAF8AAAAPQQoAAAAAAAAPD0IKAAACAAAADzsAAAAwAAAAD0MKAAACAAAADysAAAAxAAAA
+ D0QKAAACAAAAD7X///8yAAAAD0UKAAACAAAAD7n///8zAAAAD0YKAAACAAAAD+j///80AAAAD0cKAAAC
+ AAAAD7v///81AAAAD0gKAAACAAAAD77///82AAAAD0kKAAACAAAAD/3///83AAAAD0oKAAACAAAAD+H/
+ //84AAAAD0sKAAACAAAAD+3///85AAAAD0wKAAACAAAAD+n///8wAAAAD00KAAACAAAADz0AAAAlAAAA
+ D04KAAACAAAADycAAAB2AAAAD08KAAACAAAAD3EAAABRAAAAD1AKAAACAAAAD3cAAABXAAAAD1EKAAAC
+ AAAAD2UAAABFAAAAD1IKAAACAAAAD3IAAABSAAAAD1MKAAACAAAAD3QAAABUAAAAD1QKAAACAAAAD3kA
+ AABZAAAAD1UKAAACAAAAD3UAAABVAAAAD1YKAAACAAAAD2kAAABJAAAAD1cKAAACAAAAD28AAABPAAAA
+ D1gKAAACAAAAD3AAAABQAAAAD1kKAAACAAAAD/r///8vAAAAD1oKAAACAAAAD+T///8oAAAAD1sKAAAC
+ AAAAD2EAAABBAAAAD1wKAAACAAAAD3MAAABTAAAAD10KAAACAAAAD2QAAABEAAAAD14KAAACAAAAD2YA
+ AABGAAAAD18KAAACAAAAD2cAAABHAAAAD2AKAAACAAAAD2gAAABIAAAAD2EKAAACAAAAD2oAAABKAAAA
+ D2IKAAACAAAAD2sAAABLAAAAD2MKAAACAAAAD2wAAABMAAAAD2QKAAACAAAAD/T///8iAAAAD2UKAAAC
+ AAAAD6f///8hAAAAD2YKAAACAAAAD/L///8pAAAAD2cKAAACAAAAD3oAAABaAAAAD2gKAAACAAAAD3gA
+ AABYAAAAD2kKAAACAAAAD2MAAABDAAAAD2oKAAACAAAAD3YAAABWAAAAD2sKAAACAAAAD2IAAABCAAAA
+ D2wKAAACAAAAD24AAABOAAAAD20KAAACAAAAD20AAABNAAAAD24KAAACAAAADywAAAA/AAAAD28KAAAC
+ AAAADy4AAAA6AAAAD3AKAAACAAAADy0AAABfAAAAD3EKAAACAAAADzwAAAA+AAAAD3IKAAAAAAAADw9z
+ CgAAAgAAAA9gAAAAfgAAAA90CgAAAgAAAA8xAAAAIQAAAA91CgAAAgAAAA8yAAAAQAAAAA92CgAAAgAA
+ AA8zAAAAIwAAAA93CgAAAgAAAA80AAAAJAAAAA94CgAAAgAAAA81AAAAJQAAAA95CgAAAgAAAA82AAAA
+ XgAAAA96CgAAAgAAAA83AAAAJgAAAA97CgAAAgAAAA84AAAAKgAAAA98CgAAAgAAAA85AAAAKAAAAA99
+ CgAAAgAAAA8wAAAAKQAAAA9+CgAAAgAAAA8tAAAAXwAAAA9/CgAAAgAAAA89AAAAKwAAAA+ACgAABAAA
+ AA9xAAAAUQAAAOT////E////D4EKAAAEAAAAD3cAAABXAAAA7P///8z///8PggoAAAQAAAAPZQAAAEUA
+ AADp////yf///w+DCgAABAAAAA9yAAAAUgAAAPj////Y////D4QKAAAEAAAAD3QAAABUAAAAu////6v/
+ //8PhQoAAAQAAAAPeQAAAFkAAAD9////3f///w+GCgAABAAAAA91AAAAVQAAAPn////Z////D4cKAAAE
+ AAAAD2kAAABJAAAA7f///83///8PiAoAAAQAAAAPbwAAAE8AAADz////0////w+JCgAABAAAAA9wAAAA
+ UAAAAPb////W////D4oKAAACAAAAD1sAAAB7AAAAD4sKAAACAAAAD10AAAB9AAAAD4wKAAAEAAAAD2EA
+ AABBAAAA4f///8H///8PjQoAAAQAAAAPcwAAAFMAAAC5////qf///w+OCgAABAAAAA9kAAAARAAAAO//
+ ///P////D48KAAAEAAAAD2YAAABGAAAA6////8v///8PkAoAAAQAAAAPZwAAAEcAAADg////wP///w+R
+ CgAABAAAAA9oAAAASAAAAPr////a////D5IKAAAEAAAAD2oAAABKAAAA/P///9z///8PkwoAAAQAAAAP
+ awAAAEsAAAD0////1P///w+UCgAABAAAAA9sAAAATAAAALX///+l////D5UKAAACAAAADzsAAAA6AAAA
+ D5YKAAACAAAADycAAAAiAAAAD5cKAAACAAAAD1wAAAB8AAAAD5gKAAAEAAAAD3oAAABaAAAAvv///67/
+ //8PmQoAAAMAAAAPeAAAAFgAAACk////D5oKAAAEAAAAD2MAAABDAAAA6P///8j///8PmwoAAAQAAAAP
+ dgAAAFYAAADn////x////w+cCgAAAgAAAA9iAAAAQgAAAA+dCgAABAAAAA9uAAAATgAAAPL////S////
+ D54KAAAEAAAAD20AAABNAAAA5f///8X///8PnwoAAAIAAAAPLAAAADwAAAAPoAoAAAIAAAAPLgAAAD4A
+ AAAPoQoAAAIAAAAPLwAAAD8AAAAPogoAAAIAAAAPPAAAAD4AAAAPowoAAAAAAAAPD6QKAAABAAAADzsA
+ AAAPpQoAAAIAAAAPKwAAADEAAAAPpgoAAAIAAAAP7P///zIAAAAPpwoAAAIAAAAPuf///zMAAAAPqAoA
+ AAIAAAAP6P///zQAAAAPqQoAAAIAAAAP+P///zUAAAAPqgoAAAIAAAAPvv///zYAAAAPqwoAAAIAAAAP
+ /f///zcAAAAPrAoAAAIAAAAP4f///zgAAAAPrQoAAAIAAAAP7f///zkAAAAPrgoAAAQAAAAP6f///zAA
+ AAC9////KQAAAA+vCgAAAgAAAA89AAAAJQAAAA+wCgAAAAAAAA8PsQoAAAMAAAAPcQAAAFEAAABcAAAA
+ D7IKAAADAAAAD3cAAABXAAAAfAAAAA+zCgAAAgAAAA9lAAAARQAAAA+0CgAAAgAAAA9yAAAAUgAAAA+1
+ CgAAAgAAAA90AAAAVAAAAA+2CgAAAgAAAA95AAAAWQAAAA+3CgAAAgAAAA91AAAAVQAAAA+4CgAAAgAA
+ AA9pAAAASQAAAA+5CgAAAgAAAA9vAAAATwAAAA+6CgAAAgAAAA9wAAAAUAAAAA+7CgAABAAAAA/6////
+ LwAAAFsAAAB7AAAAD7wKAAAEAAAADykAAAAoAAAAXQAAAH0AAAAPvQoAAAIAAAAPYQAAAEEAAAAPvgoA
+ AAMAAAAPcwAAAFMAAADw////D78KAAADAAAAD2QAAABEAAAA0P///w/ACgAAAwAAAA9mAAAARgAAAFsA
+ AAAPwQoAAAMAAAAPZwAAAEcAAABdAAAAD8IKAAACAAAAD2gAAABIAAAAD8MKAAACAAAAD2oAAABKAAAA
+ D8QKAAADAAAAD2sAAABLAAAAs////w/FCgAAAwAAAA9sAAAATAAAAKP///8PxgoAAAMAAAAP+f///yIA
+ AAAkAAAAD8cKAAADAAAAD6f///8hAAAA3////w/ICgAAAgAAAA+o////JwAAAA/JCgAAAwAAAA96AAAA
+ WgAAAD4AAAAPygoAAAMAAAAPeAAAAFgAAAAjAAAAD8sKAAADAAAAD2MAAABDAAAAJgAAAA/MCgAAAwAA
+ AA92AAAAVgAAAEAAAAAPzQoAAAMAAAAPYgAAAEIAAAB7AAAAD84KAAADAAAAD24AAABOAAAAfQAAAA/P
+ CgAAAgAAAA9tAAAATQAAAA/QCgAAAwAAAA8sAAAAPwAAADwAAAAP0QoAAAMAAAAPLgAAADoAAAA+AAAA
+ D9IKAAADAAAADy0AAABfAAAAKgAAAA/TCgAABAAAAA88AAAAPgAAAFwAAAB8AAAAD9QKAAAAAAAADw/V
+ CgAAAQAAAA87AAAAD9YKAAACAAAADysAAAAxAAAAD9cKAAACAAAAD+z///8yAAAAD9gKAAACAAAAD7n/
+ //8zAAAAD9kKAAACAAAAD+j///80AAAAD9oKAAACAAAAD/j///81AAAAD9sKAAACAAAAD77///82AAAA
+ D9wKAAACAAAAD/3///83AAAAD90KAAACAAAAD+H///84AAAAD94KAAACAAAAD+3///85AAAAD98KAAAC
+ AAAAD+n///8wAAAAD+AKAAACAAAADz0AAAAlAAAAD+EKAAACAAAAD7T///+3////D+IKAAACAAAAD3EA
+ AABRAAAAD+MKAAACAAAAD3cAAABXAAAAD+QKAAACAAAAD2UAAABFAAAAD+UKAAACAAAAD3IAAABSAAAA
+ D+YKAAACAAAAD3QAAABUAAAAD+cKAAACAAAAD3oAAABaAAAAD+gKAAACAAAAD3UAAABVAAAAD+kKAAAC
+ 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
+ AA9yAAAAUgAAAPH////R////DwENAAAEAAAAD3QAAABUAAAA9P///9T///8PAg0AAAQAAAAPeQAAAFkA
+ AAD1////1f///w8DDQAABAAAAA91AAAAVQAAAOj////I////DwQNAAAEAAAAD2kAAABJAAAA6f///8n/
+ //8PBQ0AAAQAAAAPbwAAAE8AAADv////z////w8GDQAABAAAAA9wAAAAUAAAAPD////Q////DwcNAAAC
+ AAAAD1sAAAB7AAAADwgNAAACAAAAD10AAAB9AAAADwkNAAAEAAAAD2EAAABBAAAA4f///8H///8PCg0A
+ AAIAAAAPcwAAAFMAAAAPCw0AAAQAAAAPZAAAAEQAAADk////xP///w8MDQAABAAAAA9mAAAARgAAAPb/
+ ///W////Dw0NAAAEAAAAD2cAAABHAAAA4////8P///8PDg0AAAQAAAAPaAAAAEgAAADn////x////w8P
+ DQAABAAAAA9qAAAASgAAAO7////O////DxANAAAEAAAAD2sAAABLAAAA6v///8r///8PEQ0AAAQAAAAP
+ bAAAAEwAAADr////y////w8SDQAABAAAAA87AAAAOgAAALT///+o////DxMNAAACAAAADycAAAAiAAAA
+ DxQNAAACAAAAD1wAAAB8AAAADxUNAAAEAAAAD3oAAABaAAAA5v///8b///8PFg0AAAQAAAAPeAAAAFgA
+ AAD3////1////w8XDQAABAAAAA9jAAAAQwAAAPj////Y////DxgNAAAEAAAAD3YAAABWAAAA+f///9n/
+ //8PGQ0AAAQAAAAPYgAAAEIAAADi////wv///w8aDQAABAAAAA9uAAAATgAAAO3////N////DxsNAAAE
+ AAAAD20AAABNAAAA7P///8z///8PHA0AAAIAAAAPLAAAADwAAAAPHQ0AAAIAAAAPLgAAAD4AAAAPHg0A
+ AAIAAAAPLwAAAD8AAAAPHw0AAAIAAAAPPAAAAD4AAAAPIA0AAAAAAAAPDyENAAAEAAAAD2AAAAB+AAAA
+ XwAAACUAAAAPIg0AAAQAAAAPMQAAACEAAADl////KwAAAA8jDQAABAAAAA8yAAAAQAAAAC8AAADx////
+ DyQNAAAEAAAADzMAAAAjAAAALQAAAPL///8PJQ0AAAQAAAAPNAAAACQAAADA////8////w8mDQAABAAA
+ AA81AAAAJQAAALb////0////DycNAAAEAAAADzYAAABeAAAA2P///9n///8PKA0AAAQAAAAPNwAAACYA
+ AADW////3////w8pDQAABAAAAA84AAAAKgAAAKT////1////DyoNAAAEAAAADzkAAAAoAAAAtf////b/
+ //8PKw0AAAQAAAAPMAAAACkAAACo////9////w8sDQAABAAAAA8tAAAAXwAAAKL////4////Dy0NAAAE
+ AAAADz0AAAArAAAAqv////n///8PLg0AAAQAAAAPcQAAAFEAAADm////8P///w8vDQAABAAAAA93AAAA
+ VwAAAOT///8iAAAADzANAAAEAAAAD2UAAABFAAAA0////67///8PMQ0AAAQAAAAPcgAAAFIAAAC+////
+ sf///w8yDQAABAAAAA90AAAAVAAAAND///+4////DzMNAAAEAAAAD3kAAABZAAAA0f///+3///8PNA0A
+ AAQAAAAPdQAAAFUAAADV////6v///w81DQAABAAAAA9pAAAASQAAAMP///+z////DzYNAAAEAAAAD28A
+ AABPAAAAuf///8////8PNw0AAAQAAAAPcAAAAFAAAADC////rf///w84DQAABAAAAA9bAAAAewAAALr/
+ //+w////DzkNAAAEAAAAD10AAAB9AAAAxf///ywAAAAPOg0AAAQAAAAPYQAAAEEAAAC/////xP///w87
+ DQAABAAAAA9zAAAAUwAAAMv///+m////DzwNAAAEAAAAD2QAAABEAAAAof///6////8PPQ0AAAQAAAAP
+ ZgAAAEYAAAC0////4v///w8+DQAABAAAAA9nAAAARwAAAOD///+s////Dz8NAAAEAAAAD2gAAABIAAAA
+ 6f///+f///8PQA0AAAQAAAAPagAAAEoAAADo////6////w9BDQAABAAAAA9rAAAASwAAANL////J////
+ D0INAAAEAAAAD2wAAABMAAAAyv///8j///8PQw0AAAQAAAAPOwAAADoAAADH////q////w9EDQAABAAA
+ AA8nAAAAIgAAAKf///8uAAAAD0UNAAAEAAAAD1wAAAB8AAAAo////6X///8PRg0AAAQAAAAPegAAAFoA
+ AAC8////KAAAAA9HDQAABAAAAA94AAAAWAAAALv///8pAAAAD0gNAAAEAAAAD2MAAABDAAAA4f///6n/
+ //8PSQ0AAAQAAAAPdgAAAFYAAADN////zv///w9KDQAAAwAAAA9iAAAAQgAAANr///8PSw0AAAQAAAAP
+ bgAAAE4AAADX////7P///w9MDQAABAAAAA9tAAAATQAAALf///8/AAAAD00NAAAEAAAADywAAAA8AAAA
+ wf///7L///8PTg0AAAQAAAAPLgAAAD4AAADj////zP///w9PDQAABAAAAA8vAAAAPwAAAL3////G////
+ D1ANAAAAAAAADw9RDQAAAAAAAA8PUg0AAAIAAAAPQAAAAKf///8PUw0AAAIAAAAPMQAAACEAAAAPVA0A
+ AAIAAAAPMgAAACIAAAAPVQ0AAAIAAAAPMwAAACMAAAAPVg0AAAIAAAAPNAAAACQAAAAPVw0AAAIAAAAP
+ NQAAACUAAAAPWA0AAAIAAAAPNgAAACYAAAAPWQ0AAAIAAAAPNwAAAF8AAAAPWg0AAAIAAAAPOAAAACgA
+ AAAPWw0AAAIAAAAPOQAAACkAAAAPXA0AAAIAAAAPMAAAACcAAAAPXQ0AAAIAAAAPLwAAAD8AAAAPXg0A
+ AAIAAAAPsP///34AAAAPXw0AAAIAAAAPcQAAAFEAAAAPYA0AAAIAAAAPdwAAAFcAAAAPYQ0AAAIAAAAP
+ ZQAAAEUAAAAPYg0AAAIAAAAPcgAAAFIAAAAPYw0AAAIAAAAPdAAAAFQAAAAPZA0AAAIAAAAPeQAAAFkA
+ AAAPZQ0AAAIAAAAPdQAAAFUAAAAPZg0AAAIAAAAPaQAAAEkAAAAPZw0AAAIAAAAPbwAAAE8AAAAPaA0A
+ AAIAAAAPcAAAAFAAAAAPaQ0AAAIAAAAPqP///34AAAAPag0AAAIAAAAPKgAAAHwAAAAPaw0AAAIAAAAP
+ YQAAAEEAAAAPbA0AAAIAAAAPcwAAAFMAAAAPbQ0AAAIAAAAPZAAAAEQAAAAPbg0AAAIAAAAPZgAAAEYA
+ AAAPbw0AAAIAAAAPZwAAAEcAAAAPcA0AAAIAAAAPaAAAAEgAAAAPcQ0AAAIAAAAPagAAAEoAAAAPcg0A
+ AAIAAAAPawAAAEsAAAAPcw0AAAIAAAAPbAAAAEwAAAAPdA0AAAIAAAAPKwAAALH///8PdQ0AAAIAAAAP
+ JwAAAGAAAAAPdg0AAAIAAAAPPAAAAD4AAAAPdw0AAAIAAAAPegAAAFoAAAAPeA0AAAIAAAAPeAAAAFgA
+ AAAPeQ0AAAIAAAAPYwAAAEMAAAAPeg0AAAIAAAAPdgAAAFYAAAAPew0AAAIAAAAPYgAAAEIAAAAPfA0A
+ AAIAAAAPbgAAAE4AAAAPfQ0AAAIAAAAPbQAAAE0AAAAPfg0AAAIAAAAPLAAAADsAAAAPfw0AAAIAAAAP
+ LgAAADoAAAAPgA0AAAIAAAAPLQAAAD0AAAAPgQ0AAAIAAAAPWwAAAF0AAAAPgg0AAAAAAAAPCw==
+</value>
+ </data>
+ <data name="scan_table" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>
+ AAEAAAD/////AQAAAAAAAAAHAQAAAAEBAAAABQAAAAcHCQIAAAAJAwAAAAkEAAAACQUAAAAJBgAAAA8C
+ AAAAMAAAAAcpAAIAAwAEAAUABgAHAAgACQAKAAsADAANABAAEQASABMAFAAVABYAFwAYABkAGgAbAB4A
+ HwAgACEAIgAjACQAJQAmACcAKAArACwALQAuAC8AMAAxADIAMwA0ADUAVgAPAwAAADAAAAAHKQACAAMA
+ BAAFAAYABwAIAAkACgALABoAGwAoADMANAAZABUAIQAiAC4AEwAmADUADQAeABgAEgAWABcAIAAjABQA
+ MQAfAAwAKwAnABAAJAAlAC0AMAAyABEALwAsAFYADwQAAAAyAAAABykAAgADAAQABQAGAAcACAAJAAoA
+ CwAMAA0AEAARABIAEwAUABUAFgAXABgAGQAaABsAHgAfACAAIQAiACMAJAAlACYAJwAoACsAXgAsAC0A
+ LgAvADAAMQAyADMANAA1AFYANQAPBQAAADAAAAAHAgADAAQABQAGAAcACAAJAAoACwAMAA0AKQAQABEA
+ EgATABQAFQAWABcAGAAZABoAGwAeAB8AIAAhACIAIwAkACUAJgAnACgAKwAsAC0ALgAvADAAMQAyADMA
+ NAA1AFYADwYAAAAwAAAABwIAAwAEAAUABgAHAAgACQAKAAsADAANABoAGwAnACgAKQAzADQANQArAB4A
+ MAAuACAAEgAhACIAIwAXACQAJQAmADIAMQAYABkAEAATAB8AFAAWAC8AEQAtABUALABWAAs=
+</value>
+ </data>
+ <data name="vkey_table" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>
+ 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
+ Cw==
+</value>
+ </data>
+</root>
\ No newline at end of file
e = new ConditionFactorExpression (token);
} else if (token.Type == TokenType.Item || token.Type == TokenType.Property
|| token.Type == TokenType.Metadata) {
- e = ParseReferenceExpression (token.Value);
+ e = ParseReferenceExpression (token.Value [0]);
} else if (token.Type == TokenType.Not) {
e = ParseNotExpression ();
} else
}
//@prefix: @ or $
- ConditionExpression ParseReferenceExpression (string prefix)
+ ConditionExpression ParseReferenceExpression (char prefix)
{
- StringBuilder sb = new StringBuilder ();
-
- string ref_type = prefix [0] == '$' ? "a property" : "an item list";
int token_pos = tokenizer.Token.Position;
+ string ref_type = prefix == '$' ? "a property" : "an item list";
IsAtToken (TokenType.LeftParen, String.Format (
"Expected {0} at position {1} in condition \"{2}\". Missing opening parantheses after the '{3}'.",
ref_type, token_pos, conditionStr, prefix));
- tokenizer.GetNextToken ();
+
+ if (prefix == '$') {
+ //
+ // Tjhe scan should consider quoted parenthesis but it breaks on .net as well
+ // we are bug compatible
+ //
+ tokenizer.ScanForClosingParens ();
+ } else {
+ tokenizer.GetNextToken ();
+ }
+
+ if (tokenizer.IsEOF ())
+ throw new ExpressionParseException ("Missing closing parenthesis in condition " + conditionStr);
+
+ StringBuilder sb = new StringBuilder ();
sb.AppendFormat ("{0}({1}", prefix, tokenizer.Token.Value);
tokenizer.GetNextToken ();
- if (prefix == "@" && tokenizer.Token.Type == TokenType.Transform) {
+ if (prefix == '@' && tokenizer.Token.Type == TokenType.Transform) {
tokenizer.GetNextToken ();
sb.AppendFormat ("->'{0}'", tokenizer.Token.Value);
}
}
- IsAtToken (TokenType.RightParen, String.Format (
- "Expected {0} at position {1} in condition \"{2}\". Missing closing parantheses'.",
- ref_type, token_pos, conditionStr, prefix));
+ IsAtToken (TokenType.RightParen, "Missing closing parenthesis in condition " + conditionStr);
tokenizer.GetNextToken ();
sb.Append (")");
} else
throw new ExpressionParseException (String.Format ("Invalid token: {0}", ch));
}
+
+ public void ScanForClosingParens (int parensCounter = 1)
+ {
+ tokenPosition = position;
+ int start = position;
+ int ch;
+ while ((ch = ReadChar ()) >= 0) {
+ switch (ch) {
+ case ')':
+ if (--parensCounter == 0) {
+ --position;
+ token = new Token (inputString.Substring (start, position - start), TokenType.String, tokenPosition);
+ return;
+ }
+ break;
+ case '(':
+ ++parensCounter;
+ break;
+ }
+ }
+
+ token = new Token (null, TokenType.EOF, tokenPosition);
+ }
public int TokenPosition {
get { return tokenPosition; }
internal class Expression {
+ enum TokenKind
+ {
+ OpenParens,
+ CloseParens,
+ Dot,
+ End
+ }
+
ExpressionCollection expressionCollection;
static Regex item_regex;
pos += 2;
int start = pos;
int end = 0;
+ bool requires_closing_parens = true;
var ch = text [pos];
if ((ch == 'r' || ch == 'R') && text.Substring (pos + 1).StartsWith ("egistry:", StringComparison.OrdinalIgnoreCase)) {
// Simple property reference $(Foo)
//
phase.Add (new PropertyReference (name));
+ requires_closing_parens = false;
} else {
end = 0;
}
pos = end;
}
+
+ if (requires_closing_parens) {
+ end = text.IndexOf (')', pos);
+ if (end < 0)
+ end = 0;
+ else
+ pos = end + 1;
+ }
}
end = text.IndexOf ("$(", pos, StringComparison.Ordinal);
static MemberInvocationReference ParseInvocation (string text, ref int p, Type type, IReference instance)
{
- var open_parens = text.IndexOf ('(', p);
- string name;
- int end;
- List<string> args;
+ TokenKind token;
+ MemberInvocationReference mir = null;
+
+ while (true) {
+ int prev = p;
+ token = ScanName (text, ref p);
+ var name = text.Substring (prev, p - prev).TrimEnd ();
+
+ switch (token) {
+ case TokenKind.Dot:
+ case TokenKind.OpenParens:
+ break;
+ case TokenKind.CloseParens:
+ return new MemberInvocationReference (type, name) {
+ Instance = instance
+ };
+
+ case TokenKind.End:
+ if (mir == null || name.Length != 0)
+ throw new InvalidProjectFileException (string.Format ("Invalid static method invocation syntax '{0}'", text.Substring (p)));
+
+ return mir;
+ default:
+ throw new NotImplementedException ();
+ }
- //
- // Is it method or property
- //
- if (open_parens > 0) {
- name = text.Substring (p, open_parens - p);
-
- //
- // It can be instance method on static property
- //
- if (name.IndexOf ('.') > 0) {
- var names = name.Split ('.');
- int i;
- for (i = 0; i < names.Length - 1; ++i) {
- instance = new MemberInvocationReference (type, names [i]) {
- Instance = instance
- };
- }
+ instance = mir = new MemberInvocationReference (type, name) {
+ Instance = instance
+ };
+
+ if (type != null) {
+ if (!IsMethodAllowed (type, name))
+ throw new InvalidProjectFileException (string.Format ("The function '{0}' on type '{1}' has not been enabled for execution", name, type.FullName));
type = null;
- name = names [i];
}
- ++open_parens;
- args = ParseArguments (text, ref open_parens);
- end = text.IndexOf (')', open_parens);
- } else {
- end = text.IndexOf (')', p);
- if (end < 0)
- throw new InvalidProjectFileException (string.Format ("Invalid static method invocation syntax '{0}'", text.Substring (p)));
- name = text.Substring (p, end - p);
- args = null;
+ if (token == TokenKind.OpenParens) {
+ ++p;
+ mir.Arguments = ParseArguments (text, ref p);
+ }
+
+ if (p < text.Length && text [p] == '.') {
+ ++p;
+ continue;
+ }
+
+ return mir;
}
+ }
- name = name.TrimEnd ();
- if (!IsMethodAllowed (type, name))
- throw new InvalidProjectFileException (string.Format ("The function '{0}' on type '{1}' has not been enabled for execution", name, type.FullName));
+ static TokenKind ScanName (string text, ref int p)
+ {
+ for (; p < text.Length; ++p) {
+ switch (text [p]) {
+ case '(':
+ return TokenKind.OpenParens;
+ case '.':
+ return TokenKind.Dot;
+ case ')':
+ return TokenKind.CloseParens;
+ }
+ }
- p = end + 1;
- return new MemberInvocationReference (type, name) {
- Arguments = args,
- Instance = instance
- };
+ return TokenKind.End;
}
ArrayList SplitMetadata (string text)
{
var flags = BindingFlags.IgnoreCase | BindingFlags.Public;
object target;
+ string member_name = name;
if (Instance == null) {
target = null;
- flags |= BindingFlags.Static;
+ if (string.Equals (member_name, "new", StringComparison.OrdinalIgnoreCase)) {
+ member_name = ConstructorInfo.ConstructorName;
+ flags |= BindingFlags.CreateInstance | BindingFlags.Instance;
+ } else {
+ flags |= BindingFlags.Static;
+ }
} else {
var mir = Instance as MemberInvocationReference;
if (mir != null) {
} else {
flags |= BindingFlags.InvokeMethod;
ExpandArguments (project, options);
- args = PrepareMethodArguments (flags);
+ args = PrepareMethodArguments (member_name, flags);
if (args == null)
throw new InvalidProjectFileException (string.Format ("Method '{0}({1})' arguments cannot be evaluated'", name, string.Join (", ", Arguments.ToArray ())));
}
object value;
try {
- value = type.InvokeMember (name, flags, null, target, args, CultureInfo.InvariantCulture);
+ value = type.InvokeMember (member_name, flags, null, target, args, CultureInfo.InvariantCulture);
} catch (MissingFieldException) {
//
// It can be field/constant instead of a property
if (args == null && Instance == null) {
flags &= ~BindingFlags.GetProperty;
flags |= BindingFlags.GetField;
- value = type.InvokeMember (name, flags, null, null, null, CultureInfo.InvariantCulture);
+ value = type.InvokeMember (member_name, flags, null, null, null, CultureInfo.InvariantCulture);
} else {
throw;
}
}
}
- object[] PrepareMethodArguments (BindingFlags flags)
+ object[] PrepareMethodArguments (string name, BindingFlags flags)
{
- var candidates = type.GetMember (name, MemberTypes.Method, flags);
+ var candidates = type.GetMember (name, MemberTypes.Method | MemberTypes.Constructor, flags);
object[] args = null;
ParameterInfo[] best = null;
foreach (MethodBase candidate in candidates) {
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Framework/Microsoft.Build.Framework-net_4_5.csproj">\r
<Project>{DA3B9FEE-8FBD-4587-B760-65420765256A}</Project>\r
- <Name>Microsoft.Build.Framework\Microsoft.Build.Framework-net_4_5</Name>\r
+ <Name>Microsoft.Build.Framework-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Utilities/Microsoft.Build.Utilities-net_4_5.csproj">\r
<Project>{6E1C7BDE-7B9E-47B0-A7B2-1561822FE922}</Project>\r
- <Name>Microsoft.Build.Utilities\Microsoft.Build.Utilities-net_4_5</Name>\r
+ <Name>Microsoft.Build.Utilities-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
Assert.IsNull (proj.EvaluatedProperties ["A"], "A1");
}
+ [Test]
+ public void TestCondition_References ()
+ {
+ Engine engine = new Engine (Consts.BinPath);
+ Project proj = engine.CreateNewProject ();
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A Condition=""$([System.String]::new('test').StartsWith(`te`))"">valid</A>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+
+ Assert.AreEqual ("valid", proj.GetEvaluatedProperty ("A"), "#1");
+ }
[Test]
public void TestHasTrailingSlash1 ()
Assert.AreEqual (DateTime.Now.ToString ("yyyy.MM.dd"), proj.GetEvaluatedProperty ("Prop1"), "#1");
}
+ [Test]
+ public void InstanceMemberOnStaticProperty ()
+ {
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <Prop1>$([System.DateTime]::Now.Year)</Prop1>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ Assert.AreEqual (DateTime.Now.Year.ToString (), proj.GetEvaluatedProperty ("Prop1"), "#1");
+ }
+
+ [Test]
+ public void InstanceMembersOnStaticMethod ()
+ {
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <Prop1>$([System.String]::Concat('a', 'bb', 'c').Length.GetHashCode ())</Prop1>
+
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ Assert.AreEqual (4.GetHashCode ().ToString (), proj.GetEvaluatedProperty ("Prop1"), "#1");
+ }
+
[Test]
public void MSBuildPropertyFunctions ()
{
proj.LoadXml (documentString);
Assert.AreEqual ("6.6", proj.GetEvaluatedProperty ("Prop1"), "#1");
- }
+ }
+
+ [Test]
+ public void Constructor ()
+ {
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <NumberOne>0.6</NumberOne>
+ <NumberTwo>6</NumberTwo>
+ <Prop1>$([System.String]::new('value').EndsWith ('ue'))</Prop1>
+ </PropertyGroup>
+ </Project>
+ ";
+
+ proj.LoadXml (documentString);
+ Assert.AreEqual ("True", proj.GetEvaluatedProperty ("Prop1"), "#1");
+ }
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Utilities/Microsoft.Build.Utilities-net_4_5.csproj">\r
<Project>{6E1C7BDE-7B9E-47B0-A7B2-1561822FE922}</Project>\r
- <Name>Microsoft.Build.Utilities\Microsoft.Build.Utilities-net_4_5</Name>\r
+ <Name>Microsoft.Build.Utilities-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Framework/Microsoft.Build.Framework-net_4_5.csproj">\r
<Project>{DA3B9FEE-8FBD-4587-B760-65420765256A}</Project>\r
- <Name>Microsoft.Build.Framework\Microsoft.Build.Framework-net_4_5</Name>\r
+ <Name>Microsoft.Build.Framework-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Engine/Microsoft.Build.Engine-net_4_5.csproj">\r
<Project>{54DFC5A7-7C1D-4BA5-A0F7-F0B312E1E076}</Project>\r
- <Name>Microsoft.Build.Engine\Microsoft.Build.Engine-net_4_5</Name>\r
+ <Name>Microsoft.Build.Engine-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.XBuild.Tasks/Mono.XBuild.Tasks-net_4_5.csproj">\r
<Project>{73FB1B7E-09F9-4E7F-A63A-C407A93BCA59}</Project>\r
- <Name>Mono.XBuild.Tasks\Mono.XBuild.Tasks-net_4_5</Name>\r
+ <Name>Mono.XBuild.Tasks-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
else
commandLine.AppendSwitch ("/delaysign-");
commandLine.AppendSwitchIfNotNull ("/description:", Description);
- if (EmbedResources != null)
- foreach (ITaskItem item in EmbedResources)
- commandLine.AppendSwitchIfNotNull ("/embed:", item.ItemSpec);
+ if (EmbedResources != null) {
+ foreach (ITaskItem item in EmbedResources) {
+ string logical_name = item.GetMetadata ("LogicalName");
+ if (!string.IsNullOrEmpty (logical_name))
+ commandLine.AppendSwitchIfNotNull ("/embed:", string.Format ("{0},{1}", item.ItemSpec, logical_name));
+ else
+ commandLine.AppendSwitchIfNotNull ("/embed:", item.ItemSpec);
+ }
+ }
commandLine.AppendSwitchIfNotNull ("/evidence:", EvidenceFile);
commandLine.AppendSwitchIfNotNull ("/fileversion:", FileVersion);
commandLine.AppendSwitchIfNotNull ("/flags:", Flags);
using System;
using System.Collections;
+using System.Collections.Generic;
using Microsoft.Build.BuildEngine;
using Microsoft.Build.Framework;
using Microsoft.Build.Tasks;
Assert.AreEqual ("/embed:a /embed:b", clbe.ToString (), "A1");
}
+ [Test]
+ public void TestEmbedResourcesWithLogicalName ()
+ {
+ ALExtended ale = new ALExtended ();
+ CommandLineBuilderExtension clbe = new CommandLineBuilderExtension ();
+ var dict = new Dictionary<string, string> ();
+ dict ["LogicalName"] = "value";
+
+ ale.EmbedResources = new ITaskItem [2] { new TaskItem ("a", dict), new TaskItem ("b", dict) };
+ ale.ARFC (clbe);
+
+ Assert.AreEqual ("/embed:a,value /embed:b,value", clbe.ToString (), "A1");
+ }
+
[Test]
public void TestEvidenceFile ()
{
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Framework/Microsoft.Build.Framework-net_4_5.csproj">\r
<Project>{DA3B9FEE-8FBD-4587-B760-65420765256A}</Project>\r
- <Name>Microsoft.Build.Framework\Microsoft.Build.Framework-net_4_5</Name>\r
+ <Name>Microsoft.Build.Framework-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
string targetFrameworkProfile)
{
var path = Path.Combine (xbuildFxDir, targetFrameworkIdentifier);
- if (targetFrameworkVersion != null) {
+ if (!string.IsNullOrEmpty (targetFrameworkVersion)) {
path = Path.Combine (path, targetFrameworkVersion);
- if (targetFrameworkProfile != null)
+ if (!string.IsNullOrEmpty (targetFrameworkProfile))
path = Path.Combine (path, "Profile", targetFrameworkProfile);
}
if (!Directory.Exists (path))
var flist = Path.Combine (path, "RedistList", "FrameworkList.xml");
if (!File.Exists (flist))
return null;
-
var xml = XmlReader.Create (flist);
xml.MoveToContent ();
var targetFxDir = xml.GetAttribute ("TargetFrameworkDirectory");
Microsoft.Build.Utilities/LoggerTest.cs
Microsoft.Build.Utilities/TaskItemTest.cs
Microsoft.Build.Utilities/TaskLoggingHelperTest.cs
+Microsoft.Build.Utilities/ToolLocationHelperTest.cs
Microsoft.Build.Utilities/ToolTaskTest.cs
--- /dev/null
+#if NET_4_0
+using System;
+using NUnit.Framework;
+using Microsoft.Build.Utilities;
+
+namespace MonoTests.Microsoft.Build.Utilities
+{
+ [TestFixture]
+ public class ToolLocationHelperTest
+ {
+ [Test]
+ [Category ("NotWorking")] // this test needs extra xbuild testing settings, as the target framework path is different.
+ public void GetPathToStandardLibraries ()
+ {
+ Assert.IsTrue (!string.IsNullOrEmpty (ToolLocationHelper.GetPathToStandardLibraries (".NETFramework", "v4.0", null)), "std path");
+ Assert.IsTrue (!string.IsNullOrEmpty (ToolLocationHelper.GetPathToStandardLibraries (".NETFramework", "v4.0", string.Empty)), "empty Profile path");
+ }
+ }
+}
+
+#endif
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Engine/Microsoft.Build.Engine-net_4_5.csproj">\r
<Project>{54DFC5A7-7C1D-4BA5-A0F7-F0B312E1E076}</Project>\r
- <Name>Microsoft.Build.Engine\Microsoft.Build.Engine-net_4_5</Name>\r
+ <Name>Microsoft.Build.Engine-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Build.Framework/Microsoft.Build.Framework-net_4_5.csproj">\r
<Project>{DA3B9FEE-8FBD-4587-B760-65420765256A}</Project>\r
- <Name>Microsoft.Build.Framework\Microsoft.Build.Framework-net_4_5</Name>\r
+ <Name>Microsoft.Build.Framework-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
var item = CreateItemGroupElement ();
AppendChild (item);
return item;
+ case "ImportGroup":
+ return AddImportGroup ();
case "Import":
return AddImport (null);
case "Target":
});
yield return create ("MSBuildToolsPath", () => toolset.ToolsPath);
yield return create ("MSBuildToolsVersion", () => toolset.ToolsVersion);
+
+ // This is an implementation specific special property for this Microsoft.Build.dll to differentiate
+ // the build from Microsoft.Build.Engine.dll. It is significantly used in some *.targets file we share
+ // between old and new build engine.
+ yield return create ("MonoUseMicrosoftBuildDll", () => "True");
}
// These are required for reserved property, represents dynamically changing property values.
// FIXME: this is kind of workaround for unavoidable issue that PLATFORM=* is actually given
// on some platforms and that prevents setting default "PLATFORM=AnyCPU" property.
if (!string.Equals ("PLATFORM", (string) p.Key, StringComparison.OrdinalIgnoreCase))
- this.properties [(string) p.Key] = new ProjectPropertyInstance ((string) p.Key, false, (string) p.Value);
+ this.properties [(string) p.Key] = new ProjectPropertyInstance ((string) p.Key, true, (string) p.Value);
foreach (var p in global_properties)
this.properties [p.Key] = new ProjectPropertyInstance (p.Key, false, p.Value);
var tools = projects.GetToolset (tools_version) ?? projects.GetToolset (projects.DefaultToolsVersion);
void EvaluateItems (ProjectRootElement xml, IEnumerable<ProjectElement> elements)
{
- foreach (var child in elements) {
+ foreach (var child in elements.Reverse ()) {
var ige = child as ProjectItemGroupElement;
if (ige != null) {
foreach (var p in ige.Items) {
var parameters = new BuildParameters (projects) {
ForwardingLoggers = remoteLoggers,
Loggers = loggers,
+ DefaultToolsVersion = projects.DefaultToolsVersion,
};
var requestData = new BuildRequestData (this, targets ?? DefaultTargets.ToArray ());
var result = manager.Build (parameters, requestData);
using System.Globalization;
using Microsoft.Build.Construction;
using Microsoft.Build.Internal.Expressions;
+using System.Xml;
namespace Microsoft.Build.Internal
{
try {
- var initialPropertiesFormatted = "Initial Properties:\n" + string.Join (Environment.NewLine, project.Properties.OrderBy (p => p.Name).Select (p => string.Format ("{0} = {1}", p.Name, p.EvaluatedValue)).ToArray ());
- LogMessageEvent (new BuildMessageEventArgs (initialPropertiesFormatted, null, null, MessageImportance.Low));
+ var initialGlobalPropertiesFormatted = "Initial Global Properties:\n" + string.Join (Environment.NewLine, project.Properties.OrderBy (p => p.Name).Where (p => p.IsImmutable).Select (p => string.Format ("{0} = {1}", p.Name, p.EvaluatedValue)).ToArray ());
+ LogMessageEvent (new BuildMessageEventArgs (initialGlobalPropertiesFormatted, null, null, MessageImportance.Low));
+ var initialProjectPropertiesFormatted = "Initial Project Properties:\n" + string.Join (Environment.NewLine, project.Properties.OrderBy (p => p.Name).Where (p => !p.IsImmutable).Select (p => string.Format ("{0} = {1}", p.Name, p.EvaluatedValue)).ToArray ());
+ LogMessageEvent (new BuildMessageEventArgs (initialProjectPropertiesFormatted, null, null, MessageImportance.Low));
var initialItemsFormatted = "Initial Items:\n" + string.Join (Environment.NewLine, project.Items.OrderBy (i => i.ItemType).Select (i => string.Format ("{0} : {1}", i.ItemType, i.EvaluatedInclude)).ToArray ());
LogMessageEvent (new BuildMessageEventArgs (initialItemsFormatted, null, null, MessageImportance.Low));
// null targets -> success. empty targets -> success(!)
+ foreach (var targetName in (request.ProjectInstance.InitialTargets).Where (t => t != null))
+ BuildTargetByName (targetName, args);
if (request.TargetNames == null)
- args.Result.OverallResult = BuildResultCode.Success;
+ args.Result.OverallResult = args.CheckCancel () ? BuildResultCode.Failure : args.Result.ResultsByTarget.Any (p => p.Value.ResultCode == TargetResultCode.Failure) ? BuildResultCode.Failure : BuildResultCode.Success;
else {
- foreach (var targetName in (args.TargetNames ?? request.TargetNames).Where (t => t != null))
- BuildTargetByName (targetName, args);
+ foreach (var targetName in (args.TargetNames ?? request.TargetNames).Where (t => t != null)) {
+ if (!BuildTargetByName (targetName, args))
+ break;
+ }
// FIXME: check .NET behavior, whether cancellation always results in failure.
args.Result.OverallResult = args.CheckCancel () ? BuildResultCode.Failure : args.Result.ResultsByTarget.Any (p => p.Value.ResultCode == TargetResultCode.Failure) ? BuildResultCode.Failure : BuildResultCode.Success;
var value = args.Project.ExpandString (p.Value);
project.SetProperty (p.Name, value);
}
+ continue;
}
var ii = child as ProjectItemGroupTaskInstance;
continue;
project.AddItem (item.ItemType, project.ExpandString (item.Include));
}
+ continue;
}
var task = child as ProjectTaskInstance;
}
if (!RunBuildTask (target, task, targetResult, args))
return false;
+ continue;
}
+
+ var onError = child as ProjectOnErrorInstance;
+ if (onError != null)
+ continue; // evaluated under catch clause.
+
+ throw new NotSupportedException (string.Format ("Unexpected Target element children \"{0}\"", child.GetType ()));
}
} catch (Exception ex) {
// fallback task specified by OnError element
}
public void SetMetadataValueLiteral (string metadataName, string metadataValue)
{
- metadata [metadataName] = ProjectCollection.Unescape (metadataValue);
+ metadata [metadataName] = WindowsCompatibilityExtensions.NormalizeFilePath (ProjectCollection.Unescape (metadataValue));
}
public IDictionary CloneCustomMetadataEscaped ()
{
}
public void SetMetadata (string metadataName, string metadataValue)
{
- metadata [metadataName] = metadataValue;
+ metadata [metadataName] = WindowsCompatibilityExtensions.NormalizeFilePath (metadataValue);
}
public string ItemSpec { get; set; }
public int MetadataCount {
// To NOT reuse this IBuildEngine instance for different build, we create another BuildManager and BuildSubmisson and then run it.
public bool BuildProjectFile (string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs, string toolsVersion)
{
+ toolsVersion = string.IsNullOrEmpty (toolsVersion) ? project.ToolsVersion : toolsVersion;
var globalPropertiesThatMakeSense = new Dictionary<string,string> ();
foreach (DictionaryEntry p in globalProperties)
globalPropertiesThatMakeSense [(string) p.Key] = (string) p.Value;
- var result = new BuildManager ().Build (this.submission.BuildManager.OngoingBuildParameters.Clone (), new BuildRequestData (projectFileName, globalPropertiesThatMakeSense, toolsVersion, targetNames, null));
- foreach (var p in result.ResultsByTarget)
- targetOutputs [p.Key] = p.Value.Items;
- return result.OverallResult == BuildResultCode.Success;
+ var projectToBuild = new ProjectInstance (ProjectRootElement.Create (XmlReader.Create (projectFileName)), globalPropertiesThatMakeSense, toolsVersion, Projects);
+ IDictionary<string,TargetResult> outs;
+ var ret = projectToBuild.Build (targetNames ?? new string [] {"Build"}, Projects.Loggers, out outs);
+ foreach (var p in outs)
+ targetOutputs [p.Key] = p.Value.Items ?? new ITaskItem [0];
+ return ret;
}
public bool BuildProjectFilesInParallel (string[] projectFileNames, string[] targetNames, IDictionary[] globalProperties, IDictionary[] targetOutputsPerProject, string[] toolsVersion, bool useResultsCache, bool unloadProjectsOnCompletion)
get { return string.Format ("%([{0}].[{1}])", ItemType, Metadata); }
}
}
+
+ partial class QuotedExpression : Expression
+ {
+ public char QuoteChar { get; set; }
+ public ExpressionList Contents { get; set; }
+
+ public override string ExpressionString {
+ get { return QuoteChar + string.Concat (Contents.Select (e => e.ExpressionString)).Replace (QuoteChar.ToString (), "\\" + QuoteChar) + QuoteChar; }
+ }
+ }
partial class StringLiteral : Expression
{
var args = Access.Arguments.Select (e => e.EvaluateAsObject (context)).ToArray ();
var method = FindMethod (type, Access.Name.Name, args);
if (method == null)
- throw new InvalidProjectFileException (Location, string.Format ("access to undefined static method '{0}' of '{1}' at {2}", Access.Name.Name, Access.Target.EvaluateAsString (context), Location));
+ throw new InvalidProjectFileException (Location, string.Format ("access to undefined static method '{0}' of '{1}' at {2}", Access.Name.Name, type, Location));
return method.Invoke (null, AdjustArgsForCall (method, args));
} else {
var prop = type.GetProperty (Access.Name.Name);
if (prop == null)
- throw new InvalidProjectFileException (Location, string.Format ("access to undefined static property '{0}' of '{1}' at {2}", Access.Name.Name, Access.Target.EvaluateAsString (context), Location));
+ throw new InvalidProjectFileException (Location, string.Format ("access to undefined static property '{0}' of '{1}' at {2}", Access.Name.Name, type, Location));
return prop.GetValue (null, null);
}
}
return EvaluateAsString (context);
}
}
+
+ partial class QuotedExpression : Expression
+ {
+ public override string EvaluateAsString (EvaluationContext context)
+ {
+ return QuoteChar + EvaluateAsStringWithoutQuote (context) + QuoteChar;
+ }
+
+ public string EvaluateAsStringWithoutQuote (EvaluationContext context)
+ {
+ return string.Concat (Contents.Select (e => e.EvaluateAsString (context)));
+ }
+
+ public override bool EvaluateAsBoolean (EvaluationContext context)
+ {
+ var ret = EvaluateAsStringWithoutQuote (context);
+ return EvaluateStringAsBoolean (context, ret);
+ }
+
+ public override object EvaluateAsObject (EvaluationContext context)
+ {
+ return EvaluateAsStringWithoutQuote (context);
+ }
+ }
partial class FunctionCallExpression : Expression
{
while (start < end) {
int bak = start;
ret.Add (ParseSingle (ref start, end));
- SkipSpaces (ref start);
if (bak == start)
throw new Exception ("Parser failed to progress token position: " + source);
}
return ret;
}
- static readonly char [] token_starters = "$@%(),".ToCharArray ();
+ static readonly char [] token_starters = "$@%(),'\"".ToCharArray ();
Expression ParseSingle (ref int start, int end)
{
ret = EvaluateItemExpression (start, last);
start = last + 1;
return ret;
-
+
+ case '\'':
+ case '"':
+ var quoteChar = source [start];
+ start++;
+ last = FindMatchingCloseQuote (quoteChar, start, end);
+ if (last < 0) {
+ if (validation_type == ExpressionValidationType.StrictBoolean)
+ throw new InvalidProjectFileException (string.Format ("expression did not have matching ')' since index {0} in \"{1}\"", start, source));
+ else {
+ start--;
+ goto default; // treat as raw literal to the section end
+ }
+ }
+ ret = new QuotedExpression () { QuoteChar = quoteChar, Contents = Parse (start, last) };
+ start = last + 1;
+ return ret;
// Below (until default) are important only for Condition evaluation
case '(':
if (validation_type == ExpressionValidationType.LaxString)
return ret;
}
}
-
+
int FindMatchingCloseParen (int start, int end)
{
int n = 0;
}
return -1; // invalid
}
-
+
+ int FindMatchingCloseQuote (char quote, int start, int end)
+ {
+ int n = 0;
+ for (int i = start; i < end; i++) {
+ if (i < end + 1 && source [i] == '\\' && (source [i + 1] == quote || source [i + 1] == '\\'))
+ n += 2;
+ else if (source [i] == quote) {
+ if (n-- == 0)
+ return i;
+ }
+ }
+ return -1; // invalid
+ }
+
static readonly string spaces = " \t\r\n";
void SkipSpaces (ref int start)
// property access without member specification
int parenAt = source.IndexOf ('(', start, end - start);
string name = parenAt < 0 ? source.Substring (start, end - start) : source.Substring (start, parenAt - start);
+ name = name.Trim ();
var access = new PropertyAccess () {
Name = new NameToken () { Name = name },
TargetType = PropertyTargetType.Object
int mstart = dotAt + 1;
int parenAt = source.IndexOf ('(', mstart, end - mstart);
string name = parenAt < 0 ? source.Substring (mstart, end - mstart) : source.Substring (mstart, parenAt - mstart);
+ name = name.Trim ();
var access = new PropertyAccess () {
Name = new NameToken () { Name = name },
TargetType = PropertyTargetType.Object,
string type = source.Substring (start, colonsAt - start);
if (type.Length < 2 || type [0] != '[' || type [type.Length - 1] != ']')
throw new InvalidProjectFileException (string.Format ("Static function call misses appropriate type name surrounded by '[' and ']' at {0} in \"{1}\"", start, source));
- type = type.Substring (1, type.Length - 2);
+ type = type.Substring (1, type.Length - 2).Trim ();
start = colonsAt + 2;
int parenAt = source.IndexOf ('(', start, end - start);
string member = parenAt < 0 ? source.Substring (start, end - start) : source.Substring (start, parenAt - start);
+ member = member.Trim ();
if (member.Length == 0)
throw new InvalidProjectFileException ("Static member name is missing");
var access = new PropertyAccess () {
if (source [start] != ',')
throw new InvalidProjectFileException (string.Format ("invalid function call arguments specification. ',' is expected, got '{0}'", source [start]));
start++;
+ SkipSpaces (ref start);
}
args.Add (ParseSingle (ref start, end));
} while (true);
Assert.IsNotNull (p, "#1");
Assert.AreEqual ("False", p.EvaluatedValue, "#2");
}
+
+ [Test]
+ public void ConditionalExpression ()
+ {
+ string project_xml = @"<Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <PropertyGroup>
+ <NoCompilerStandardLib>true</NoCompilerStandardLib>
+ <ResolveAssemblyReferencesDependsOn>$(ResolveAssemblyReferencesDependsOn);_AddCorlibReference</ResolveAssemblyReferencesDependsOn>
+ </PropertyGroup>
+</Project>";
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ root.FullPath = "ProjectInstanceTest.ConditionalExpression.proj";
+ var proj = new ProjectInstance (root);
+ var p = proj.GetProperty ("ResolveAssemblyReferencesDependsOn");
+ Assert.IsNotNull (p, "#1");
+ Assert.AreEqual (";_AddCorlibReference", p.EvaluatedValue, "#2");
+ }
+
+ [Test]
+ [Category ("NotWorking")] // until we figure out why it fails on wrench.
+ public void ItemsInTargets ()
+ {
+ string project_xml = @"<Project DefaultTargets='Default' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <Target Name='Default'>
+ <PropertyGroup>
+ <_ExplicitMSCorlibPath>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries ('$(TargetFrameworkIdentifier)', '$(TargetFrameworkVersion)', '$(TargetFrameworkProfile)'))\mscorlib.dll</_ExplicitMSCorlibPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <_ExplicitReference
+ Include='$(_ExplicitMSCorlibPath)'
+ Condition='Exists($(_ExplicitMSCorlibPath))'>
+ <Private>false</Private>
+ </_ExplicitReference>
+ </ItemGroup>
+ </Target>
+ <Import Project='$(MSBuildBinPath)\\Microsoft.CSharp.targets' />
+</Project>";
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ root.FullPath = "ProjectInstanceTest.ConditionalExpression.proj";
+ var proj = new ProjectInstance (root, null, "4.0", ProjectCollection.GlobalProjectCollection);
+ proj.Build ();
+ // make sure the property value expansion is done successfully.
+ Assert.IsTrue (!string.IsNullOrEmpty (proj.GetPropertyValue ("_ExplicitMSCorlibPath")), "premise: propertyValue by ToolLocationHelper func call");
+ var items = proj.GetItems ("_ExplicitReference");
+ // make sure items are stored after build.
+ Assert.IsTrue (items.Any (), "items.Any");
+ Assert.IsTrue (!string.IsNullOrEmpty (items.First ().EvaluatedInclude), "item.EvaluatedInclude");
+ }
}
namespace SubNamespace
var result = p.Build (new ILogger [] { new ConsoleLogger (LoggerVerbosity.Minimal, sw.WriteLine, null, null)});
Assert.IsTrue (result, "#1: " + sw);
}
+
+ [Test]
+ public void FunctionCall ()
+ {
+ string project_xml = @"<Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <Target Name='Foo'>
+ <Warning Text=""$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries ('$(TargetFrameworkIdentifier)', '$(TargetFrameworkVersion)', '$(TargetFrameworkProfile)'))\mscorlib.dll'"" />
+ </Target>
+</Project>";
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ var p = new ProjectInstance (root, null, "4.0", ProjectCollection.GlobalProjectCollection);
+ var sw = new StringWriter ();
+ var result = p.Build (new ILogger [] { new ConsoleLogger (LoggerVerbosity.Minimal, sw.WriteLine, null, null)});
+ Assert.IsTrue (result, "#1: " + sw);
+ }
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.CSharp/Mono.CSharp-net_4_5.csproj">\r
<Project>{811AC316-9CC2-497D-A45E-7B6B1E0E481B}</Project>\r
- <Name>Mono.CSharp\Mono.CSharp-net_4_5</Name>\r
+ <Name>Mono.CSharp-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
Evaluator.Run ("struct B { public string foo; public int bar; }");
Evaluator.Run ("B aStruct = new B { foo = \"foo\", bar = 1 };");
}
+
+ [Test]
+ public void NestedType ()
+ {
+ Evaluator.Run ("class A { class B { } }");
+ Evaluator.Run ("var x = new A ();");
+
+ }
}
}
\ No newline at end of file
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
}
}
- [Obsolete ("Use SetSourceRGBA method")]
+ [Obsolete ("Use SetSourceColor method")]
public Color Color {
set {
- NativeMethods.cairo_set_source_rgba (handle, value.R, value.G, value.B, value.A);
+ SetSourceColor (value);
}
}
}
}
+ public bool HasCurrentPoint {
+ get {
+ return NativeMethods.cairo_has_current_point (handle);
+ }
+ }
+
[Obsolete ("Use GetTarget/SetTarget")]
public Cairo.Surface Target {
set {
get { return NativeMethods.cairo_get_reference_count (handle); }
}
+ public void SetSourceColor (Color color)
+ {
+ NativeMethods.cairo_set_source_rgba (handle, color.R, color.G, color.B, color.A);
+ }
+
public void SetSourceRGB (double r, double g, double b)
{
NativeMethods.cairo_set_source_rgb (handle, r, g, b);
NativeMethods.cairo_reset_clip (handle);
}
+ public bool InClip (double x, double y)
+ {
+ return NativeMethods.cairo_in_clip (handle, x, y);
+ }
+
public bool InStroke (double x, double y)
{
return NativeMethods.cairo_in_stroke (handle, x, y);
[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
internal static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
+ [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+ [return: MarshalAs (UnmanagedType.U1)]
+ internal static extern bool cairo_has_current_point (IntPtr cr);
+
[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
internal static extern void cairo_identity_matrix (IntPtr cr);
[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
internal static extern int cairo_image_surface_get_width (IntPtr surface);
+ [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+ [return: MarshalAs (UnmanagedType.U1)]
+ internal static extern bool cairo_in_clip (IntPtr cr, double x, double y);
+
[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
[return: MarshalAs (UnmanagedType.U1)]
internal static extern bool cairo_in_fill (IntPtr cr, double x, double y);
<AssemblyName>Mono.Cecil.Mdb</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../mono.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Cecil/Mono.Cecil-net_4_5.csproj">\r
<Project>{F6DD456E-ADE4-419D-997F-41ECA0CE79F7}</Project>\r
- <Name>Mono.Cecil\Mono.Cecil-net_4_5</Name>\r
+ <Name>Mono.Cecil-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>Mono.Cecil</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../mono.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Cecil/Mono.Cecil-net_4_5.csproj">\r
<Project>{F6DD456E-ADE4-419D-997F-41ECA0CE79F7}</Project>\r
- <Name>Mono.Cecil\Mono.Cecil-net_4_5</Name>\r
+ <Name>Mono.Cecil-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Cecil.Mdb/Mono.Cecil.Mdb-net_4_5.csproj">\r
<Project>{9ABB7BB9-5EA1-4081-B205-5658A602C1F5}</Project>\r
- <Name>Mono.Cecil.Mdb\Mono.Cecil.Mdb-net_4_5</Name>\r
+ <Name>Mono.Cecil.Mdb-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>Mono.Debugger.Soft</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../mono.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Cecil/Mono.Cecil-net_4_5.csproj">\r
<Project>{F6DD456E-ADE4-419D-997F-41ECA0CE79F7}</Project>\r
- <Name>Mono.Cecil\Mono.Cecil-net_4_5</Name>\r
+ <Name>Mono.Cecil-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
static readonly bool EnableConnectionLogging = !String.IsNullOrEmpty (Environment.GetEnvironmentVariable ("MONO_SDB_LOG"));
static int ConnectionId;
- readonly StreamWriter LoggingStream = EnableConnectionLogging ?
- new StreamWriter (string.Format ("/tmp/sdb_conn_log_{0}", ConnectionId++), false) : null;
+ readonly StreamWriter LoggingStream;
/*
* Th version of the wire-protocol implemented by the library. The library
reply_cbs = new Dictionary<int, ReplyCallback> ();
reply_cb_counts = new Dictionary<int, int> ();
reply_packets_monitor = new Object ();
+ if (EnableConnectionLogging) {
+ var path = Environment.GetEnvironmentVariable ("MONO_SDB_LOG");
+ if (path.Contains ("{0}")) {
+ //C:\SomeDir\sdbLog{0}.txt -> C:\SomeDir\sdbLog1.txt
+ LoggingStream = new StreamWriter (string.Format (path, ConnectionId++), false);
+ } else if (Path.HasExtension (path)) {
+ //C:\SomeDir\sdbLog.txt -> C:\SomeDir\sdbLog1.txt
+ LoggingStream = new StreamWriter (Path.GetDirectoryName (path) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension (path) + ConnectionId++ + "." + Path.GetExtension (path), false);
+ } else {
+ //C:\SomeDir\sdbLog -> C:\SomeDir\sdbLog1
+ LoggingStream = new StreamWriter (path + ConnectionId++, false);
+ }
+ }
}
protected abstract int TransportReceive (byte[] buf, int buf_offset, int len);
//
public void StartBuffering () {
buffer_packets = true;
- if (Version.AtLeast (3, 34))
+ if (Version.AtLeast (2, 34))
VM_StartBuffering ();
}
public void StopBuffering () {
- if (Version.AtLeast (3, 34))
+ if (Version.AtLeast (2, 34))
VM_StopBuffering ();
buffer_packets = false;
WritePackets (buffered_packets);
if (EnableConnectionLogging) {
- LoggingStream.WriteLine (String.Format ("Sent {1} packets.", buffered_packets.Count));
+ LoggingStream.WriteLine (String.Format ("Sent {0} packets.", buffered_packets.Count));
LoggingStream.Flush ();
}
buffered_packets.Clear ();
return SendReceive (CommandSet.THREAD, (int)CmdThread.GET_NAME, new PacketWriter ().WriteId (id)).ReadString ();
}
- internal FrameInfo[] Thread_GetFrameInfo (long id, int start_frame, int length) {
- var res = SendReceive (CommandSet.THREAD, (int)CmdThread.GET_FRAME_INFO, new PacketWriter ().WriteId (id).WriteInt (start_frame).WriteInt (length));
- int count = res.ReadInt ();
-
- var frames = new FrameInfo [count];
- for (int i = 0; i < count; ++i) {
- var f = new FrameInfo ();
- f.id = res.ReadInt ();
- f.method = res.ReadId ();
- f.il_offset = res.ReadInt ();
- f.flags = (StackFrameFlags)res.ReadByte ();
- frames [i] = f;
- }
-
- return frames;
+ internal void Thread_GetFrameInfo (long id, int start_frame, int length, Action<FrameInfo[]> resultCallaback) {
+ Send (CommandSet.THREAD, (int)CmdThread.GET_FRAME_INFO, new PacketWriter ().WriteId (id).WriteInt (start_frame).WriteInt (length), (res) => {
+ int count = res.ReadInt ();
+ var frames = new FrameInfo[count];
+ for (int i = 0; i < count; ++i) {
+ var f = new FrameInfo ();
+ f.id = res.ReadInt ();
+ f.method = res.ReadId ();
+ f.il_offset = res.ReadInt ();
+ f.flags = (StackFrameFlags)res.ReadByte ();
+ frames [i] = f;
+ }
+ resultCallaback (frames);
+ }, 1);
}
internal int Thread_GetState (long id) {
// IL_0008: br IL_000d
// IL_000d: ldloc.0
// IL_000e: ret
+ // ... or returns a simple constant:
+ // IL_0000: ldc.i4 1024
+ // IL_0005: conv.i8
+ // IL_0006: ret
if (args != null && args.Length != 0)
- throw new NotSupportedException ();
+ throw new NotSupportedException ();
+
if (method.IsStatic || method.DeclaringType.IsValueType || this_val == null || !(this_val is ObjectMirror))
throw new NotSupportedException ();
var instructions = body.Instructions;
- if (instructions.Count > 16)
+ if (instructions.Count < 1 || instructions.Count > 16)
throw new NotSupportedException ();
- Value[] stack = new Value [16];
+ var stack = new Value [16];
+ var ins = instructions [0];
Value locals_0 = null;
- Value res = null;
-
- int sp = 0;
int ins_count = 0;
- var ins = instructions [0];
+ int sp = 0;
+
while (ins != null) {
if (ins_count > 16)
throw new NotImplementedException ();
- ins_count ++;
+
var next = ins.Next;
+ ins_count++;
var op = ins.OpCode;
if (op == OpCodes.Nop) {
} else if (op == OpCodes.Ldarg_0) {
- if (sp > 0)
+ if (sp != 0)
throw new NotSupportedException ();
+
stack [sp++] = this_val;
} else if (op == OpCodes.Ldfld) {
if (sp != 1)
throw new NotSupportedException ();
- var obj = (ObjectMirror)stack [--sp];
- var field = (FieldInfoMirror)ins.Operand;
+
+ var obj = (ObjectMirror) stack [--sp];
+ var field = (FieldInfoMirror) ins.Operand;
try {
stack [sp++] = obj.GetValue (field);
} catch (ArgumentException) {
throw new NotSupportedException ();
}
+ } else if (op == OpCodes.Ldc_I4_0) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 0);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_1) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 1);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_2) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 2);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_3) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 3);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_4) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 4);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_5) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 5);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_6) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 6);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_7) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 7);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_8) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, 8);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_M1) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, -1);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, ins.Operand);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I4_S) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, ins.Operand);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_I8) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, ins.Operand);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_R4) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, ins.Operand);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Ldc_R8) {
+ if (sp != 0)
+ throw new NotSupportedException ();
+
+ try {
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, ins.Operand);
+ } catch (ArgumentException) {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_I) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToInt32 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_I1) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToSByte (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_U1) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToByte (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_I2) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToInt16 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_U2) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt16 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_I4) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToInt32 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_U4) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt32 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_I8) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToInt64 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_U8) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt64 (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_R4) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToSingle (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
+ } else if (op == OpCodes.Conv_R8) {
+ if (sp != 1)
+ throw new NotSupportedException ();
+
+ try {
+ var primitive = (PrimitiveValue) stack [--sp];
+ stack [sp++] = new PrimitiveValue (method.VirtualMachine, Convert.ToDouble (primitive.Value));
+ } catch {
+ throw new NotSupportedException ();
+ }
} else if (op == OpCodes.Stloc_0) {
if (sp != 1)
throw new NotSupportedException ();
+
locals_0 = stack [--sp];
} else if (op == OpCodes.Br) {
- next = (ILInstruction)ins.Operand;
+ next = (ILInstruction) ins.Operand;
} else if (op == OpCodes.Ldloc_0) {
if (sp != 0)
throw new NotSupportedException ();
+
stack [sp++] = locals_0;
} else if (op == OpCodes.Ret) {
- if (sp == 0)
- res = null;
- else
- res = stack [--sp];
- break;
+ if (sp > 0) {
+ var res = stack [--sp];
+
+ var primitive = res as PrimitiveValue;
+ if (method.ReturnType.IsPrimitive && primitive != null) {
+ // cast the primitive value to the return type
+ try {
+ switch (method.ReturnType.CSharpName) {
+ case "double": res = new PrimitiveValue (method.VirtualMachine, Convert.ToDouble (primitive.Value)); break;
+ case "float": res = new PrimitiveValue (method.VirtualMachine, Convert.ToSingle (primitive.Value)); break;
+ case "ulong": res = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt64 (primitive.Value)); break;
+ case "long": res = new PrimitiveValue (method.VirtualMachine, Convert.ToInt64 (primitive.Value)); break;
+ case "uint": res = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt32 (primitive.Value)); break;
+ case "int": res = new PrimitiveValue (method.VirtualMachine, Convert.ToInt32 (primitive.Value)); break;
+ case "ushort": res = new PrimitiveValue (method.VirtualMachine, Convert.ToUInt16 (primitive.Value)); break;
+ case "short": res = new PrimitiveValue (method.VirtualMachine, Convert.ToInt16 (primitive.Value)); break;
+ case "sbyte": res = new PrimitiveValue (method.VirtualMachine, Convert.ToSByte (primitive.Value)); break;
+ case "byte": res = new PrimitiveValue (method.VirtualMachine, Convert.ToByte (primitive.Value)); break;
+ case "char": res = new PrimitiveValue (method.VirtualMachine, Convert.ToChar (primitive.Value)); break;
+ case "bool": res = new PrimitiveValue (method.VirtualMachine, Convert.ToBoolean (primitive.Value)); break;
+ }
+ } catch {
+ throw new NotSupportedException ();
+ }
+ }
+
+ return res;
+ }
+
+ return null;
} else {
throw new NotSupportedException ();
}
+
ins = next;
}
- return res;
+ return null;
}
}
}
f |= InvokeFlags.SINGLE_THREADED;
InvokeAsyncResult r = new InvokeAsyncResult { AsyncState = state, AsyncWaitHandle = new ManualResetEvent (false), VM = vm, Thread = thread, Callback = callback };
-
+ thread.InvalidateFrames ();
r.ID = vm.conn.VM_BeginInvokeMethod (thread.Id, method.Id, this_obj != null ? vm.EncodeValue (this_obj) : vm.EncodeValue (vm.CreateValue (null)), vm.EncodeValues (arguments), f, InvokeCB, r);
return r;
} catch (CommandException ex) {
if (ex.ErrorCode == ErrorCode.INVALID_ARGUMENT)
throw new ArgumentException ("Incorrect number or types of arguments", "arguments");
- else
- throw;
+
+ throw;
}
throw new NotImplementedException ();
} else {
if (r.Exception != null)
throw new InvocationException ((ObjectMirror)r.VM.DecodeValue (r.Exception));
- else
- return r.VM.DecodeValue (r.Value);
+
+ return r.VM.DecodeValue (r.Value);
}
}
var args = new List<ValueImpl[]> ();
for (int i = 0; i < methods.Length; ++i)
args.Add (vm.EncodeValues (arguments [i]));
+ thread.InvalidateFrames ();
r.ID = vm.conn.VM_BeginInvokeMethods (thread.Id, mids, this_obj != null ? vm.EncodeValue (this_obj) : vm.EncodeValue (vm.CreateValue (null)), args, f, InvokeMultipleCB, r);
return r;
public override bool Equals (object obj) {
if (value == obj)
return true;
- if (obj != null && obj is PrimitiveValue)
- return value == (obj as PrimitiveValue).Value;
+
+ var primitive = obj as PrimitiveValue;
+ if (primitive != null)
+ return value == primitive.Value;
+
return base.Equals (obj);
}
public class ThreadMirror : ObjectMirror
{
string name;
+ bool cacheInvalid = true;
+ bool fetching;
+ object fetchingLocker = new object ();
+ ManualResetEvent fetchingEvent = new ManualResetEvent (false);
ThreadInfo info;
+ StackFrame[] frames;
internal ThreadMirror (VirtualMachine vm, long id) : base (vm, id) {
}
internal ThreadMirror (VirtualMachine vm, long id, TypeMirror type, AppDomainMirror domain) : base (vm, id, type, domain) {
}
- // FIXME: Cache, invalidate when the thread/runtime is resumed
public StackFrame[] GetFrames () {
- FrameInfo[] frame_info = vm.conn.Thread_GetFrameInfo (id, 0, -1);
+ FetchFrames (true);
+ fetchingEvent.WaitOne ();
+ return frames;
+ }
- var frames = new List<StackFrame> ();
+ internal void InvalidateFrames () {
+ cacheInvalid = true;
+ }
- for (int i = 0; i < frame_info.Length; ++i) {
- FrameInfo info = (FrameInfo)frame_info [i];
- MethodMirror method = vm.GetMethod (info.method);
- var f = new StackFrame (vm, info.id, this, method, info.il_offset, info.flags);
- if (!(f.IsNativeTransition && !NativeTransitions))
- frames.Add (f);
+ internal void FetchFrames (bool mustFetch = false) {
+ lock (fetchingLocker) {
+ if (fetching || !cacheInvalid)
+ return;
+ cacheInvalid = false;
+ fetching = true;
+ fetchingEvent.Reset ();
}
+ vm.conn.Thread_GetFrameInfo (id, 0, -1, (frame_info) => {
+ var framesList = new List<StackFrame> ();
+ for (int i = 0; i < frame_info.Length; ++i) {
+ var frameInfo = (FrameInfo)frame_info [i];
+ var method = vm.GetMethod (frameInfo.method);
+ var f = new StackFrame (vm, frameInfo.id, this, method, frameInfo.il_offset, frameInfo.flags);
+ if (!(f.IsNativeTransition && !NativeTransitions))
+ framesList.Add (f);
+ }
+ lock (fetchingLocker) {
+ vm.AddThreadToInvalidateList (this);
+ fetching = false;
+ //In case it was invalidated during waiting for response from
+ //runtime and mustFetch was set refetch
+ if (cacheInvalid && mustFetch) {
+ FetchFrames (mustFetch);
+ return;
+ }
+ frames = framesList.ToArray ();
+ fetchingEvent.Set ();
+ }
+ });
+ }
- return frames.ToArray ();
- }
+ public static void FetchFrames(IList<ThreadMirror> threads)
+ {
+ if (threads.Count == 0)
+ return;
+ threads [0].vm.conn.StartBuffering ();
+ foreach (var thread in threads) {
+ thread.FetchFrames ();
+ }
+ threads [0].vm.conn.StopBuffering ();
+ }
public string Name {
get {
name = vm.conn.Thread_GetName (id);
return name;
}
- }
+ }
public new long Id {
get {
} catch (CommandException ex) {
if (ex.ErrorCode == ErrorCode.INVALID_ARGUMENT)
throw new ArgumentException ("loc doesn't refer to a location in the current method of this thread.", "loc");
- else
- throw;
+
+ throw;
}
}
}
public void Resume () {
try {
+ InvalidateThreadAndFrameCaches ();
conn.VM_Resume ();
} catch (CommandException ex) {
if (ex.ErrorCode == ErrorCode.NOT_SUSPENDED)
throw new VMNotSuspendedException ();
- else
- throw;
+
+ throw;
}
}
conn.ForceDisconnect ();
}
+ HashSet<ThreadMirror> threadsToInvalidate = new HashSet<ThreadMirror> ();
+ ThreadMirror[] threadCache;
+ object threadCacheLocker = new object ();
+
+ void InvalidateThreadAndFrameCaches () {
+ lock (threadsToInvalidate) {
+ foreach (var thread in threadsToInvalidate)
+ thread.InvalidateFrames ();
+ threadsToInvalidate.Clear ();
+ }
+ lock (threadCacheLocker) {
+ threadCache = null;
+ }
+ }
+
+ internal void InvalidateThreadCache () {
+ lock (threadCacheLocker) {
+ threadCache = null;
+ }
+ }
+
+ internal void AddThreadToInvalidateList (ThreadMirror threadMirror)
+ {
+ lock (threadsToInvalidate) {
+ threadsToInvalidate.Add (threadMirror);
+ }
+ }
+
public IList<ThreadMirror> GetThreads () {
- long[] ids = vm.conn.VM_GetThreads ();
- ThreadMirror[] res = new ThreadMirror [ids.Length];
- for (int i = 0; i < ids.Length; ++i)
- res [i] = GetThread (ids [i]);
- return res;
+ lock (threadCacheLocker) {
+ if (threadCache == null) {
+ long[] ids = vm.conn.VM_GetThreads ();
+ threadCache = new ThreadMirror [ids.Length];
+ for (int i = 0; i < ids.Length; ++i)
+ threadCache [i] = GetThread (ids [i]);
+ }
+ return threadCache;
+ }
}
// Same as the mirrorOf methods in JDI
vm.notify_vm_event (EventType.VMDeath, suspend_policy, req_id, thread_id, null, ei.ExitCode);
break;
case EventType.ThreadStart:
+ vm.InvalidateThreadCache ();
l.Add (new ThreadStartEvent (vm, req_id, id));
break;
case EventType.ThreadDeath:
+ vm.InvalidateThreadCache ();
l.Add (new ThreadDeathEvent (vm, req_id, id));
break;
case EventType.AssemblyLoad:
case EventType.UserLog:
l.Add (new UserLogEvent (vm, req_id, thread_id, ei.Level, ei.Category, ei.Message));
break;
- default:
- break;
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib-net_4_5.csproj">\r
<Project>{0B587DBA-BA92-4B92-821A-AA200C612A7E}</Project>\r
- <Name>ICSharpCode.SharpZipLib\ICSharpCode.SharpZipLib-net_4_5</Name>\r
+ <Name>ICSharpCode.SharpZipLib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Posix/Mono.Posix-net_4_5.csproj">\r
<Project>{85A9B29B-58FF-4FBE-8998-B0A89AC22880}</Project>\r
- <Name>Mono.Posix\Mono.Posix-net_4_5</Name>\r
+ <Name>Mono.Posix-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Messaging/System.Messaging-net_4_5.csproj">\r
<Project>{1CBEC0FC-5926-42FA-A0CF-A19617FABB78}</Project>\r
- <Name>System.Messaging\System.Messaging-net_4_5</Name>\r
+ <Name>System.Messaging-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Messaging/Mono.Messaging-net_4_5.csproj">\r
<Project>{DDCC93B5-9425-4E9A-95DC-3400D0028508}</Project>\r
- <Name>Mono.Messaging\Mono.Messaging-net_4_5</Name>\r
+ <Name>Mono.Messaging-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../RabbitMQ.Client/src/client/RabbitMQ.Client-net_4_5.csproj">\r
<Project>{55AA0C89-63D9-438E-A139-3ED9F72AE295}</Project>\r
- <Name>client\RabbitMQ.Client-net_4_5</Name>\r
+ <Name>RabbitMQ.Client-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
ee.events = events;
ee.fd = fd;
- return sys_epoll_ctl (epfd, op, fd, ref ee);
+ return epoll_ctl (epfd, op, fd, ref ee);
}
public static int epoll_wait (int epfd, EpollEvent [] events, int max_events, int timeout)
private static extern int sys_epoll_create1 (EpollFlags flags);
[DllImport (LIBC, SetLastError=true, EntryPoint="epoll_ctl")]
- private static extern int sys_epoll_ctl (int epfd, EpollOp op, int fd, ref EpollEvent ee);
+ public static extern int epoll_ctl (int epfd, EpollOp op, int fd, ref EpollEvent ee);
[DllImport (LIBC, SetLastError=true, EntryPoint="epoll_wait")]
private static extern int sys_epoll_wait (int epfd, EpollEvent [] ee, int maxevents, int timeout);
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-bare-net_4_5.csproj">\r
<Project>{91CDF14E-F60F-4AB7-BC9D-5CBD7E669076}</Project>\r
- <Name>System\System-bare-net_4_5</Name>\r
+ <Name>System-bare-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type1MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type2MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type3MessageTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\AuthorityKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\BasicConstraintsExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\ExtendedKeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\KeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\SubjectAltNameExtensionTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\SubjectKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\PKCS12Test.cs" />\r
<Compile Include="Test\Mono.Security.X509\X501NameTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\X509CertificateTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type1MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type2MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type3MessageTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\AuthorityKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\BasicConstraintsExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\ExtendedKeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\KeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\SubjectAltNameExtensionTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\SubjectKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\PKCS12Test.cs" />\r
<Compile Include="Test\Mono.Security.X509\X501NameTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\X509CertificateTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type1MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type2MessageTest.cs" />\r
<Compile Include="Test\Mono.Security.Protocol.Ntlm\Type3MessageTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\AuthorityKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\BasicConstraintsExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\ExtendedKeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\KeyUsageExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509.Extensions\SubjectAltNameExtensionTest.cs" />\r
+ <Compile Include="Test\Mono.Security.X509.Extensions\SubjectKeyIdentifierExtensionTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\PKCS12Test.cs" />\r
<Compile Include="Test\Mono.Security.X509\X501NameTest.cs" />\r
<Compile Include="Test\Mono.Security.X509\X509CertificateTest.cs" />\r
}
}
+ protected override void Encode ()
+ {
+ ASN1 seq = new ASN1 (0x30);
+ if (aki == null) {
+ throw new InvalidOperationException ("Invalid AuthorityKeyIdentifier extension");
+ }
+
+ seq.Add (new ASN1 (0x80, aki));
+ extnValue = new ASN1 (0x04);
+ extnValue.Add (seq);
+ }
+
public override string Name {
get { return "Authority Key Identifier"; }
}
return null;
return (byte[]) aki.Clone ();
}
+ set { aki = value; }
}
public override string ToString ()
ski = sequence.Value;
}
+ protected override void Encode ()
+ {
+ if (ski == null) {
+ throw new InvalidOperationException ("Invalid SubjectKeyIdentifier extension");
+ }
+
+ var seq = new ASN1 (0x04, ski);
+ extnValue = new ASN1 (0x04);
+ extnValue.Add (seq);
+ }
+
public override string Name {
get { return "Subject Key Identifier"; }
}
return null;
return (byte[]) ski.Clone ();
}
+ set { ski = value; }
}
public override string ToString ()
Mono.Security.X509/X509CertificateTest.cs
Mono.Security.X509/X509CrlTest.cs
Mono.Security.X509/X520AttributesTest.cs
+Mono.Security.X509.Extensions/AuthorityKeyIdentifierExtensionTest.cs
Mono.Security.X509.Extensions/KeyUsageExtensionTest.cs
Mono.Security.X509.Extensions/ExtendedKeyUsageExtensionTest.cs
Mono.Security.X509.Extensions/BasicConstraintsExtensionTest.cs
Mono.Security.X509.Extensions/SubjectAltNameExtensionTest.cs
+Mono.Security.X509.Extensions/SubjectKeyIdentifierExtensionTest.cs
--- /dev/null
+//
+// AuthorityKeyIdentifierExtensionTest.cs - NUnit Test Cases for
+// Mono.Security.X509.Extensions.AuthorityKeyIdentifierExtension
+//
+// Authors:
+// Lex Li <support@lextm.com>
+//
+// Copyright (C) 2014 Lex Li
+//
+// 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 Mono.Security.X509.Extensions;
+using NUnit.Framework;
+
+namespace MonoTests.Mono.Security.X509.Extensions
+{
+ [TestFixture]
+ public class AuthorityKeyIdentifierExtensionTest
+ {
+ private void Empty (AuthorityKeyIdentifierExtension aki)
+ {
+ Assert.IsFalse (aki.Critical, "Critical");
+ Assert.AreEqual ("2.5.29.35", aki.Oid, "Oid");
+ Assert.IsNotNull (aki.Name, "Name");
+ Assert.IsFalse (aki.Name == aki.Oid, "Name!=Oid");
+ Assert.AreEqual (new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ }, aki.Identifier, "Identifier");
+ }
+
+ [Test]
+ public void Constructor_Empty ()
+ {
+ AuthorityKeyIdentifierExtension aki = new AuthorityKeyIdentifierExtension ();
+ aki.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ Empty (aki);
+ }
+
+ [Test]
+ public void Constructor_Extension ()
+ {
+ AuthorityKeyIdentifierExtension ext = new AuthorityKeyIdentifierExtension ();
+ ext.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ AuthorityKeyIdentifierExtension aki = new AuthorityKeyIdentifierExtension (ext);
+ Empty (aki);
+ }
+
+ [Test]
+ public void Constructor_ASN1 ()
+ {
+ AuthorityKeyIdentifierExtension ext = new AuthorityKeyIdentifierExtension ();
+ ext.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ AuthorityKeyIdentifierExtension aki = new AuthorityKeyIdentifierExtension (ext.ASN1);
+ Empty (aki);
+ }
+
+ [Test]
+ public void AuthorityKeyIdentifier_Critical ()
+ {
+ AuthorityKeyIdentifierExtension aki = new AuthorityKeyIdentifierExtension ();
+ aki.Critical = true;
+ aki.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ Assert.AreEqual ("30-22-06-03-55-1D-23-01-01-FF-04-18-30-16-80-14-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00", BitConverter.ToString (aki.GetBytes ()), "GetBytes");
+
+ AuthorityKeyIdentifierExtension aki2 = new AuthorityKeyIdentifierExtension (aki.ASN1);
+ Assert.IsTrue (aki2.Critical, "Critical");
+ Assert.AreEqual (new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ }, aki2.Identifier, "Identifier");
+ }
+
+ [Test]
+ [ExpectedException (typeof(InvalidOperationException))]
+ public void EmptyIdentifier ()
+ {
+ AuthorityKeyIdentifierExtension ext = new AuthorityKeyIdentifierExtension ();
+ AuthorityKeyIdentifierExtension aki = new AuthorityKeyIdentifierExtension (ext);
+ Empty (aki);
+ }
+ }
+}
--- /dev/null
+//
+// SubjectKeyIdentifierExtensionTest.cs - NUnit Test Cases for
+// Mono.Security.X509.Extensions.SubjectKeyIdentifierExtension
+//
+// Authors:
+// Lex Li <support@lextm.com>
+//
+// Copyright (C) 2014 Lex Li
+//
+// 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 Mono.Security.X509.Extensions;
+using NUnit.Framework;
+
+namespace MonoTests.Mono.Security.X509.Extensions
+{
+ [TestFixture]
+ public class SubjectKeyIdentifierExtensionTest
+ {
+ private void Empty (SubjectKeyIdentifierExtension ski)
+ {
+ Assert.IsFalse (ski.Critical, "Critical");
+ Assert.AreEqual ("2.5.29.14", ski.Oid, "Oid");
+ Assert.IsNotNull (ski.Name, "Name");
+ Assert.IsFalse (ski.Name == ski.Oid, "Name!=Oid");
+ Assert.AreEqual (new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ }, ski.Identifier, "Identifier");
+ }
+
+ [Test]
+ public void Constructor_Empty ()
+ {
+ SubjectKeyIdentifierExtension ski = new SubjectKeyIdentifierExtension ();
+ ski.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ Empty (ski);
+ }
+
+ [Test]
+ public void Constructor_Extension ()
+ {
+ SubjectKeyIdentifierExtension ext = new SubjectKeyIdentifierExtension ();
+ ext.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ SubjectKeyIdentifierExtension ski = new SubjectKeyIdentifierExtension (ext);
+ Empty (ski);
+ }
+
+ [Test]
+ public void Constructor_ASN1 ()
+ {
+ SubjectKeyIdentifierExtension ext = new SubjectKeyIdentifierExtension ();
+ ext.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ SubjectKeyIdentifierExtension ski = new SubjectKeyIdentifierExtension (ext.ASN1);
+ Empty (ski);
+ }
+
+ [Test]
+ public void AuthorityKeyIdentifier_Critical ()
+ {
+ SubjectKeyIdentifierExtension ski = new SubjectKeyIdentifierExtension ();
+ ski.Critical = true;
+ ski.Identifier = new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ Assert.AreEqual ("30-20-06-03-55-1D-0E-01-01-FF-04-16-04-14-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00", BitConverter.ToString (ski.GetBytes ()), "GetBytes");
+
+ SubjectKeyIdentifierExtension ski2 = new SubjectKeyIdentifierExtension (ski.ASN1);
+ Assert.IsTrue (ski2.Critical, "Critical");
+ Assert.AreEqual (new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ }, ski2.Identifier, "Identifier");
+ }
+
+ [Test]
+ [ExpectedException (typeof(InvalidOperationException))]
+ public void EmptyIdentifier ()
+ {
+ SubjectKeyIdentifierExtension ext = new SubjectKeyIdentifierExtension ();
+ SubjectKeyIdentifierExtension ski = new SubjectKeyIdentifierExtension (ext);
+ Empty (ski);
+ }
+ }
+}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../../../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../../../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
thisdir = class/System.Configuration
SUBDIRS =
+
include ../../build/rules.make
LIBRARY = System.Configuration.dll
LOCAL_MCS_FLAGS = -lib:$(secxml_libdir) -lib:$(bare_libdir)
+test_remove = $(LOCAL_MCS_FLAGS)
LIB_MCS_FLAGS = -r:$(corlib) -r:System.dll -r:System.Xml.dll -r:System.Security.dll -nowarn:618
-TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
+TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
include ../../build/library.make
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-secxml-net_4_5.csproj">\r
<Project>{46F151F2-A422-4A1B-9D29-2E148CE73629}</Project>\r
- <Name>System\System-secxml-net_4_5</Name>\r
+ <Name>System-secxml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-bare-net_4_5.csproj">\r
<Project>{21FB091E-0F84-479E-AB16-6503D36852F9}</Project>\r
- <Name>System.XML\System.Xml-bare-net_4_5</Name>\r
+ <Name>System.Xml-bare-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Security/System.Security-net_4_5.csproj">\r
<Project>{B55E59B2-31CA-438B-ADB8-4B9A9A547830}</Project>\r
- <Name>System.Security\System.Security-net_4_5</Name>\r
+ <Name>System.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
namespace Microsoft.Win32.SafeHandles
{
public sealed class SafeMemoryMappedViewHandle : SafeBuffer {
- internal SafeMemoryMappedViewHandle (IntPtr handle, long size) : base (true) {
- this.handle = handle;
+ IntPtr mmap_handle;
+
+ internal SafeMemoryMappedViewHandle (IntPtr mmap_handle, IntPtr base_address, long size) : base (true) {
+ this.mmap_handle = mmap_handle;
+ this.handle = base_address;
Initialize ((ulong)size);
}
protected override bool ReleaseHandle () {
if (this.handle != (IntPtr) (-1))
- return MemoryMapImpl.Unmap (this.handle, ByteLength);
+ return MemoryMapImpl.Unmap (this.mmap_handle);
throw new NotImplementedException ();
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Posix/Mono.Posix-net_4_5.csproj">\r
<Project>{85A9B29B-58FF-4FBE-8998-B0A89AC22880}</Project>\r
- <Name>Mono.Posix\Mono.Posix-net_4_5</Name>\r
+ <Name>Mono.Posix-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Posix/Mono.Posix-net_4_5.csproj">\r
<Project>{85A9B29B-58FF-4FBE-8998-B0A89AC22880}</Project>\r
- <Name>Mono.Posix\Mono.Posix-net_4_5</Name>\r
+ <Name>Mono.Posix-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-
#if NET_4_0
using System;
using System.Collections.Generic;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
-
-
-#if !MOBILE
-using Mono.Unix.Native;
-using Mono.Unix;
-#else
using System.Runtime.CompilerServices;
-#endif
+
namespace System.IO.MemoryMappedFiles
{
-#if !MOBILE
- internal static class MemoryMapImpl {
- //
- // Turns the FileMode into the first half of open(2) flags
- //
- static OpenFlags ToUnixMode (FileMode mode)
- {
- switch (mode){
- case FileMode.CreateNew:
- return OpenFlags.O_CREAT | OpenFlags.O_EXCL;
-
- case FileMode.Create:
- return OpenFlags.O_CREAT | OpenFlags.O_TRUNC;
-
- case FileMode.OpenOrCreate:
- return OpenFlags.O_CREAT;
-
- case FileMode.Truncate:
- return OpenFlags.O_TRUNC;
-
- case FileMode.Append:
- return OpenFlags.O_APPEND;
- default:
- case FileMode.Open:
- return 0;
- }
- }
-
- //
- // Turns the MemoryMappedFileAccess into the second half of open(2) flags
- //
- static OpenFlags ToUnixMode (MemoryMappedFileAccess access)
- {
- switch (access){
- case MemoryMappedFileAccess.CopyOnWrite:
- case MemoryMappedFileAccess.ReadWriteExecute:
- case MemoryMappedFileAccess.ReadWrite:
- return OpenFlags.O_RDWR;
-
- case MemoryMappedFileAccess.Write:
- return OpenFlags.O_WRONLY;
-
- case MemoryMappedFileAccess.ReadExecute:
- case MemoryMappedFileAccess.Read:
- default:
- return OpenFlags.O_RDONLY;
- }
- }
-
- static MmapProts ToUnixProts (MemoryMappedFileAccess access)
- {
- switch (access){
- case MemoryMappedFileAccess.ReadWrite:
- return MmapProts.PROT_WRITE | MmapProts.PROT_READ;
-
- case MemoryMappedFileAccess.Write:
- return MmapProts.PROT_WRITE;
-
- case MemoryMappedFileAccess.CopyOnWrite:
- return MmapProts.PROT_WRITE | MmapProts.PROT_READ;
-
- case MemoryMappedFileAccess.ReadExecute:
- return MmapProts.PROT_EXEC;
-
- case MemoryMappedFileAccess.ReadWriteExecute:
- return MmapProts.PROT_WRITE | MmapProts.PROT_READ | MmapProts.PROT_EXEC;
-
- case MemoryMappedFileAccess.Read:
- default:
- return MmapProts.PROT_READ;
- }
- }
-
- internal static int Open (string path, FileMode mode, ref long capacity, MemoryMappedFileAccess access)
- {
- if (MonoUtil.IsUnix){
- Stat buf;
- if (Syscall.stat (path, out buf) == -1)
- UnixMarshal.ThrowExceptionForLastError ();
-
- if (capacity == 0) {
- // Special files such as FIFOs, sockets, and devices can
- // have a size of 0. Specifying a capacity for these
- // also makes little sense, so don't do the check if the
- // file is one of these.
- if (buf.st_size == 0 &&
- (buf.st_mode & (FilePermissions.S_IFCHR |
- FilePermissions.S_IFBLK |
- FilePermissions.S_IFIFO |
- FilePermissions.S_IFSOCK)) == 0) {
- throw new ArgumentException ("A positive capacity must be specified for a Memory Mapped File backed by an empty file.");
- }
-
- capacity = buf.st_size;
- } else if (capacity < buf.st_size) {
- throw new ArgumentException ("The capacity may not be smaller than the file size.");
- }
-
- int fd = Syscall.open (path, ToUnixMode (mode) | ToUnixMode (access), FilePermissions.DEFFILEMODE);
-
- if (fd == -1)
- UnixMarshal.ThrowExceptionForLastError ();
- return fd;
- }
-
- throw new NotImplementedException ();
- }
-
- internal static void CloseFD (int fd) {
- Syscall.close (fd);
- }
-
- internal static void Flush (int fd) {
- if (MonoUtil.IsUnix)
- Syscall.fsync (fd);
- else
- throw new NotImplementedException ("Not implemented on Windows");
-
- }
-
- static int pagesize;
-
- internal static unsafe void Map (int file_handle, long offset, ref long size, MemoryMappedFileAccess access, out IntPtr map_addr, out int offset_diff)
- {
- if (!MonoUtil.IsUnix)
- throw new NotImplementedException ("Not implemented on windows.");
-
- if (pagesize == 0)
- pagesize = Syscall.getpagesize ();
-
- Stat buf;
- Syscall.fstat (file_handle, out buf);
- long fsize = buf.st_size;
-
- if (size == 0 || size > fsize)
- size = fsize;
-
- // Align offset
- long real_offset = offset & ~(pagesize - 1);
-
- offset_diff = (int)(offset - real_offset);
-
- // FIXME: Need to determine the unix fd for the file, Handle is only
- // equal to it by accident
- //
- // The new API no longer uses FileStream everywhere, but exposes instead
- // the filename (with one exception), we could move this API to use
- // file descriptors instead of the FileStream plus its Handle.
- //
- map_addr = Syscall.mmap (IntPtr.Zero, (ulong) size,
- ToUnixProts (access),
- access == MemoryMappedFileAccess.CopyOnWrite ? MmapFlags.MAP_PRIVATE : MmapFlags.MAP_SHARED,
- file_handle, real_offset);
-
- if (map_addr == (IntPtr)(-1))
- throw new IOException ("mmap failed for fd#" + file_handle + "(" + offset + ", " + size + ")");
- }
-
- internal static bool Unmap (IntPtr map_addr, ulong map_size)
- {
- if (!MonoUtil.IsUnix)
- return false;
- return Syscall.munmap (map_addr, map_size) == 0;
- }
-
- static void ConfigureUnixFD (IntPtr handle, HandleInheritability h)
- {
- // TODO: Mono.Posix is lacking O_CLOEXEC definitions for fcntl.
- }
-
-
- [DllImport("kernel32", SetLastError = true)]
- static extern bool SetHandleInformation (IntPtr hObject, int dwMask, int dwFlags);
- static void ConfigureWindowsFD (IntPtr handle, HandleInheritability h)
- {
- SetHandleInformation (handle, 1 /* FLAG_INHERIT */, h == HandleInheritability.None ? 0 : 1);
- }
-
- internal static void ConfigureFD (IntPtr handle, HandleInheritability inheritability)
- {
- if (MonoUtil.IsUnix)
- ConfigureUnixFD (handle, inheritability);
- else
- ConfigureWindowsFD (handle, inheritability);
- }
-
- }
-#else
internal static class MemoryMapImpl {
- [DllImport ("libc")]
- static extern int fsync (int fd);
-
- [DllImport ("libc")]
- static extern int close (int fd);
-
- [DllImport ("libc")]
- static extern int fcntl (int fd, int cmd, int arg0);
-
- //XXX check if android off_t is 64bits or not. on iOS / darwin it is.
- [DllImport ("libc")]
- static extern IntPtr mmap (IntPtr addr, IntPtr len, int prot, int flags, int fd, long offset);
-
- [DllImport ("libc")]
- static extern int munmap (IntPtr addr, IntPtr size);
-
- [DllImport ("libc", SetLastError=true)]
- static extern int open (string path, int flags, int access);
-
-#if MONODROID
- [DllImport ("__Internal")]
- static extern int monodroid_getpagesize ();
-
- static int getpagesize ()
- {
- return monodroid_getpagesize ();
- }
-#else
- [DllImport ("libc")]
- static extern int getpagesize ();
-#endif
-
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- static extern long mono_filesize_from_path (string str);
+ static extern IntPtr OpenFileInternal (string path, FileMode mode, string mapName, out long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, out int error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- static extern long mono_filesize_from_fd (int fd);
+ static extern IntPtr OpenHandleInternal (IntPtr handle, string mapName, out long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, out int error);
- //Values valid on iOS/OSX and android ndk r6
- const int F_GETFD = 1;
- const int F_SETFD = 2;
- const int FD_CLOEXEC = 1;
- const int DEFFILEMODE = 0x666;
-
- const int O_RDONLY = 0x0;
- const int O_WRONLY = 0x1;
- const int O_RDWR = 0x2;
-
- const int PROT_READ = 0x1;
- const int PROT_WRITE = 0x2;
- const int PROT_EXEC = 0x4;
-
- const int MAP_PRIVATE = 0x2;
- const int MAP_SHARED = 0x1;
-
- const int EINVAL = 22;
-
-#if MONODROID
- const int O_CREAT = 0x040;
- const int O_TRUNC = 0x080;
- const int O_EXCL = 0x200;
-
- const int ENAMETOOLONG = 63;
-#else
- /* MONOTOUCH - usr/include/sys/fcntl.h */
- const int O_CREAT = 0x0200;
- const int O_TRUNC = 0x0400;
- const int O_EXCL = 0x0800;
-
- // usr/include/sys/errno.h
- const int ENAMETOOLONG = 63;
-#endif
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal extern static void CloseMapping (IntPtr handle);
- static int ToUnixMode (FileMode mode)
- {
- switch (mode) {
- case FileMode.CreateNew:
- return O_CREAT | O_EXCL;
-
- case FileMode.Create:
- return O_CREAT | O_TRUNC;
-
- case FileMode.OpenOrCreate:
- return O_CREAT;
-
- case FileMode.Truncate:
- return O_TRUNC;
- default:
- case FileMode.Open:
- return 0;
- }
- }
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal extern static void Flush (IntPtr file_handle);
- //
- // Turns the MemoryMappedFileAccess into the second half of open(2) flags
- //
- static int ToUnixMode (MemoryMappedFileAccess access)
- {
- switch (access) {
- case MemoryMappedFileAccess.CopyOnWrite:
- case MemoryMappedFileAccess.ReadWriteExecute:
- case MemoryMappedFileAccess.ReadWrite:
- return O_RDWR;
-
- case MemoryMappedFileAccess.Write:
- return O_WRONLY;
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal extern static void ConfigureHandleInheritability (IntPtr handle, HandleInheritability inheritability);
- case MemoryMappedFileAccess.ReadExecute:
- case MemoryMappedFileAccess.Read:
- default:
- return O_RDONLY;
- }
- }
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ internal extern static bool Unmap (IntPtr mmap_handle);
- static int ToUnixProts (MemoryMappedFileAccess access)
- {
- switch (access){
- case MemoryMappedFileAccess.ReadWrite:
- return PROT_WRITE | PROT_READ;
-
- case MemoryMappedFileAccess.Write:
- return PROT_WRITE;
-
- case MemoryMappedFileAccess.CopyOnWrite:
- return PROT_WRITE | PROT_READ;
-
- case MemoryMappedFileAccess.ReadExecute:
- return PROT_EXEC;
-
- case MemoryMappedFileAccess.ReadWriteExecute:
- return PROT_WRITE | PROT_READ | PROT_EXEC;
-
- case MemoryMappedFileAccess.Read:
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ extern static int MapInternal (IntPtr handle, long offset, ref long size, MemoryMappedFileAccess access, out IntPtr mmap_handle, out IntPtr base_address);
+
+ internal static void Map (IntPtr handle, long offset, ref long size, MemoryMappedFileAccess access, out IntPtr mmap_handle, out IntPtr base_address)
+ {
+ int error = MapInternal (handle, offset, ref size, access, out mmap_handle, out base_address);
+ if (error != 0)
+ throw CreateException (error, "<none>");
+ }
+
+ static Exception CreateException (int error, string path) {
+ switch (error){
+ case 1:
+ return new ArgumentException ("A positive capacity must be specified for a Memory Mapped File backed by an empty file.");
+ case 2:
+ return new ArgumentOutOfRangeException ("The capacity may not be smaller than the file size.");
+ case 3:
+ return new FileNotFoundException (path);
+ case 4:
+ return new IOException ("The file already exists");
+ case 5:
+ return new PathTooLongException ();
+ case 6:
+ return new IOException ("Could not open file");
+ case 7:
+ return new ArgumentException ("Capacity must be bigger than zero for non-file mappings");
+ case 8:
+ return new ArgumentException ("Invalid FileMode value.");
+ case 9:
+ return new IOException ("Could not map file");
default:
- return PROT_READ;
- }
- }
-
- static void ThrowErrorFromErrno (int errno)
- {
- switch (errno) {
- case EINVAL: throw new ArgumentException ();
- case ENAMETOOLONG: throw new PathTooLongException ();
- default: throw new IOException ("Failed with errno " + errno);
+ return new IOException ("Failed with unknown error code " + error);
}
}
- internal static int Open (string path, FileMode mode, ref long capacity, MemoryMappedFileAccess access)
- {
- long file_size = mono_filesize_from_path (path);
- if (file_size < 0)
- throw new FileNotFoundException (path);
-
- if (capacity > file_size)
- throw new ArgumentException ("capacity");
-
- int fd = open (path, ToUnixMode (mode) | ToUnixMode (access), DEFFILEMODE);
-
- if (fd == -1)
- ThrowErrorFromErrno (Marshal.GetLastWin32Error ());
- return fd;
- }
-
- internal static void CloseFD (int fd)
- {
- close (fd);
- }
-
- internal static void Flush (int fd)
- {
- fsync (fd);
- }
-
- internal static bool Unmap (IntPtr map_addr, ulong map_size)
- {
- return munmap (map_addr, (IntPtr)map_size) == 0;
- }
-
- static int pagesize;
-
- internal static unsafe void Map (int file_handle, long offset, ref long size, MemoryMappedFileAccess access, out IntPtr map_addr, out int offset_diff)
+ internal static IntPtr OpenFile (string path, FileMode mode, string mapName, out long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options)
{
- if (pagesize == 0)
- pagesize = getpagesize ();
-
- long fsize = mono_filesize_from_fd (file_handle);
- if (fsize < 0)
- throw new FileNotFoundException ();
-
- if (size == 0 || size > fsize)
- size = fsize;
-
- // Align offset
- long real_offset = offset & ~(pagesize - 1);
-
- offset_diff = (int)(offset - real_offset);
-
- map_addr = mmap (IntPtr.Zero, (IntPtr) size,
- ToUnixProts (access),
- access == MemoryMappedFileAccess.CopyOnWrite ? MAP_PRIVATE : MAP_SHARED,
- file_handle, real_offset);
-
- if (map_addr == (IntPtr)(-1))
- throw new IOException ("mmap failed for fd#" + file_handle + "(" + offset + ", " + size + ")");
+ int error = 0;
+ IntPtr res = OpenFileInternal (path, mode, mapName, out capacity, access, options, out error);
+ if (error != 0)
+ throw CreateException (error, path);
+ return res;
}
- internal static void ConfigureFD (IntPtr handle, HandleInheritability inheritability)
+ internal static IntPtr OpenHandle (IntPtr handle, string mapName, out long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options)
{
- int fd = (int)handle;
- int flags = fcntl (fd, F_GETFD, 0);
- if (inheritability == HandleInheritability.None)
- flags &= ~FD_CLOEXEC;
- else
- flags |= FD_CLOEXEC;
- fcntl (fd, F_SETFD, flags);
+ int error = 0;
+ IntPtr res = OpenHandleInternal (handle, mapName, out capacity, access, options, out error);
+ if (error != 0)
+ throw CreateException (error, "<none>");
+ return res;
}
-
}
-#endif
+
public class MemoryMappedFile : IDisposable {
MemoryMappedFileAccess fileAccess;
//
FileStream stream;
bool keepOpen;
- int unix_fd;
+ IntPtr handle;
public static MemoryMappedFile CreateFromFile (string path)
{
public static MemoryMappedFile CreateFromFile (string path, FileMode mode)
{
- return CreateFromFile (path, mode, null, 0, MemoryMappedFileAccess.ReadWrite);
+ long capacity = 0;
+ if (path == null)
+ throw new ArgumentNullException ("path");
+ if (path.Length == 0)
+ throw new ArgumentException ("path");
+ if (mode == FileMode.Append)
+ throw new ArgumentException ("mode");
+
+ IntPtr handle = MemoryMapImpl.OpenFile (path, mode, null, out capacity, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.DelayAllocatePages);
+
+ return new MemoryMappedFile () {
+ handle = handle,
+ fileAccess = MemoryMappedFileAccess.ReadWrite,
+ fileCapacity = capacity
+ };
}
public static MemoryMappedFile CreateFromFile (string path, FileMode mode, string mapName)
if (capacity < 0)
throw new ArgumentOutOfRangeException ("capacity");
- int fd = MemoryMapImpl.Open (path, mode, ref capacity, access);
+ IntPtr handle = MemoryMapImpl.OpenFile (path, mode, mapName, out capacity, access, MemoryMappedFileOptions.DelayAllocatePages);
return new MemoryMappedFile () {
- unix_fd = fd,
+ handle = handle,
fileAccess = access,
name = mapName,
fileCapacity = capacity
};
}
-#if MOBILE
- public static MemoryMappedFile CreateFromFile (FileStream fileStream, string mapName, long capacity, MemoryMappedFileAccess access,
- HandleInheritability inheritability,
- bool leaveOpen)
-#else
+
[MonoLimitation ("memoryMappedFileSecurity is currently ignored")]
public static MemoryMappedFile CreateFromFile (FileStream fileStream, string mapName, long capacity, MemoryMappedFileAccess access,
MemoryMappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability,
bool leaveOpen)
-#endif
{
if (fileStream == null)
throw new ArgumentNullException ("fileStream");
if ((!MonoUtil.IsUnix && capacity == 0 && fileStream.Length == 0) || (capacity > fileStream.Length))
throw new ArgumentException ("capacity");
- MemoryMapImpl.ConfigureFD (fileStream.Handle, inheritability);
+ IntPtr handle = MemoryMapImpl.OpenHandle (fileStream.Handle, mapName, out capacity, access, MemoryMappedFileOptions.DelayAllocatePages);
+
+ MemoryMapImpl.ConfigureHandleInheritability (handle, inheritability);
return new MemoryMappedFile () {
- stream = fileStream,
+ handle = handle,
fileAccess = access,
name = mapName,
fileCapacity = capacity,
+
+ stream = fileStream,
keepOpen = leaveOpen
};
}
- [MonoLimitation ("CreateNew requires that mapName be a file name on Unix")]
+
+ static MemoryMappedFile CoreShmCreate (string mapName, long capacity, MemoryMappedFileAccess access,
+ MemoryMappedFileOptions options, MemoryMappedFileSecurity memoryMappedFileSecurity,
+ HandleInheritability inheritability, FileMode mode)
+ {
+ if (mapName != null && mapName.Length == 0)
+ throw new ArgumentException ("mapName");
+ if (capacity < 0)
+ throw new ArgumentOutOfRangeException ("capacity");
+
+ IntPtr handle = MemoryMapImpl.OpenFile (null, mode, mapName, out capacity, access, options);
+
+ return new MemoryMappedFile () {
+ handle = handle,
+ fileAccess = access,
+ name = mapName,
+ fileCapacity = capacity
+ };
+ }
+
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile CreateNew (string mapName, long capacity)
{
-#if MOBILE
- return CreateNew (mapName, capacity, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.DelayAllocatePages, 0);
-#else
- return CreateNew (mapName, capacity, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.DelayAllocatePages, null, 0);
-#endif
+ return CreateNew (mapName, capacity, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.DelayAllocatePages, null, HandleInheritability.None);
}
- [MonoLimitation ("CreateNew requires that mapName be a file name on Unix")]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile CreateNew (string mapName, long capacity, MemoryMappedFileAccess access)
{
-#if MOBILE
- return CreateNew (mapName, capacity, access, MemoryMappedFileOptions.DelayAllocatePages, 0);
-#else
- return CreateNew (mapName, capacity, access, MemoryMappedFileOptions.DelayAllocatePages, null, 0);
-#endif
+ return CreateNew (mapName, capacity, access, MemoryMappedFileOptions.DelayAllocatePages, null, HandleInheritability.None);
}
-#if MOBILE
- public static MemoryMappedFile CreateNew (string mapName, long capacity, MemoryMappedFileAccess access,
- MemoryMappedFileOptions options,
- HandleInheritability handleInheritability)
-#else
- [MonoLimitation ("CreateNew requires that mapName be a file name on Unix; options and memoryMappedFileSecurity are ignored")]
+ [MonoLimitation ("Named mappings scope is process local; options and memoryMappedFileSecurity are ignored")]
public static MemoryMappedFile CreateNew (string mapName, long capacity, MemoryMappedFileAccess access,
MemoryMappedFileOptions options, MemoryMappedFileSecurity memoryMappedFileSecurity,
HandleInheritability inheritability)
-#endif
{
- return CreateFromFile (mapName, FileMode.CreateNew, mapName, capacity, access);
+ return CoreShmCreate (mapName, capacity, access, options, memoryMappedFileSecurity, inheritability, FileMode.CreateNew);
}
- [MonoLimitation ("CreateOrOpen requires that mapName be a file name on Unix")]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile CreateOrOpen (string mapName, long capacity)
{
return CreateOrOpen (mapName, capacity, MemoryMappedFileAccess.ReadWrite);
}
- [MonoLimitation ("CreateOrOpen requires that mapName be a file name on Unix")]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile CreateOrOpen (string mapName, long capacity, MemoryMappedFileAccess access)
{
- return CreateFromFile (mapName, FileMode.OpenOrCreate, mapName, capacity, access);
+ return CreateOrOpen (mapName, capacity, access, MemoryMappedFileOptions.DelayAllocatePages, null, HandleInheritability.None);
}
- [MonoTODO]
-#if MOBILE
- public static MemoryMappedFile CreateOrOpen (string mapName, long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, HandleInheritability inheritability)
-#else
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile CreateOrOpen (string mapName, long capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, MemoryMappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability)
-#endif
{
- throw new NotImplementedException ();
+ return CoreShmCreate (mapName, capacity, access, options, memoryMappedFileSecurity, inheritability, FileMode.OpenOrCreate);
}
- [MonoTODO]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile OpenExisting (string mapName)
{
throw new NotImplementedException ();
}
- [MonoTODO]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile OpenExisting (string mapName, MemoryMappedFileRights desiredAccessRights)
{
throw new NotImplementedException ();
}
- [MonoTODO]
+ [MonoLimitation ("Named mappings scope is process local")]
public static MemoryMappedFile OpenExisting (string mapName, MemoryMappedFileRights desiredAccessRights, HandleInheritability inheritability)
{
throw new NotImplementedException ();
public MemoryMappedViewStream CreateViewStream ()
{
- return CreateViewStream (0, 0);
+ return CreateViewStream (0, 0);//FIXME this is wrong
}
public MemoryMappedViewStream CreateViewStream (long offset, long size)
public MemoryMappedViewStream CreateViewStream (long offset, long size, MemoryMappedFileAccess access)
{
- return new MemoryMappedViewStream (stream != null ? (int)stream.Handle : unix_fd, offset, size, access);
+ return new MemoryMappedViewStream (handle, offset, size, access);
}
public MemoryMappedViewAccessor CreateViewAccessor ()
public MemoryMappedViewAccessor CreateViewAccessor (long offset, long size, MemoryMappedFileAccess access)
{
- int file_handle = stream != null ? (int) stream.Handle : unix_fd;
-
- return new MemoryMappedViewAccessor (file_handle, offset, size, access);
+ return new MemoryMappedViewAccessor (handle, offset, size, access);
}
MemoryMappedFile ()
if (stream != null){
if (keepOpen == false)
stream.Close ();
- unix_fd = -1;
stream = null;
}
- if (unix_fd != -1) {
- MemoryMapImpl.CloseFD (unix_fd);
- unix_fd = -1;
+ if (handle != IntPtr.Zero) {
+ MemoryMapImpl.CloseMapping (handle);
+ handle = IntPtr.Zero;
}
}
}
-#if !MOBILE
[MonoTODO]
public MemoryMappedFileSecurity GetAccessControl ()
{
{
throw new NotImplementedException ();
}
-#endif
[MonoTODO]
public SafeMemoryMappedFileHandle SafeMemoryMappedFileHandle {
namespace System.IO.MemoryMappedFiles
{
public sealed class MemoryMappedViewAccessor : UnmanagedMemoryAccessor, IDisposable {
- int file_handle;
- IntPtr mmap_addr;
- SafeMemoryMappedViewHandle handle;
+ IntPtr mmap_handle;
+ SafeMemoryMappedViewHandle safe_handle;
- internal MemoryMappedViewAccessor (int file_handle, long offset, long size, MemoryMappedFileAccess access)
+ internal MemoryMappedViewAccessor (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
{
- this.file_handle = file_handle;
- Create (offset, size, access);
+ Create (handle, offset, size, access);
}
static FileAccess ToFileAccess (MemoryMappedFileAccess access)
}
}
- unsafe void Create (long offset, long size, MemoryMappedFileAccess access)
+ unsafe void Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
{
- int offset_diff;
+ IntPtr base_address;
- MemoryMapImpl.Map (file_handle, offset, ref size, access, out mmap_addr, out offset_diff);
+ MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
+ safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size);
- handle = new SafeMemoryMappedViewHandle ((IntPtr)((long)mmap_addr + offset_diff), size);
- Initialize (handle, 0, size, ToFileAccess (access));
+ Initialize (safe_handle, 0, size, ToFileAccess (access));
}
public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle {
get {
- return handle;
+ return safe_handle;
}
}
public void Flush ()
{
- MemoryMapImpl.Flush (file_handle);
+ MemoryMapImpl.Flush (mmap_handle);
}
}
}
namespace System.IO.MemoryMappedFiles
{
public sealed class MemoryMappedViewStream : UnmanagedMemoryStream {
- IntPtr mmap_addr;
- ulong mmap_size;
+ IntPtr mmap_handle;
object monitor;
- int fd;
- internal MemoryMappedViewStream (int fd, long offset, long size, MemoryMappedFileAccess access) {
- this.fd = fd;
+ internal MemoryMappedViewStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) {
monitor = new Object ();
- CreateStream (fd, offset, size, access);
+ CreateStream (handle, offset, size, access);
}
public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle {
}
}
- unsafe void CreateStream (int fd, long offset, long size, MemoryMappedFileAccess access)
+ unsafe void CreateStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
{
- int offset_diff;
- mmap_size = (ulong) size;
- MemoryMapImpl.Map (fd, offset, ref size, access, out mmap_addr, out offset_diff);
- FileAccess faccess;
+ IntPtr base_address;
+
+ MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
+ FileAccess faccess;
switch (access) {
case MemoryMappedFileAccess.ReadWrite:
faccess = FileAccess.ReadWrite;
default:
throw new NotImplementedException ("access mode " + access + " not supported.");
}
- Initialize ((byte*)mmap_addr + offset_diff, size, size, faccess);
+ Initialize ((byte*)base_address, size, size, faccess);
}
protected override void Dispose (bool disposing)
{
base.Dispose (disposing);
lock (monitor) {
- if (mmap_addr != (IntPtr)(-1)) {
- MemoryMapImpl.Unmap (mmap_addr, mmap_size);
- mmap_addr = (IntPtr)(-1);
+ if (mmap_handle != (IntPtr)(-1)) {
+ MemoryMapImpl.Unmap (mmap_handle);
+ mmap_handle = (IntPtr)(-1);
}
}
}
public override void Flush ()
{
- MemoryMapImpl.Flush (fd);
+ MemoryMapImpl.Flush (mmap_handle);
}
}
}
Assert.IsTrue (thrown);
}
+ static int named_index;
+ static String MkNamedMapping ()
+ {
+ return "test-" + named_index++;
+ }
+
+
static string tempDir = Path.Combine (Path.GetTempPath (), typeof (MemoryMappedFileTest).FullName);
string fname;
}
}
+ [Test]
+ public void CreateNew ()
+ {
+ // This must succeed
+ MemoryMappedFile.CreateNew (Path.Combine (tempDir, "createNew.test"), 8192);
+ }
+
+ [Test]
+ [ExpectedException (typeof (IOException))]
+ public void CreateNew_OnExistingFile ()
+ {
+ // This must succeed
+ MemoryMappedFile.CreateNew (Path.Combine (tempDir, "createNew.test"), 8192);
+
+ // This should fail, the file exists
+ MemoryMappedFile.CreateNew (Path.Combine (tempDir, "createNew.test"), 8192);
+ }
+
+ // Call this twice, it should always work
+ [Test]
+ public void CreateOrOpen_Multiple ()
+ {
+ MemoryMappedFile.CreateOrOpen (Path.Combine (tempDir, "createOrOpen.test"), 8192);
+ MemoryMappedFile.CreateOrOpen (Path.Combine (tempDir, "createOrOpen.test"), 8192);
+ }
+
+ [Test]
+ [ExpectedException(typeof(ArgumentOutOfRangeException))]
+ public void CreateFromFileWithSmallerCapacityThanFile ()
+ {
+ var f = Path.Combine (tempDir, "8192-file");
+ File.WriteAllBytes (f, new byte [8192]);
+
+ // We are requesting fewer bytes to map.
+ MemoryMappedFile.CreateFromFile (f, FileMode.Open, "myMap", 4192);
+ }
+
[Test]
public void CreateFromFile_Null () {
AssertThrows<ArgumentNullException> (delegate () {
Assert.AreEqual ("Hello", s);
}
}
+
+
+ [Test]
+ public void NamedMappingToInvalidFile ()
+ {
+ var fileName = Path.Combine (tempDir, "temp_file_123");
+ if (File.Exists (fileName))
+ File.Delete (fileName);
+ var memoryMappedFile90 = MemoryMappedFile.CreateNew (fileName, 4194304, MemoryMappedFileAccess.ReadWrite);
+ memoryMappedFile90.CreateViewStream (4186112, 3222, MemoryMappedFileAccess.Write);
+ }
+
+ [Test]
+ public void CreateTheSameAreaTwiceShouldFail ()
+ {
+ var name = MkNamedMapping ();
+ using (var m0 = MemoryMappedFile.CreateNew(name, 4096, MemoryMappedFileAccess.ReadWrite)) {
+ try {
+ using (var m1 = MemoryMappedFile.CreateNew (name, 4096, MemoryMappedFileAccess.ReadWrite)) {
+ Assert.Fail ("Must fail");
+ }
+ } catch (IOException) {}
+ }
+ }
+
+ [Test]
+ public void MapAFileToAMemoryAreaShouldFail ()
+ {
+ var name = MkNamedMapping ();
+ using (var m0 = MemoryMappedFile.CreateNew(name, 4096, MemoryMappedFileAccess.ReadWrite)) {
+ try {
+ using (var m1 = MemoryMappedFile.CreateFromFile (fname, FileMode.OpenOrCreate, name)) {
+ Assert.Fail ("Must fail");
+ }
+ } catch (IOException) {}
+ }
+ }
+
+ [Test]
+ public void NamedMappingsShareMemoryArea ()
+ {
+ var name = MkNamedMapping ();
+ using (var m0 = MemoryMappedFile.CreateNew(name, 4096, MemoryMappedFileAccess.ReadWrite)) {
+ using (var m1 = MemoryMappedFile.CreateOrOpen (name, 4096, MemoryMappedFileAccess.ReadWrite)) {
+ using (MemoryMappedViewAccessor v0 = m0.CreateViewAccessor (), v1 = m1.CreateViewAccessor ()) {
+ v0.Write (10, 0x12345);
+ Assert.AreEqual (0x12345, v1.ReadInt32 (10));
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void NamedFileCanBeOpen ()
+ {
+ var name = MkNamedMapping ();
+ using (var sw = new FileStream (fname, FileMode.Open)) {
+ byte[] b = new byte[20];
+ for (int i = 0; i < 20; ++i)
+ b[i] = 0xFF;
+ sw.Write (b, 0, 20);
+ }
+
+ using (var m0 = MemoryMappedFile.CreateFromFile (fname, FileMode.Open, name)) {
+ using (var m1 = MemoryMappedFile.CreateOrOpen (name, 4096)) {
+ using (MemoryMappedViewAccessor v0 = m0.CreateViewAccessor (), v1 = m1.CreateViewAccessor ()) {
+ v0.Write (10, 0x11223344);
+ Assert.AreEqual (0x11223344, v1.ReadInt32 (10));
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void MapAtEdgeOfPage ()
+ {
+ using (var f = new FileStream (fname, FileMode.Open)) {
+ var b = new byte [4096];
+ for (int i = 0; i < 4096; ++i)
+ b[i] = 0xAA;
+ for (int i = 0; i < 2; ++i)
+ f.Write (b, 0, 4096);
+ }
+ var m0 = MemoryMappedFile.CreateFromFile (fname, FileMode.Open);
+ var v0 = m0.CreateViewAccessor (500, 4096);
+ var v1 = m0.CreateViewAccessor (0, 4096 * 2);
+ for (int i = 0; i < 4096; ++i) {
+ Assert.AreEqual (0xAA, v1.ReadByte (i + 500));
+ v0.Write (i, (byte)0xFF);
+ Assert.AreEqual (0xFF, v1.ReadByte (i + 500));
+ }
+ }
}
}
System.IO.MemoryMappedFiles/MemoryMappedFileAccess.cs
System.IO.MemoryMappedFiles/MemoryMappedFileOptions.cs
System.IO.MemoryMappedFiles/MemoryMappedFileRights.cs
+System.IO.MemoryMappedFiles/MemoryMappedFileSecurity.cs
System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs
System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs
Microsoft.Win32.SafeHandles/SafeMemoryMappedFileHandle.cs
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../WindowsBase/WindowsBase-net_4_5.csproj">\r
<Project>{8E6ED7D5-3B08-4A83-905E-8FB4CF0C160D}</Project>\r
- <Name>WindowsBase\WindowsBase-net_4_5</Name>\r
+ <Name>WindowsBase-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel.Web/System.ServiceModel.Web-net_4_5.csproj">\r
<Project>{BD4DF654-42EE-40E8-A3F4-8A80959E7879}</Project>\r
- <Name>System.ServiceModel.Web\System.ServiceModel.Web-net_4_5</Name>\r
+ <Name>System.ServiceModel.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Services.Client/System.Data.Services.Client-net_4_5.csproj">\r
<Project>{E9B87AE3-9A05-4146-83CC-082BE32D8EB2}</Project>\r
- <Name>System.Data.Services.Client\System.Data.Services.Client-net_4_5</Name>\r
+ <Name>System.Data.Services.Client-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel.Activation/System.ServiceModel.Activation-net_4_5.csproj">\r
<Project>{E537F31B-BCB7-4935-ABF3-DF2FAC48DCB3}</Project>\r
- <Name>System.ServiceModel.Activation\System.ServiceModel.Activation-net_4_5</Name>\r
+ <Name>System.ServiceModel.Activation-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
string str = sb.ToString ();
- if (str.IndexOf(".") == -1)
- return Int64.Parse (str);
- else
- return double.Parse (str);
+ if (str.IndexOf ('.') < 0)
+ return Int64.Parse (str, CultureInfo.InvariantCulture);
+
+ return double.Parse (str, CultureInfo.InvariantCulture);
}
private char ProcessEscapes(char c)
case '#':
string date = ReadString ('#');
- val = DateTime.Parse (date);
+ val = DateTime.Parse (date, CultureInfo.InvariantCulture);
return Token.DateLiteral;
case '\'':
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Data.Tds/Mono.Data.Tds-net_4_5.csproj">\r
<Project>{CB7949AC-5FA7-4FAB-893A-8FAF436BF514}</Project>\r
- <Name>Mono.Data.Tds\Mono.Data.Tds-net_4_5</Name>\r
+ <Name>Mono.Data.Tds-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Accessibility/Accessibility-net_4_5.csproj">\r
<Project>{FACE8136-C95A-4788-90B2-DB0ECF7A020A}</Project>\r
- <Name>Accessibility\Accessibility-net_4_5</Name>\r
+ <Name>Accessibility-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.DirectoryServices/System.DirectoryServices-net_4_5.csproj">\r
<Project>{EC4E43E7-63C0-4D64-8B7A-E00C097872A5}</Project>\r
- <Name>System.DirectoryServices\System.DirectoryServices-net_4_5</Name>\r
+ <Name>System.DirectoryServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Novell.Directory.Ldap/Novell.Directory.Ldap-net_4_5.csproj">\r
<Project>{E6070FFA-2CBA-4C24-99C1-63A4F5052821}</Project>\r
- <Name>Novell.Directory.Ldap\Novell.Directory.Ldap-net_4_5</Name>\r
+ <Name>Novell.Directory.Ldap-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
if (GDIPlus.Display == IntPtr.Zero) {
GDIPlus.Display = GDIPlus.XOpenDisplay (IntPtr.Zero);
if (GDIPlus.Display == IntPtr.Zero)
- throw new NotSupportedException ("Could not open display (X-Server required. Check you DISPLAY environment variable)");
+ throw new NotSupportedException ("Could not open display (X-Server required. Check your DISPLAY environment variable)");
}
if (hwnd == IntPtr.Zero) {
hwnd = GDIPlus.XRootWindow (GDIPlus.Display, GDIPlus.XDefaultScreen (GDIPlus.Display));
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IO.Compression/System.IO.Compression-net_4_5.csproj">\r
<Project>{BDF04E30-60D9-4279-A1DF-3291328A5AFD}</Project>\r
- <Name>System.IO.Compression\System.IO.Compression-net_4_5</Name>\r
+ <Name>System.IO.Compression-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Security/System.Security-net_4_5.csproj">\r
<Project>{B55E59B2-31CA-438B-ADB8-4B9A9A547830}</Project>\r
- <Name>System.Security\System.Security-net_4_5</Name>\r
+ <Name>System.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel/System.IdentityModel-net_4_5.csproj">\r
<Project>{F056C062-E467-4989-9366-440E8CD23C0C}</Project>\r
- <Name>System.IdentityModel\System.IdentityModel-net_4_5</Name>\r
+ <Name>System.IdentityModel-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Security/System.Security-net_4_5.csproj">\r
<Project>{B55E59B2-31CA-438B-ADB8-4B9A9A547830}</Project>\r
- <Name>System.Security\System.Security-net_4_5</Name>\r
+ <Name>System.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Json.Microsoft</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.CSharp/Microsoft.CSharp-net_4_5.csproj">\r
<Project>{D554618C-5D38-413A-82BA-7A70B6FC61A3}</Project>\r
- <Name>Microsoft.CSharp\Microsoft.CSharp-net_4_5</Name>\r
+ <Name>Microsoft.CSharp-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration.Install/System.Configuration.Install-net_4_5.csproj">\r
<Project>{E6E1740E-37DD-487C-8947-F1C0612D4738}</Project>\r
- <Name>System.Configuration.Install\System.Configuration.Install-net_4_5</Name>\r
+ <Name>System.Configuration.Install-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration.Install/System.Configuration.Install-net_4_5.csproj">\r
<Project>{E6E1740E-37DD-487C-8947-F1C0612D4738}</Project>\r
- <Name>System.Configuration.Install\System.Configuration.Install-net_4_5</Name>\r
+ <Name>System.Configuration.Install-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Messaging/Mono.Messaging-net_4_5.csproj">\r
<Project>{DDCC93B5-9425-4E9A-95DC-3400D0028508}</Project>\r
- <Name>Mono.Messaging\Mono.Messaging-net_4_5</Name>\r
+ <Name>Mono.Messaging-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Net.Http.Formatting</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http/System.Net.Http-net_4_5.csproj">\r
<Project>{E36C154B-A0AC-4721-B06A-AFE31D357CE5}</Project>\r
- <Name>System.Net.Http\System.Net.Http-net_4_5</Name>\r
+ <Name>System.Net.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http/System.Net.Http-net_4_5.csproj">\r
<Project>{E36C154B-A0AC-4721-B06A-AFE31D357CE5}</Project>\r
- <Name>System.Net.Http\System.Net.Http-net_4_5</Name>\r
+ <Name>System.Net.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
var stream = await wrequest.GetRequestStreamAsync ().ConfigureAwait (false);
await request.Content.CopyToAsync (stream).ConfigureAwait (false);
+ } else if (HttpMethod.Post.Equals (request.Method) || HttpMethod.Put.Equals (request.Method) || HttpMethod.Delete.Equals (request.Method)) {
+ // Explicitly set this to make sure we're sending a "Content-Length: 0" header.
+ // This fixes the issue that's been reported on the forums:
+ // http://forums.xamarin.com/discussion/17770/length-required-error-in-http-post-since-latest-release
+ wrequest.ContentLength = 0;
}
HttpWebResponse wresponse = null;
}
}
+ [Test]
+ public void Send_Complete_NoContent ()
+ {
+ foreach (var method in new HttpMethod[] { HttpMethod.Post, HttpMethod.Put, HttpMethod.Delete }) {
+ bool? failed = null;
+ var listener = CreateListener (l => {
+ try {
+ var request = l.Request;
+
+ Assert.AreEqual (2, request.Headers.Count, "#1");
+ Assert.AreEqual ("0", request.Headers ["Content-Length"], "#1b");
+ Assert.AreEqual (method.Method, request.HttpMethod, "#2");
+ failed = false;
+ } catch {
+ failed = true;
+ }
+ });
+
+ try {
+ var client = new HttpClient ();
+ var request = new HttpRequestMessage (method, LocalServer);
+ var response = client.SendAsync (request, HttpCompletionOption.ResponseHeadersRead).Result;
+
+ Assert.AreEqual ("", response.Content.ReadAsStringAsync ().Result, "#100");
+ Assert.AreEqual (HttpStatusCode.OK, response.StatusCode, "#101");
+ Assert.AreEqual (false, failed, "#102");
+ } finally {
+ listener.Close ();
+ }
+ }
+ }
+
[Test]
public void Send_Complete_Error ()
{
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Core</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Debugger</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Experimental</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Interfaces</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Linq</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Observable.Aliases</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Providers/System.Reactive.Providers-net_4_5.csproj">\r
<Project>{8D27108A-3DD4-46D7-917E-7833A3C4D479}</Project>\r
- <Name>System.Reactive.Providers\System.Reactive.Providers-net_4_5</Name>\r
+ <Name>System.Reactive.Providers-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.PlatformServices</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Providers</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Runtime.Remoting</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Windows.Forms</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Reactive.Windows.Threading</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../reactive.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Interfaces/System.Reactive.Interfaces-net_4_5.csproj">\r
<Project>{EFA38650-CE13-4BF3-993D-70B238DB1C9E}</Project>\r
- <Name>System.Reactive.Interfaces\System.Reactive.Interfaces-net_4_5</Name>\r
+ <Name>System.Reactive.Interfaces-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Core/System.Reactive.Core-net_4_5.csproj">\r
<Project>{4EF3C775-C516-4897-AB1D-DC9F8862A4D9}</Project>\r
- <Name>System.Reactive.Core\System.Reactive.Core-net_4_5</Name>\r
+ <Name>System.Reactive.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Reactive.Linq/System.Reactive.Linq-net_4_5.csproj">\r
<Project>{EE831E49-3F84-4A05-9417-A9C8BD36E164}</Project>\r
- <Name>System.Reactive.Linq\System.Reactive.Linq-net_4_5</Name>\r
+ <Name>System.Reactive.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../WindowsBase/WindowsBase-net_4_5.csproj">\r
<Project>{8E6ED7D5-3B08-4A83-905E-8FB4CF0C160D}</Project>\r
- <Name>WindowsBase\WindowsBase-net_4_5</Name>\r
+ <Name>WindowsBase-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap-net_4_5.csproj">\r
<Project>{B12AABBC-30D1-4885-BF3F-A53B970F68FB}</Project>\r
- <Name>System.Runtime.Serialization.Formatters.Soap\System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
try {
if (!threadPool.RunThread (new ThreadStart (reader.ProcessMessages)))
socket.Close ();
- } catch (Exception)
+ } catch (Exception e)
{
#if DEBUG
Console.WriteLine("Exception caught in TcpServerChannel.WaitForConnections during start process message: {0} {1}", e.GetType(), e.Message);
}
}
}
- catch (Exception)
+ catch (Exception e)
{
#if DEBUG
Console.WriteLine("Exception caught in TcpServerChannel.WaitForConnections, stop channel's thread : {0} {1}", e.GetType(), e.Message);
try {
work ();
}
- catch (Exception)
+ catch (Exception ex)
{
#if DEBUG
Console.WriteLine("The exception was caught during RemotingThreadPool.PoolThread - work: {0}, {1}", ex.GetType(), ex.Message);
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
}
#endif
- private bool IsAny() {
+ private bool IsAny ()
+ {
var xpa = type.GetCustomAttribute<XmlSchemaProviderAttribute> (true);
- return xpa.IsAny;
+
+ if (xpa != null)
+ return xpa.IsAny;
+
+ return false;
}
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-secxml-net_4_5.csproj">\r
<Project>{46F151F2-A422-4A1B-9D29-2E148CE73629}</Project>\r
- <Name>System\System-secxml-net_4_5</Name>\r
+ <Name>System-secxml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-bare-net_4_5.csproj">\r
<Project>{21FB091E-0F84-479E-AB16-6503D36852F9}</Project>\r
- <Name>System.XML\System.Xml-bare-net_4_5</Name>\r
+ <Name>System.Xml-bare-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-plainservice-net_4_5.csproj">\r
<Project>{0E3CFD7E-2F93-4B5B-B7FA-2AEBE0F850C0}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-plainservice-net_4_5</Name>\r
+ <Name>System.ServiceModel-plainservice-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
writer.WriteString (qn.Namespace);
} else if (TypeMap.IsDictionary (type)) {
writer.WriteAttributeString ("type", "array");
- var itemGetter = type.GetProperty ("Item");
- var keysGetter = type.GetProperty ("Keys");
- var argarr = new object [1];
- foreach (object o in (IEnumerable) keysGetter.GetValue (graph, null)) {
- writer.WriteStartElement ("item");
- writer.WriteAttributeString ("type", "object");
- // outputting a KeyValuePair as <Key .. /><Value ... />
- writer.WriteStartElement ("Key");
- WriteObjectContent (o, false, !(graph is Array && type.GetElementType () != typeof (object)));
- writer.WriteEndElement ();
- writer.WriteStartElement ("Value");
- argarr [0] = o;
- WriteObjectContent (itemGetter.GetValue (graph, argarr), false, !(graph is Array && type.GetElementType () != typeof (object)));
- writer.WriteEndElement ();
- writer.WriteEndElement ();
+ bool otn = !(graph is Array && type.GetElementType () != typeof (object));
+ var d = graph as IDictionary;
+ if (d != null) {
+ // Optimize the IDictionary case to avoid reflection
+ foreach (object k in d.Keys)
+ WriteItem (k, d [k], otn);
+ } else {
+ // we can't typecast to IDictionary<,> and can't use dynamic for iOS support
+ var itemGetter = GetDictionaryProperty (type, "Item");
+ var keysGetter = GetDictionaryProperty (type, "Keys");
+ var argarr = new object [1];
+ foreach (object o in (IEnumerable) keysGetter.GetValue (graph, null)) {
+ argarr [0] = o;
+ WriteItem (o, itemGetter.GetValue (graph, argarr), otn);
+ }
}
} else if (graph is Array || TypeMap.IsEnumerable (type)) {
writer.WriteAttributeString ("type", "array");
}
}
+ void WriteItem (object key, object value, bool outputTypeName)
+ {
+ writer.WriteStartElement ("item");
+ writer.WriteAttributeString ("type", "object");
+ // outputting a KeyValuePair as <Key .. /><Value ... />
+ writer.WriteStartElement ("Key");
+ WriteObjectContent (key, false, outputTypeName);
+ writer.WriteEndElement ();
+ writer.WriteStartElement ("Value");
+ WriteObjectContent (value, false, outputTypeName);
+ writer.WriteEndElement ();
+ writer.WriteEndElement ();
+ }
+
+ PropertyInfo GetDictionaryProperty (Type type, string propertyName)
+ {
+ var p = type.GetProperty (propertyName);
+ if (p != null)
+ return p;
+ // check explicit - but the generic names might differ, e.g. TKey,TValue vs T,V
+ var ap = type.GetProperties (BindingFlags.Instance | BindingFlags.NonPublic);
+ foreach (var cp in ap) {
+ if (!cp.Name.EndsWith (propertyName, StringComparison.Ordinal))
+ continue;
+ if (cp.Name.StartsWith ("System.Collections.Generic.IDictionary<", StringComparison.Ordinal))
+ return cp;
+ }
+ return null;
+ }
+
string FormatTypeName (Type type)
{
return String.Format ("{0}:#{1}", type.Name, type.Namespace);
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Extensions/System.Web.Extensions-net_4_5.csproj">\r
<Project>{74D281D8-F725-4D79-B218-2DFCCFD44FA2}</Project>\r
- <Name>System.Web.Extensions\System.Web.Extensions-net_4_5</Name>\r
+ <Name>System.Web.Extensions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel.Activation/System.ServiceModel.Activation-net_4_5.csproj">\r
<Project>{E537F31B-BCB7-4935-ABF3-DF2FAC48DCB3}</Project>\r
- <Name>System.ServiceModel.Activation\System.ServiceModel.Activation-net_4_5</Name>\r
+ <Name>System.ServiceModel.Activation-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
Assert.AreEqual (1, dict.Count, "#2");
Assert.AreEqual ("value", dict ["key"], "#3");
}
-
+
+ [Test]
+ public void ExplicitCustomDictionarySerialization ()
+ {
+ var dict = new MyExplicitDictionary<string,string> ();
+ dict.Add ("key", "value");
+ var serializer = new DataContractJsonSerializer (dict.GetType ());
+ var stream = new MemoryStream ();
+ serializer.WriteObject (stream, dict);
+ stream.Position = 0;
+
+ Assert.AreEqual ("[{\"Key\":\"key\",\"Value\":\"value\"}]", new StreamReader (stream).ReadToEnd (), "#1");
+ stream.Position = 0;
+ dict = (MyExplicitDictionary<string,string>) serializer.ReadObject (stream);
+ Assert.AreEqual (1, dict.Count, "#2");
+ Assert.AreEqual ("value", dict ["key"], "#3");
+ }
+
[Test]
public void Bug13485 ()
{
}
}
+public class MyExplicitDictionary<K, V> : IDictionary<K, V> {
+
+ Dictionary<K,V> dic = new Dictionary<K,V> ();
+
+ public void Add (K key, V value)
+ {
+ dic.Add (key, value);
+ }
+
+ public bool ContainsKey (K key)
+ {
+ return dic.ContainsKey (key);
+ }
+
+ ICollection<K> IDictionary<K, V>.Keys {
+ get { return dic.Keys; }
+ }
+
+ public bool Remove (K key)
+ {
+ return dic.Remove (key);
+ }
+
+ public bool TryGetValue (K key, out V value)
+ {
+ return dic.TryGetValue (key, out value);
+ }
+
+ ICollection<V> IDictionary<K, V>.Values {
+ get { return dic.Values; }
+ }
+
+ public V this [K key] {
+ get { return dic [key]; }
+ set { dic [key] = value; }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return dic.GetEnumerator ();
+ }
+
+ ICollection<KeyValuePair<K,V>> Coll {
+ get { return (ICollection<KeyValuePair<K,V>>) dic; }
+ }
+
+ public void Add (KeyValuePair<K, V> item)
+ {
+ Coll.Add (item);
+ }
+
+ public void Clear ()
+ {
+ dic.Clear ();
+ }
+
+ public bool Contains (KeyValuePair<K, V> item)
+ {
+ return Coll.Contains (item);
+ }
+
+ public void CopyTo (KeyValuePair<K, V> [] array, int arrayIndex)
+ {
+ Coll.CopyTo (array, arrayIndex);
+ }
+
+ public int Count {
+ get { return dic.Count; }
+ }
+
+ public bool IsReadOnly {
+ get { return Coll.IsReadOnly; }
+ }
+
+ public bool Remove (KeyValuePair<K, V> item)
+ {
+ return Coll.Remove (item);
+ }
+
+ public IEnumerator<KeyValuePair<K, V>> GetEnumerator ()
+ {
+ return Coll.GetEnumerator ();
+ }
+}
+
[DataContract]
public class Bug13485Type
{
[Category("NotWorking")]\r
public void ServiceDebugBehaviorTest () {\r
\r
- var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:8080/"));\r
+ var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
\r
Assert.AreEqual (true, host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageEnabled, "HttpHelpPageEnabled #1");\r
[Category ("NotWorking")]\r
public void WebHttpBehaviorTest1 () {\r
\r
- var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:8080/"));\r
+ var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
ServiceEndpoint basicHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new BasicHttpBinding (), "BasicHttpBinding");\r
\r
[Category("NotWorking")]\r
public void WebHttpBehaviorTest2 () {\r
\r
- var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:8080/"));\r
+ var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
MyWebHttpBehavior behavior = new MyWebHttpBehavior ();\r
behavior.ApplyDispatchBehaviorBegin += delegate {\r
[Test]\r
public void ServiceBaseUriTest () {\r
\r
- var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:8080/"));\r
+ var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
Assert.AreEqual (0, host.Description.Endpoints.Count, "no endpoints yet");\r
host.Open ();\r
Assert.AreEqual (1, host.Description.Endpoints.Count, "default endpoint after open");\r
\r
}\r
}\r
-#endif
\ No newline at end of file
+#endif\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Security/System.Security-net_4_5.csproj">\r
<Project>{B55E59B2-31CA-438B-ADB8-4B9A9A547830}</Project>\r
- <Name>System.Security\System.Security-net_4_5</Name>\r
+ <Name>System.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel/System.IdentityModel-net_4_5.csproj">\r
<Project>{F056C062-E467-4989-9366-440E8CD23C0C}</Project>\r
- <Name>System.IdentityModel\System.IdentityModel-net_4_5</Name>\r
+ <Name>System.IdentityModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel.Selectors/System.IdentityModel.Selectors-net_4_5.csproj">\r
<Project>{AB4F77BB-4340-4A79-9B66-EF5B4221E1F2}</Project>\r
- <Name>System.IdentityModel.Selectors\System.IdentityModel.Selectors-net_4_5</Name>\r
+ <Name>System.IdentityModel.Selectors-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Messaging/System.Messaging-net_4_5.csproj">\r
<Project>{1CBEC0FC-5926-42FA-A0CF-A19617FABB78}</Project>\r
- <Name>System.Messaging\System.Messaging-net_4_5</Name>\r
+ <Name>System.Messaging-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Services/System.Web.Services-net_4_5.csproj">\r
<Project>{251DB111-FEE1-4080-8411-0AD1CC9BA94B}</Project>\r
- <Name>System.Web.Services\System.Web.Services-net_4_5</Name>\r
+ <Name>System.Web.Services-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel.Activation/System.ServiceModel.Activation-net_4_5.csproj">\r
<Project>{E537F31B-BCB7-4935-ABF3-DF2FAC48DCB3}</Project>\r
- <Name>System.ServiceModel.Activation\System.ServiceModel.Activation-net_4_5</Name>\r
+ <Name>System.ServiceModel.Activation-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Security/System.Security-net_4_5.csproj">\r
<Project>{B55E59B2-31CA-438B-ADB8-4B9A9A547830}</Project>\r
- <Name>System.Security\System.Security-net_4_5</Name>\r
+ <Name>System.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel/System.IdentityModel-net_4_5.csproj">\r
<Project>{F056C062-E467-4989-9366-440E8CD23C0C}</Project>\r
- <Name>System.IdentityModel\System.IdentityModel-net_4_5</Name>\r
+ <Name>System.IdentityModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel.Selectors/System.IdentityModel.Selectors-net_4_5.csproj">\r
<Project>{AB4F77BB-4340-4A79-9B66-EF5B4221E1F2}</Project>\r
- <Name>System.IdentityModel.Selectors\System.IdentityModel.Selectors-net_4_5</Name>\r
+ <Name>System.IdentityModel.Selectors-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Transactions/System.Transactions-net_4_5.csproj">\r
<Project>{AF2BBF50-AB57-4CA1-8EF5-2B54C7418434}</Project>\r
- <Name>System.Transactions\System.Transactions-net_4_5</Name>\r
+ <Name>System.Transactions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Messaging/System.Messaging-net_4_5.csproj">\r
<Project>{1CBEC0FC-5926-42FA-A0CF-A19617FABB78}</Project>\r
- <Name>System.Messaging\System.Messaging-net_4_5</Name>\r
+ <Name>System.Messaging-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Services/System.Web.Services-net_4_5.csproj">\r
<Project>{251DB111-FEE1-4080-8411-0AD1CC9BA94B}</Project>\r
- <Name>System.Web.Services\System.Web.Services-net_4_5</Name>\r
+ <Name>System.Web.Services-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
Assert.AreEqual (MessageVersion.Soap12WSAddressing10, b.GetProperty<MessageVersion> (new BindingParameterCollection ()), "#6");
var host = new ServiceHost (typeof (MetadataExchange));
- host.AddServiceEndpoint (typeof (IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding (), CreateUri ("http://localhost:8080"));
+ host.AddServiceEndpoint (typeof (IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding (), CreateUri ("http://localhost:30158"));
host.Open ();
try {
// it still does not rewrite MessageVersion.None. It's rather likely ServiceMetadataExtension which does overwriting.
Assert.AreEqual(Uri.UriSchemeHttps, b.Scheme, "#8");
var host = new ServiceHost(typeof(MetadataExchange));
- host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpsBinding(), CreateUri("https://localhost:8080"));
+ host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpsBinding(), CreateUri("https://localhost:30158"));
host.Open();
try
{
[Test]
public void InitializeRuntime1 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "e1");
host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true });
[Test]
public void InitializeRuntime2 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
- host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:8080/mex_and_help") });
- host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:8080/mex_and_help");
+ host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:30158/mex_and_help") });
+ host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:30158/mex_and_help");
Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1");
[Test]
public void InitializeRuntime3 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
- host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:8080/mex") });
- host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:8080/help");
+ host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:30158/mex") });
+ host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:30158/help");
Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1");
[Test]
public void InitializeRuntime4 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
- host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:8080/mex") });
+ host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:30158/mex") });
host.Description.Behaviors.Remove<ServiceDebugBehavior> ();
Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1");
Assert.AreEqual (0, ed.FilterPriority, "FilterPriority");
EndpointAddress ea = ed.EndpointAddress;
- Assert.AreEqual (new Uri ("http://localhost:8080/mex"), ea.Uri, "Uri");
+ Assert.AreEqual (new Uri ("http://localhost:30158/mex"), ea.Uri, "Uri");
DispatchRuntime dr = ed.DispatchRuntime;
Assert.AreEqual (1, dr.Operations.Count, "Operations.Count");
[Test]
public void ServiceMetadataExtension1 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
- host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:8080/mex") });
+ host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:30158/mex") });
host.Description.Behaviors.Remove<ServiceDebugBehavior> ();
host.Open ();
[Test]
public void ServiceMetadataExtension2 () {
- using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:8080"))) {
+ using (ServiceHost host = new ServiceHost (typeof (MyService), new Uri ("http://localhost:30158"))) {
host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
- host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:8080/mex") });
+ host.Description.Behaviors.Add (new ServiceMetadataBehavior () { HttpGetEnabled = true, HttpGetUrl = new Uri ("http://localhost:30158/mex") });
host.Description.Behaviors.Remove<ServiceDebugBehavior> ();
ServiceMetadataExtension extension = new ServiceMetadataExtension ();
// free to change if MS implementation does not make
// sense.
DispatchRuntime r = new EndpointDispatcher (
- new EndpointAddress ("http://localhost:8080"), "IFoo", "urn:foo").DispatchRuntime;
+ new EndpointAddress ("http://localhost:30158"), "IFoo", "urn:foo").DispatchRuntime;
Assert.AreEqual (AuditLogLocation.Default,
r.SecurityAuditLogLocation, "#1");
void TestInstanceBehavior (MessageInspectBehavior b, string expected, Result actual, int invocations)
{
- ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158"));
try {
h.AddServiceEndpoint (typeof (IAllActions).FullName, new BasicHttpBinding (), "AllActions");
h.Description.Behaviors.Add (b);
Assert.AreEqual (typeof (AllActions), ed.DispatchRuntime.Type, "Type property: " + ed.ContractName);
}
}
- AllActionsProxy p = new AllActionsProxy (new BasicHttpBinding () { SendTimeout = TimeSpan.FromSeconds (5), ReceiveTimeout = TimeSpan.FromSeconds (5) }, new EndpointAddress ("http://localhost:8080/AllActions"));
+ AllActionsProxy p = new AllActionsProxy (new BasicHttpBinding () { SendTimeout = TimeSpan.FromSeconds (5), ReceiveTimeout = TimeSpan.FromSeconds (5) }, new EndpointAddress ("http://localhost:30158/AllActions"));
for (int i = 0; i < invocations; ++i)
p.Get (10);
var host = new ServiceHost (typeof (OneWayService));
host.AddServiceEndpoint (typeof (IOneWayService),
new BasicHttpBinding (),
- new Uri ("http://localhost:8080"));
+ new Uri ("http://localhost:30158"));
host.Open ();
try {
var cf = new ChannelFactory<IOneWayService> (
new BasicHttpBinding (),
- new EndpointAddress ("http://localhost:8080"));
+ new EndpointAddress ("http://localhost:30158"));
var ch = cf.CreateChannel ();
ch.GiveMessage ("test");
[Test]
public void ChannelDispatchers_NoDebug () {
- ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158"));
h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address");
ServiceDebugBehavior b = h.Description.Behaviors.Find<ServiceDebugBehavior> ();
Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#2");
EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter;
Assert.IsNotNull (filter, "#3");
- Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:8080/address")), "#4");
+ Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158/address")), "#4");
Assert.IsFalse (filter.IncludeHostNameInComparison, "#5");
Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#6");
} finally {
[Test]
public void ChannelDispatchers_WithDebug () {
- ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158"));
h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address");
ServiceMetadataBehavior b = new ServiceMetadataBehavior ();
b.HttpGetEnabled = true;
- b.HttpGetUrl = new Uri( "http://localhost:8080" );
+ b.HttpGetUrl = new Uri( "http://localhost:30158" );
h.Description.Behaviors.Add (b);
h.Open ();
Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#3");
EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter;
Assert.IsNotNull (filter, "#4");
- Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:8080")), "#5");
+ Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158")), "#5");
Assert.IsFalse (filter.IncludeHostNameInComparison, "#6");
Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#7");
h.Close ();
public void SpecificActionTest ()
{
//EndpointDispatcher d = new EndpointDispatcher(
- ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158"));
h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "address");
h.Open ();
[Test]
public void InitializeRuntimeBehaviors1 () {
HostState st = new HostState ();
- ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://localhost:30158"));
h.AddServiceEndpoint (typeof (SpecificAction2), new BasicHttpBinding (), "temp");
h.Description.Behaviors.Add (new MyServiceBehavior (st, h));
[Test]
public void InitializeRuntimeBehaviors2 () {
HostState st = new HostState ();
- ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:8080"));
+ ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158"));
h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "temp");
h.AddServiceEndpoint (typeof (Action2Interface), new BasicHttpBinding (), "temp2");
public void AddServiceEndpoint_Directly ()
{
var host = new ServiceHost (typeof (DummyService));
- var address = new EndpointAddress ("http://localhost:8080");
+ var address = new EndpointAddress ("http://localhost:30158");
var binding = new BasicHttpBinding ();
var contract = ContractDescription.GetContract (typeof (IDummyService));
host.AddServiceEndpoint (new ServiceEndpoint (contract, binding, address));
public void AddServiceEndpoint_Directly_NullBinding ()
{
var host = new ServiceHost (typeof (DummyService));
- var address = new EndpointAddress ("http://localhost:8080");
+ var address = new EndpointAddress ("http://localhost:30158");
var contract = ContractDescription.GetContract (typeof (IDummyService));
host.AddServiceEndpoint (new ServiceEndpoint (contract, null, address));
}
public void AddServiceEndpoint_Directly_ContractMismatch ()
{
var host = new ServiceHost (typeof (DummyService));
- var address = new EndpointAddress ("http://localhost:8080");
+ var address = new EndpointAddress ("http://localhost:30158");
var binding = new BasicHttpBinding ();
var contract = ContractDescription.GetContract (typeof (INotImplementedService));
host.AddServiceEndpoint (new ServiceEndpoint (contract, binding, address));
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration.Install/System.Configuration.Install-net_4_5.csproj">\r
<Project>{E6E1740E-37DD-487C-8947-F1C0612D4738}</Project>\r
- <Name>System.Configuration.Install\System.Configuration.Install-net_4_5</Name>\r
+ <Name>System.Configuration.Install-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Extensions/System.Web.Extensions-net_4_5.csproj">\r
<Project>{74D281D8-F725-4D79-B218-2DFCCFD44FA2}</Project>\r
- <Name>System.Web.Extensions\System.Web.Extensions-net_4_5</Name>\r
+ <Name>System.Web.Extensions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Abstractions/System.Web.Abstractions-net_4_5.csproj">\r
<Project>{94BD3939-6937-47AA-86CF-5C3E4C59E272}</Project>\r
- <Name>System.Web.Abstractions\System.Web.Abstractions-net_4_5</Name>\r
+ <Name>System.Web.Abstractions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Routing/System.Web.Routing-net_4_5.csproj">\r
<Project>{A28F2A14-901C-452C-82B6-75ECE5C7E714}</Project>\r
- <Name>System.Web.Routing\System.Web.Routing-net_4_5</Name>\r
+ <Name>System.Web.Routing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Design/System.Design-net_4_5.csproj">\r
<Project>{D4E6A482-761B-4B41-8B63-C930CA84D268}</Project>\r
- <Name>System.Design\System.Design-net_4_5</Name>\r
+ <Name>System.Design-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Services/System.Web.Services-net_4_5.csproj">\r
<Project>{251DB111-FEE1-4080-8411-0AD1CC9BA94B}</Project>\r
- <Name>System.Web.Services\System.Web.Services-net_4_5</Name>\r
+ <Name>System.Web.Services-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
return c.ConvertFrom (obj);
}
- /*
- * Take care of the special case whereas in JSON an empty string ("") really means
- * an empty value
- * (see: https://bugzilla.novell.com/show_bug.cgi?id=328836)
- */
- if ((targetType.IsGenericType) && (targetType.GetGenericTypeDefinition() == typeof(Nullable<>)))
- {
- string s = obj as String;
- if (String.IsNullOrEmpty(s))
+ if ((targetType.IsGenericType) && (targetType.GetGenericTypeDefinition () == typeof (Nullable<>))) {
+ if (obj is String) {
+ /*
+ * Take care of the special case whereas in JSON an empty string ("") really means
+ * an empty value
+ * (see: https://bugzilla.novell.com/show_bug.cgi?id=328836)
+ */
+ if(String.IsNullOrEmpty ((String)obj))
return null;
+ } else if (c.CanConvertFrom (typeof (string))) {
+ TypeConverter objConverter = TypeDescriptor.GetConverter (obj);
+ string s = objConverter.ConvertToInvariantString (obj);
+ return c.ConvertFromInvariantString (s);
+ }
}
return Convert.ChangeType (obj, targetType);
var ret2vad = (IDictionary<string,object>) ret2va [0];
Assert.AreEqual ("subval", ret2vad ["subkey"], "#2.4");
}
+
+ class ClassWithNullableEnum
+ {
+ public MyEnum? Value { get; set; }
+ }
+
+ [Test]
+ public void DeserializeNullableEnum ()
+ {
+ var jsonValues = new Dictionary<string, MyEnum?> {
+ { "{\"Value\":0}", MyEnum.AAA},
+ { "{\"Value\":\"0\"}", MyEnum.AAA},
+ { "{\"Value\":null}", null}
+ };
+
+ var ser = new JavaScriptSerializer ();
+
+ foreach (var kv in jsonValues)
+ {
+ var obj = ser.Deserialize<ClassWithNullableEnum> (kv.Key);
+ Assert.AreEqual (kv.Value, obj.Value);
+ }
+ }
}
}
<AssemblyName>System.Web.Http.SelfHost</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http/System.Net.Http-net_4_5.csproj">\r
<Project>{E36C154B-A0AC-4721-B06A-AFE31D357CE5}</Project>\r
- <Name>System.Net.Http\System.Net.Http-net_4_5</Name>\r
+ <Name>System.Net.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel/System.IdentityModel-net_4_5.csproj">\r
<Project>{F056C062-E467-4989-9366-440E8CD23C0C}</Project>\r
- <Name>System.IdentityModel\System.IdentityModel-net_4_5</Name>\r
+ <Name>System.IdentityModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Http/System.Web.Http-net_4_5.csproj">\r
<Project>{2EFF8684-99DB-4DD6-B3BC-7E7AA42A15FC}</Project>\r
- <Name>System.Web.Http\System.Web.Http-net_4_5</Name>\r
+ <Name>System.Web.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http.Formatting/System.Net.Http.Formatting-net_4_5.csproj">\r
<Project>{BFBE5444-4F21-45CF-929E-C8FBEF302F5E}</Project>\r
- <Name>System.Net.Http.Formatting\System.Net.Http.Formatting-net_4_5</Name>\r
+ <Name>System.Net.Http.Formatting-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.Http.WebHost</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http/System.Net.Http-net_4_5.csproj">\r
<Project>{E36C154B-A0AC-4721-B06A-AFE31D357CE5}</Project>\r
- <Name>System.Net.Http\System.Net.Http-net_4_5</Name>\r
+ <Name>System.Net.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.IdentityModel/System.IdentityModel-net_4_5.csproj">\r
<Project>{F056C062-E467-4989-9366-440E8CD23C0C}</Project>\r
- <Name>System.IdentityModel\System.IdentityModel-net_4_5</Name>\r
+ <Name>System.IdentityModel-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Http/System.Web.Http-net_4_5.csproj">\r
<Project>{2EFF8684-99DB-4DD6-B3BC-7E7AA42A15FC}</Project>\r
- <Name>System.Web.Http\System.Web.Http-net_4_5</Name>\r
+ <Name>System.Web.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http.Formatting/System.Net.Http.Formatting-net_4_5.csproj">\r
<Project>{BFBE5444-4F21-45CF-929E-C8FBEF302F5E}</Project>\r
- <Name>System.Net.Http.Formatting\System.Net.Http.Formatting-net_4_5</Name>\r
+ <Name>System.Net.Http.Formatting-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Routing/System.Web.Routing-net_4_5.csproj">\r
<Project>{A28F2A14-901C-452C-82B6-75ECE5C7E714}</Project>\r
- <Name>System.Web.Routing\System.Web.Routing-net_4_5</Name>\r
+ <Name>System.Web.Routing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Web.Infrastructure/Microsoft.Web.Infrastructure-net_4_5.csproj">\r
<Project>{50DC9191-2D18-4EDB-A929-4ECAB7981A1C}</Project>\r
- <Name>Microsoft.Web.Infrastructure\Microsoft.Web.Infrastructure-net_4_5</Name>\r
+ <Name>Microsoft.Web.Infrastructure-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.Http</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http/System.Net.Http-net_4_5.csproj">\r
<Project>{E36C154B-A0AC-4721-B06A-AFE31D357CE5}</Project>\r
- <Name>System.Net.Http\System.Net.Http-net_4_5</Name>\r
+ <Name>System.Net.Http-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Net.Http.Formatting/System.Net.Http.Formatting-net_4_5.csproj">\r
<Project>{BFBE5444-4F21-45CF-929E-C8FBEF302F5E}</Project>\r
- <Name>System.Net.Http.Formatting\System.Net.Http.Formatting-net_4_5</Name>\r
+ <Name>System.Net.Http.Formatting-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Caching/System.Runtime.Caching-net_4_5.csproj">\r
<Project>{CB3E9225-3DFF-4930-BFED-1E8AE5319C32}</Project>\r
- <Name>System.Runtime.Caching\System.Runtime.Caching-net_4_5</Name>\r
+ <Name>System.Runtime.Caching-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj">\r
<Project>{08FF4C26-9C12-433D-AE90-43370046387A}</Project>\r
- <Name>System.Runtime.Serialization\System.Runtime.Serialization-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>dummy-System.Web.Mvc</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Abstractions/System.Web.Abstractions-net_4_5.csproj">\r
<Project>{94BD3939-6937-47AA-86CF-5C3E4C59E272}</Project>\r
- <Name>System.Web.Abstractions\System.Web.Abstractions-net_4_5</Name>\r
+ <Name>System.Web.Abstractions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Routing/System.Web.Routing-net_4_5.csproj">\r
<Project>{A28F2A14-901C-452C-82B6-75ECE5C7E714}</Project>\r
- <Name>System.Web.Routing\System.Web.Routing-net_4_5</Name>\r
+ <Name>System.Web.Routing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Extensions/System.Web.Extensions-net_4_5.csproj">\r
<Project>{74D281D8-F725-4D79-B218-2DFCCFD44FA2}</Project>\r
- <Name>System.Web.Extensions\System.Web.Extensions-net_4_5</Name>\r
+ <Name>System.Web.Extensions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.Mvc</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Web.Infrastructure/Microsoft.Web.Infrastructure-net_4_5.csproj">\r
<Project>{50DC9191-2D18-4EDB-A929-4ECAB7981A1C}</Project>\r
- <Name>Microsoft.Web.Infrastructure\Microsoft.Web.Infrastructure-net_4_5</Name>\r
+ <Name>Microsoft.Web.Infrastructure-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Abstractions/System.Web.Abstractions-net_4_5.csproj">\r
<Project>{94BD3939-6937-47AA-86CF-5C3E4C59E272}</Project>\r
- <Name>System.Web.Abstractions\System.Web.Abstractions-net_4_5</Name>\r
+ <Name>System.Web.Abstractions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Routing/System.Web.Routing-net_4_5.csproj">\r
<Project>{A28F2A14-901C-452C-82B6-75ECE5C7E714}</Project>\r
- <Name>System.Web.Routing\System.Web.Routing-net_4_5</Name>\r
+ <Name>System.Web.Routing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Extensions/System.Web.Extensions-net_4_5.csproj">\r
<Project>{74D281D8-F725-4D79-B218-2DFCCFD44FA2}</Project>\r
- <Name>System.Web.Extensions\System.Web.Extensions-net_4_5</Name>\r
+ <Name>System.Web.Extensions-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Caching/System.Runtime.Caching-net_4_5.csproj">\r
<Project>{CB3E9225-3DFF-4930-BFED-1E8AE5319C32}</Project>\r
- <Name>System.Runtime.Caching\System.Runtime.Caching-net_4_5</Name>\r
+ <Name>System.Runtime.Caching-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Razor/System.Web.Razor-net_4_5.csproj">\r
<Project>{FF61AB24-4492-47FA-B4D3-8D961113DD08}</Project>\r
- <Name>System.Web.Razor\System.Web.Razor-net_4_5</Name>\r
+ <Name>System.Web.Razor-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.WebPages.Razor/System.Web.WebPages.Razor-net_4_5.csproj">\r
<Project>{4E601800-644F-49B2-B1C9-60D3489AAC38}</Project>\r
- <Name>System.Web.WebPages.Razor\System.Web.WebPages.Razor-net_4_5</Name>\r
+ <Name>System.Web.WebPages.Razor-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.WebPages/System.Web.WebPages-net_4_5.csproj">\r
<Project>{FFDF7B0A-BD62-4E39-8A80-A42B560149C5}</Project>\r
- <Name>System.Web.WebPages\System.Web.WebPages-net_4_5</Name>\r
+ <Name>System.Web.WebPages-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.Razor</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Abstractions/System.Web.Abstractions-net_4_5.csproj">\r
<Project>{94BD3939-6937-47AA-86CF-5C3E4C59E272}</Project>\r
- <Name>System.Web.Abstractions\System.Web.Abstractions-net_4_5</Name>\r
+ <Name>System.Web.Abstractions-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-plainweb-net_4_5.csproj">\r
<Project>{21892B00-1C9F-44F3-AE4C-A6A9A210CEC7}</Project>\r
- <Name>System.Web\System.Web-plainweb-net_4_5</Name>\r
+ <Name>System.Web-plainweb-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.WebPages.Deployment</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Web.Infrastructure/Microsoft.Web.Infrastructure-net_4_5.csproj">\r
<Project>{50DC9191-2D18-4EDB-A929-4ECAB7981A1C}</Project>\r
- <Name>Microsoft.Web.Infrastructure\Microsoft.Web.Infrastructure-net_4_5</Name>\r
+ <Name>Microsoft.Web.Infrastructure-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.WebPages.Razor</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.WebPages/System.Web.WebPages-net_4_5.csproj">\r
<Project>{FFDF7B0A-BD62-4E39-8A80-A42B560149C5}</Project>\r
- <Name>System.Web.WebPages\System.Web.WebPages-net_4_5</Name>\r
+ <Name>System.Web.WebPages-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Razor/System.Web.Razor-net_4_5.csproj">\r
<Project>{FF61AB24-4492-47FA-B4D3-8D961113DD08}</Project>\r
- <Name>System.Web.Razor\System.Web.Razor-net_4_5</Name>\r
+ <Name>System.Web.Razor-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<AssemblyName>System.Web.WebPages</AssemblyName>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
+ </PropertyGroup>\r
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ <DelaySign>true</DelaySign>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>../winfx.pub</AssemblyOriginatorKeyFile>
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.CSharp/Microsoft.CSharp-net_4_5.csproj">\r
<Project>{D554618C-5D38-413A-82BA-7A70B6FC61A3}</Project>\r
- <Name>Microsoft.CSharp\Microsoft.CSharp-net_4_5</Name>\r
+ <Name>Microsoft.CSharp-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Microsoft.Web.Infrastructure/Microsoft.Web.Infrastructure-net_4_5.csproj">\r
<Project>{50DC9191-2D18-4EDB-A929-4ECAB7981A1C}</Project>\r
- <Name>Microsoft.Web.Infrastructure\Microsoft.Web.Infrastructure-net_4_5</Name>\r
+ <Name>Microsoft.Web.Infrastructure-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations-net_4_5.csproj">\r
<Project>{63EC4158-FFAC-4867-8003-CF6054C8DF0B}</Project>\r
- <Name>System.ComponentModel.DataAnnotations\System.ComponentModel.DataAnnotations-net_4_5</Name>\r
+ <Name>System.ComponentModel.DataAnnotations-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data.Linq/System.Data.Linq-net_4_5.csproj">\r
<Project>{8AC5471F-9515-4D01-87B9-7974F2CBD6F1}</Project>\r
- <Name>System.Data.Linq\System.Data.Linq-net_4_5</Name>\r
+ <Name>System.Data.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.WebPages.Deployment/System.Web.WebPages.Deployment-net_4_5.csproj">\r
<Project>{CFBE1EF0-4B98-4752-9F6A-4D61CF9DA0EF}</Project>\r
- <Name>System.Web.WebPages.Deployment\System.Web.WebPages.Deployment-net_4_5</Name>\r
+ <Name>System.Web.WebPages.Deployment-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Razor/System.Web.Razor-net_4_5.csproj">\r
<Project>{FF61AB24-4492-47FA-B4D3-8D961113DD08}</Project>\r
- <Name>System.Web.Razor\System.Web.Razor-net_4_5</Name>\r
+ <Name>System.Web.Razor-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap-net_4_5.csproj">\r
<Project>{B12AABBC-30D1-4885-BF3F-A53B970F68FB}</Project>\r
- <Name>System.Runtime.Serialization.Formatters.Soap\System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Data.Sqlite/Mono.Data.Sqlite-net_4_5.csproj">\r
<Project>{41476FBD-C1CB-4B3C-8078-3281EB1E0EAB}</Project>\r
- <Name>Mono.Data.Sqlite\Mono.Data.Sqlite-net_4_5</Name>\r
+ <Name>Mono.Data.Sqlite-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.Services/System.Web.Services-net_4_5.csproj">\r
<Project>{251DB111-FEE1-4080-8411-0AD1CC9BA94B}</Project>\r
- <Name>System.Web.Services\System.Web.Services-net_4_5</Name>\r
+ <Name>System.Web.Services-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.EnterpriseServices/System.EnterpriseServices-net_4_5.csproj">\r
<Project>{773D8BA7-9A88-49AC-81C9-740436270588}</Project>\r
- <Name>System.EnterpriseServices\System.EnterpriseServices-net_4_5</Name>\r
+ <Name>System.EnterpriseServices-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap-net_4_5.csproj">\r
<Project>{B12AABBC-30D1-4885-BF3F-A53B970F68FB}</Project>\r
- <Name>System.Runtime.Serialization.Formatters.Soap\System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
+ <Name>System.Runtime.Serialization.Formatters.Soap-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Mono.Data.Sqlite/Mono.Data.Sqlite-net_4_5.csproj">\r
<Project>{41476FBD-C1CB-4B3C-8078-3281EB1E0EAB}</Project>\r
- <Name>Mono.Data.Sqlite\Mono.Data.Sqlite-net_4_5</Name>\r
+ <Name>Mono.Data.Sqlite-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web.ApplicationServices/System.Web.ApplicationServices-net_4_5.csproj">\r
<Project>{B4E6806D-1B38-4CEE-8ADB-2D0A4D1AF25F}</Project>\r
- <Name>System.Web.ApplicationServices\System.Web.ApplicationServices-net_4_5</Name>\r
+ <Name>System.Web.ApplicationServices-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
}
[MonoTODO ("Not implemented")]
- public void AddCacheDependency (CacheDependency[] dependencies)
+ public void AddCacheDependency (params CacheDependency[] dependencies)
{
throw new NotImplementedException ();
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Drawing/System.Drawing-net_4_5.csproj">\r
<Project>{CB1CB976-AA54-4553-B0E7-05665B199EC4}</Project>\r
- <Name>System.Drawing\System.Drawing-net_4_5</Name>\r
+ <Name>System.Drawing-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../Managed.Windows.Forms/System.Windows.Forms-net_4_5.csproj">\r
<Project>{B102F27C-1A07-487F-BA5B-D5155D201112}</Project>\r
- <Name>Managed.Windows.Forms\System.Windows.Forms-net_4_5</Name>\r
+ <Name>System.Windows.Forms-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
$(xmlfiles_files:%=Test/XmlFiles/%) \
$(nist_dom_files:%=Test/System.Xml/nist_dom/%)
-System.Xml.XPath/Parser.cs: System.Xml.XPath/Parser.jay $(topdir)/jay/skeleton.cs
- (cd System.Xml.XPath; $(topdir)/../jay/jay -ct < $(topdir)/../jay/skeleton.cs Parser.jay >> Parser.cs)
+System.Xml.XPath/$(PROFILE)_Parser.cs: System.Xml.XPath/Parser.jay $(topdir)/jay/skeleton.cs
+ (cd System.Xml.XPath; $(topdir)/../jay/jay -ct < $(topdir)/../jay/skeleton.cs Parser.jay >> $(PROFILE)_Parser.cs)
Mono.Xml.Xsl/$(PROFILE)_PatternParser.jay: System.Xml.XPath/Parser.jay $(topdir)/jay/skeleton.cs
sed "s/\%start Expr/\%start Pattern/" $< >$@
cat $< >>$@
ifneq (moonlight_raw, $(PROFILE))
-BUILT_SOURCES = System.Xml.XPath/Parser.cs \
+BUILT_SOURCES = System.Xml.XPath/$(PROFILE)_Parser.cs \
Mono.Xml.Xsl/$(PROFILE)_PatternParser.cs \
Mono.Xml.Xsl/$(PROFILE)_PatternTokenizer.cs
CLEAN_FILES = Test/XmlFiles/xsl/result.xml \
- System.Xml.XPath/Parser.cs \
+ System.Xml.XPath/$(PROFILE)_Parser.cs \
Mono.Xml.Xsl/$(PROFILE)_PatternParser.cs \
Mono.Xml.Xsl/$(PROFILE)_PatternTokenizer.cs
endif
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-bare-net_4_5.csproj">\r
<Project>{91CDF14E-F60F-4AB7-BC9D-5CBD7E669076}</Project>\r
- <Name>System\System-bare-net_4_5</Name>\r
+ <Name>System-bare-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-bare-net_4_5.csproj">\r
<Project>{91CDF14E-F60F-4AB7-BC9D-5CBD7E669076}</Project>\r
- <Name>System\System-bare-net_4_5</Name>\r
+ <Name>System-bare-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
-/Parser.cs
+/*_Parser.cs
Test/XmlFiles/*.xml \
Test/XmlFiles/*.xaml
-VALID_PROFILE := $(filter 4, $(FRAMEWORK_VERSION_MAJOR))
+VALID_PROFILE := $(filter 4 monodroid monotouch, $(FRAMEWORK_VERSION_MAJOR))
ifndef VALID_PROFILE
LIBRARY_NAME = dummy-System.Xaml.dll
NO_INSTALL = yes
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class AmbientAttribute : Attribute
{
}
{
[MarkupExtensionReturnType (typeof (Array))]
[ContentProperty ("Items")]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationFramework_3_5)]
-#endif
public class ArrayExtension : MarkupExtension
{
public ArrayExtension ()
public Type Type { get; set; }
IList items;
-#if !NET_2_1
[DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
-#endif
public IList Items {
get { return items; }
}
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class ConstructorArgumentAttribute : Attribute
{
public ConstructorArgumentAttribute (string argumentName)
// member regardless of this attribute.
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class ContentPropertyAttribute : Attribute
{
public ContentPropertyAttribute ()
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class ContentWrapperAttribute : Attribute
{
public ContentWrapperAttribute (Type contentWrapper)
}
public Type ContentWrapper { get; private set; }
-#if !NET_2_1
+
+#if !__MOBILE__
public override Object TypeId {
get { return this; }
}
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public class DateTimeValueSerializer : ValueSerializer
{
const DateTimeStyles styles = DateTimeStyles.RoundtripKind | DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite;
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class DependsOnAttribute : Attribute
{
public DependsOnAttribute (string name)
public string Name { get; private set; }
-#if !NET_2_1
+#if !__MOBILE__
// really? I doubt it should be overriden.
public override Object TypeId {
get { return this; }
namespace System.Windows.Markup
{
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class DictionaryKeyPropertyAttribute : Attribute
{
public DictionaryKeyPropertyAttribute (string name)
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public interface IComponentConnector
{
void Connect (int connectionId, object target);
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public interface INameScope
{
object FindName (string name);
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationFramework_3_5)]
-#endif
public interface IProvideValueTarget
{
object TargetObject { get; }
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationCore_3_5)]
-#endif
public interface IUriContext
{
Uri BaseUri { get; set; }
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public interface IValueSerializerContext : ITypeDescriptorContext, IServiceProvider
{
ValueSerializer GetValueSerializerFor (PropertyDescriptor descriptor);
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public interface IXamlTypeResolver
{
Type Resolve (string qualifiedTypeName);
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public abstract class MarkupExtension
{
public abstract object ProvideValue (IServiceProvider serviceProvider);
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class NameScopePropertyAttribute : Attribute
{
public NameScopePropertyAttribute (string name)
namespace System.Windows.Markup
{
[MarkupExtensionReturnType (typeof (Object))]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationFramework_3_5)]
-#endif
public class NullExtension : MarkupExtension
{
public override Object ProvideValue (IServiceProvider serviceProvider)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Assembly)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class RootNamespaceAttribute : Attribute
{
public RootNamespaceAttribute (string nameSpace)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class RuntimeNamePropertyAttribute : Attribute
{
public RuntimeNamePropertyAttribute (string name)
{
[MarkupExtensionReturnType (typeof (object))]
[TypeConverter (typeof (StaticExtensionConverter))]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationFramework_3_5)]
-#endif
public class StaticExtension : MarkupExtension
{
public StaticExtension ()
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class TrimSurroundingWhitespaceAttribute : Attribute
{
}
{
[MarkupExtensionReturnType (typeof (Type))]
[TypeConverter (typeof (TypeExtensionConverter))]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyPresentationFramework_3_5)]
-#endif
public class TypeExtension : MarkupExtension
{
public TypeExtension ()
[ConstructorArgument ("type")]
[DefaultValue (null)]
public Type Type { get; set; }
-#if !NET_2_1
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
-#endif
public string TypeName { get; set; }
public override object ProvideValue (IServiceProvider serviceProvider)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class UidPropertyAttribute : Attribute
{
public UidPropertyAttribute (string name)
namespace System.Windows.Markup
{
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public abstract class ValueSerializer
{
-#if !NET_2_1
public static ValueSerializer GetSerializerFor (PropertyDescriptor descriptor)
{
return GetSerializerFor (descriptor, null);
}
-#endif
public static ValueSerializer GetSerializerFor (Type type)
{
return GetSerializerFor (type, null);
}
-#if !NET_2_1
// untested
public static ValueSerializer GetSerializerFor (PropertyDescriptor descriptor, IValueSerializerContext context)
{
return new TypeConverterValueSerializer (tc);
return null;
}
-#endif
public static ValueSerializer GetSerializerFor (Type type, IValueSerializerContext context)
{
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Interface, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class ValueSerializerAttribute : Attribute
{
public ValueSerializerAttribute (string valueSerializerTypeName)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class WhitespaceSignificantCollectionAttribute : Attribute
{
}
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Class, AllowMultiple = false)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class XmlLangPropertyAttribute : Attribute
{
public XmlLangPropertyAttribute (string name)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Assembly, AllowMultiple = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class XmlnsCompatibleWithAttribute : Attribute
{
public XmlnsCompatibleWithAttribute (string oldNamespace, string newNamespace)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Assembly, AllowMultiple = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class XmlnsDefinitionAttribute : Attribute
{
public XmlnsDefinitionAttribute (string xmlNamespace, string clrNamespace)
namespace System.Windows.Markup
{
[AttributeUsage (AttributeTargets.Assembly, AllowMultiple = true)]
-#if !NET_2_1
[System.Runtime.CompilerServices.TypeForwardedFrom (Consts.AssemblyWindowsBase)]
-#endif
public sealed class XmlnsPrefixAttribute : Attribute
{
public XmlnsPrefixAttribute (string xmlNamespace, string prefix)
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlDuplicateMemberException : XamlException
{
public XamlDuplicateMemberException ()
{
}
-#if !NET_2_1
protected XamlDuplicateMemberException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
DuplicateMember = (XamlMember) info.GetValue ("member", typeof (XamlMember));
ParentType = (XamlType) info.GetValue ("type", typeof (XamlType));
}
-#endif
public XamlMember DuplicateMember { get; set; }
public XamlType ParentType { get; set; }
-#if !NET_2_1
public override void GetObjectData (SerializationInfo info, StreamingContext context)
{
base.GetObjectData (info, context);
info.AddValue ("member", DuplicateMember);
info.AddValue ("type", ParentType);
}
-#endif
}
}
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlException : Exception
{
public XamlException ()
LinePosition = linePosition;
}
-#if !NET_2_1
protected XamlException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
LineNumber = info.GetInt32 ("lineNumber");
LinePosition = info.GetInt32 ("linePosition");
}
-#endif
public int LineNumber { get; protected internal set; }
public int LinePosition { get; protected internal set; }
get { return FormatLine (base.Message, LineNumber, LinePosition); }
}
-#if !NET_2_1
public override void GetObjectData (SerializationInfo info, StreamingContext context)
{
info.AddValue ("lineNumber", LineNumber);
info.AddValue ("linePosition", LinePosition);
}
-#endif
}
}
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlInternalException : XamlException
{
public XamlInternalException ()
{
}
-#if !NET_2_1
protected XamlInternalException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
get { return directive_ns ?? (DeclaringType == null ? null : DeclaringType.PreferredXamlNamespace); }
}
-#if !NET_2_1
public DesignerSerializationVisibility SerializationVisibility {
get {
var c= GetCustomAttributeProvider ();
return a != null ? a.Visibility : DesignerSerializationVisibility.Visible;
}
}
-#endif
public bool IsAttachable {
get { return is_attachable; }
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlObjectReaderException : XamlException
{
public XamlObjectReaderException ()
{
}
-#if !NET_2_1
protected XamlObjectReaderException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlObjectWriterException : XamlException
{
public XamlObjectWriterException ()
{
}
-#if !NET_2_1
protected XamlObjectWriterException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
using System.ComponentModel;
using System.Reflection;
using System.Windows.Markup;
-#if !NET_2_1
+#if !__MOBILE__
using System.Xaml.Permissions;
#endif
using System.Xaml.Schema;
: base (settings)
{
var s = settings;
-#if !NET_2_1
+#if !__MOBILE__
AccessLevel = s.AccessLevel;
#endif
AfterBeginInitHandler = s.AfterBeginInitHandler;
public EventHandler<XamlObjectEventArgs> BeforePropertiesHandler { get; set; }
public EventHandler<XamlSetValueEventArgs> XamlSetValueHandler { get; set; }
-#if !NET_2_1
+#if !__MOBILE__
[MonoTODO ("Ignored")]
public XamlAccessLevel AccessLevel { get; set; }
#endif
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlParseException : XamlException
{
public XamlParseException ()
{
}
-#if !NET_2_1
protected XamlParseException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
{
if (referenceAssemblies != null)
reference_assemblies = new List<Assembly> (referenceAssemblies);
-#if !NET_2_1
else
AppDomain.CurrentDomain.AssemblyLoad += OnAssemblyLoaded;
-#endif
if (settings == null)
return;
SupportMarkupExtensionsWithDuplicateArity = settings.SupportMarkupExtensionsWithDuplicateArity;
}
-#if !NET_2_1
~XamlSchemaContext ()
{
if (reference_assemblies == null)
AppDomain.CurrentDomain.AssemblyLoad -= OnAssemblyLoaded;
}
-#endif
IList<Assembly> reference_assemblies;
return compat_nss.TryGetValue (xamlNamespace, out compatibleNamespace);
}
-#if !NET_2_1
void OnAssemblyLoaded (object o, AssemblyLoadEventArgs e)
{
if (reference_assemblies != null)
if (all_xaml_types != null)
FillAllXamlTypes (e.LoadedAssembly);
}
-#endif
-
+
// cache updater methods
void FillXamlNamespaces (Assembly ass)
{
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlSchemaException : XamlException
{
public XamlSchemaException ()
{
}
-#if !NET_2_1
protected XamlSchemaException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
return sw.ToString ();
}
-#if !NET_2_1
public static void Save (string fileName, object instance)
{
using (var xw = XmlWriter.Create (fileName, new XmlWriterSettings () { OmitXmlDeclaration = true, Indent = true }))
Save (xw, instance);
}
-#endif
public static void Save (Stream stream, object instance)
{
namespace System.Xaml
{
-#if !NET_2_1
[Serializable]
-#endif
public class XamlXmlWriterException : XamlException
{
public XamlXmlWriterException ()
{
}
-#if !NET_2_1
protected XamlXmlWriterException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
}
-#endif
}
}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.ServiceModel/System.ServiceModel-net_4_5.csproj">\r
<Project>{F2156C09-C377-4945-A690-39CFBF3319B3}</Project>\r
- <Name>System.ServiceModel\System.ServiceModel-net_4_5</Name>\r
+ <Name>System.ServiceModel-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="System-secxml-net_4_5.csproj">\r
<Project>{46F151F2-A422-4A1B-9D29-2E148CE73629}</Project>\r
- <Name>System\System-secxml-net_4_5</Name>\r
+ <Name>System-secxml-net_4_5</Name>\r
<Aliases>PrebuiltSystem</Aliases> </ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
<Aliases>MonoSecurity</Aliases> </ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-bare-net_4_5.csproj">\r
<Project>{21FB091E-0F84-479E-AB16-6503D36852F9}</Project>\r
- <Name>System.XML\System.Xml-bare-net_4_5</Name>\r
+ <Name>System.Xml-bare-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="System-bare-net_4_5.csproj">\r
<Project>{91CDF14E-F60F-4AB7-BC9D-5CBD7E669076}</Project>\r
- <Name>System\System-bare-net_4_5</Name>\r
+ <Name>System-bare-net_4_5</Name>\r
<Aliases>PrebuiltSystem</Aliases> </ProjectReference>\r
<ProjectReference Include="../Mono.Security/Mono.Security-net_4_5.csproj">\r
<Project>{D68D4FED-CA32-4800-A628-58BAE485562C}</Project>\r
- <Name>Mono.Security\Mono.Security-net_4_5</Name>\r
+ <Name>Mono.Security-net_4_5</Name>\r
<Aliases>MonoSecurity</Aliases> </ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
void Item_PropertyChanged (object item, PropertyChangedEventArgs args)
{
- OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, base.IndexOf ((T) item)) );
+ var property_info = item.GetType ().GetProperty (args.PropertyName);
+
+ if (property_info != null) {
+ OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, base.IndexOf ((T) item),
+ new ReflectionPropertyDescriptor (property_info)) );
+ } else {
+ OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, base.IndexOf ((T) item)) );
+ }
}
protected virtual void OnAddingNew (AddingNewEventArgs e)
LOOPBACK = 0x18,
FDDI = 0xf
}
+
+ internal enum MacOsInterfaceFlags {
+ IFF_UP = 0x1, /* interface is up */
+ IFF_BROADCAST = 0x2, /* broadcast address valid */
+ IFF_DEBUG = 0x4, /* turn on debugging */
+ IFF_LOOPBACK = 0x8, /* is a loopback net */
+ IFF_POINTOPOINT = 0x10, /* interface is point-to-point link */
+ IFF_NOTRAILERS = 0x20, /* avoid use of trailers */
+ IFF_RUNNING = 0x40, /* resources allocated */
+ IFF_NOARP = 0x80, /* no address resolution protocol */
+ IFF_PROMISC = 0x100, /* receive all packets */
+ IFF_ALLMULTI = 0x200, /* receive all multicast packets */
+ IFF_OACTIVE = 0x400, /* transmission in progress */
+ IFF_SIMPLEX = 0x800, /* can't hear own transmissions */
+ IFF_LINK0 = 0x1000, /* per link layer defined bit */
+ IFF_LINK1 = 0x2000, /* per link layer defined bit */
+ IFF_LINK2 = 0x4000, /* per link layer defined bit */
+ IFF_MULTICAST = 0x8000 /* supports multicast */
+ }
}
const int AF_INET = 2;
const int AF_INET6 = 30;
const int AF_LINK = 18;
+
+ private uint _ifa_flags;
public static NetworkInterface [] ImplGetAllNetworkInterfaces ()
{
NetworkInterfaceType type = NetworkInterfaceType.Unknown;
if (addr.ifa_addr != IntPtr.Zero) {
+ // optain IPAddress
MacOsStructs.sockaddr sockaddr = (MacOsStructs.sockaddr) Marshal.PtrToStructure (addr.ifa_addr, typeof (MacOsStructs.sockaddr));
if (sockaddr.sa_family == AF_INET6) {
sockaddrdl.Read (addr.ifa_addr);
macAddress = new byte [(int) sockaddrdl.sdl_alen];
+ // copy mac address from sdl_data field starting at last index pos of interface name into array macaddress, starting
+ // at index 0
Array.Copy (sockaddrdl.sdl_data, sockaddrdl.sdl_nlen, macAddress, 0, Math.Min (macAddress.Length, sockaddrdl.sdl_data.Length - sockaddrdl.sdl_nlen));
+
index = sockaddrdl.sdl_index;
int hwtype = (int) sockaddrdl.sdl_type;
MacOsNetworkInterface iface = null;
+ // create interface if not already present
if (!interfaces.TryGetValue (name, out iface)) {
- iface = new MacOsNetworkInterface (name);
+ iface = new MacOsNetworkInterface (name, addr.ifa_flags);
interfaces.Add (name, iface);
}
+ // if a new address has been found, add it
if (!address.Equals (IPAddress.None))
iface.AddAddress (address);
+ // set link layer info, if iface has macaddress or is loopback device
if (macAddress != null || type == NetworkInterfaceType.Loopback)
iface.SetLinkLayerInfo (index, macAddress, type);
return result;
}
- MacOsNetworkInterface (string name)
+ MacOsNetworkInterface (string name, uint ifa_flags)
: base (name)
{
+ _ifa_flags = ifa_flags;
}
public override IPInterfaceProperties GetIPProperties ()
public override OperationalStatus OperationalStatus {
get {
+ if(((MacOsInterfaceFlags)_ifa_flags & MacOsInterfaceFlags.IFF_UP) == MacOsInterfaceFlags.IFF_UP){
+ return OperationalStatus.Up;
+ }
return OperationalStatus.Unknown;
}
}
public override bool SupportsMulticast {
get {
- return false;
+ return ((MacOsInterfaceFlags)_ifa_flags & MacOsInterfaceFlags.IFF_MULTICAST) == MacOsInterfaceFlags.IFF_MULTICAST;
}
}
}
}
value = header.Substring (beginQ, pos - beginQ);
- pos += 2;
+ pos += useQuote ? 2 : 1;
return true;
}
}
});
}
- SimpleAsyncResult SetWriteStreamInner (SimpleAsyncCallback callback)
+ void SetWriteStreamInner (SimpleAsyncCallback callback)
{
- return SimpleAsyncResult.Run (result => {
+ SimpleAsyncResult.Run (result => {
if (bodyBuffer != null) {
// The body has been written and buffered. The request "user"
// won't write it again, so we must do it.
//
// Author: Jeffrey Stedfast <jeff@xamarin.com>
//
-// Copyright (c) 2012 Xamarin Inc.
+// Copyright (c) 2012-2014 Xamarin Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
}
[DllImport (CoreFoundationLibrary)]
- extern static IntPtr CFRelease (IntPtr handle);
+ extern static void CFRelease (IntPtr handle);
void Release ()
{
public CFArray (IntPtr handle, bool own) : base (handle, own) { }
[DllImport (CoreFoundationLibrary)]
- extern static IntPtr CFArrayCreate (IntPtr allocator, IntPtr values, int numValues, IntPtr callbacks);
+ extern static IntPtr CFArrayCreate (IntPtr allocator, IntPtr values, /* CFIndex */ IntPtr numValues, IntPtr callbacks);
static readonly IntPtr kCFTypeArrayCallbacks;
static CFArray ()
throw new ArgumentNullException ("values");
fixed (IntPtr *pv = values) {
- IntPtr handle = CFArrayCreate (IntPtr.Zero, (IntPtr) pv, values.Length, kCFTypeArrayCallbacks);
+ IntPtr handle = CFArrayCreate (IntPtr.Zero, (IntPtr) pv, (IntPtr) values.Length, kCFTypeArrayCallbacks);
return new CFArray (handle, false);
}
}
[DllImport (CoreFoundationLibrary)]
- extern static int CFArrayGetCount (IntPtr handle);
+ extern static /* CFIndex */ IntPtr CFArrayGetCount (IntPtr handle);
public int Count {
- get { return CFArrayGetCount (Handle); }
+ get { return (int) CFArrayGetCount (Handle); }
}
[DllImport (CoreFoundationLibrary)]
- extern static IntPtr CFArrayGetValueAtIndex (IntPtr handle, int index);
+ extern static IntPtr CFArrayGetValueAtIndex (IntPtr handle, /* CFIndex */ IntPtr index);
public IntPtr this[int index] {
get {
- return CFArrayGetValueAtIndex (Handle, index);
+ return CFArrayGetValueAtIndex (Handle, (IntPtr) index);
}
}
}
public CFNumber (IntPtr handle, bool own) : base (handle, own) { }
[DllImport (CoreFoundationLibrary)]
- extern static bool CFNumberGetValue (IntPtr handle, int type, out bool value);
+ [return: MarshalAs (UnmanagedType.I1)]
+ extern static bool CFNumberGetValue (IntPtr handle, /* CFNumberType */ IntPtr type, [MarshalAs (UnmanagedType.I1)] out bool value);
public static bool AsBool (IntPtr handle)
{
if (handle == IntPtr.Zero)
return false;
- CFNumberGetValue (handle, 1, out value);
+ CFNumberGetValue (handle, (IntPtr) 1, out value);
return value;
}
}
[DllImport (CoreFoundationLibrary)]
- extern static bool CFNumberGetValue (IntPtr handle, int type, out int value);
+ [return: MarshalAs (UnmanagedType.I1)]
+ extern static bool CFNumberGetValue (IntPtr handle, /* CFNumberType */ IntPtr type, out int value);
public static int AsInt32 (IntPtr handle)
{
if (handle == IntPtr.Zero)
return 0;
- CFNumberGetValue (handle, 9, out value);
+ // 9 == kCFNumberIntType == C int
+ CFNumberGetValue (handle, (IntPtr) 9, out value);
return value;
}
}
internal struct CFRange {
- public int Location, Length;
+ public IntPtr Location, Length;
public CFRange (int loc, int len)
{
- Location = loc;
- Length = len;
+ Location = (IntPtr) loc;
+ Length = (IntPtr) len;
}
}
public CFString (IntPtr handle, bool own) : base (handle, own) { }
[DllImport (CoreFoundationLibrary)]
- extern static IntPtr CFStringCreateWithCharacters (IntPtr alloc, IntPtr chars, int length);
+ extern static IntPtr CFStringCreateWithCharacters (IntPtr alloc, IntPtr chars, /* CFIndex */ IntPtr length);
public static CFString Create (string value)
{
unsafe {
fixed (char *ptr = value) {
- handle = CFStringCreateWithCharacters (IntPtr.Zero, (IntPtr) ptr, value.Length);
+ handle = CFStringCreateWithCharacters (IntPtr.Zero, (IntPtr) ptr, (IntPtr) value.Length);
}
}
}
[DllImport (CoreFoundationLibrary)]
- extern static int CFStringGetLength (IntPtr handle);
+ extern static /* CFIndex */ IntPtr CFStringGetLength (IntPtr handle);
public int Length {
get {
if (str != null)
return str.Length;
- return CFStringGetLength (Handle);
+ return (int) CFStringGetLength (Handle);
}
}
if (handle == IntPtr.Zero)
return null;
- int len = CFStringGetLength (handle);
+ int len = (int) CFStringGetLength (handle);
if (len == 0)
return string.Empty;
throw new ArgumentException ("value");
maxServicePoints = value;
- RecycleServicePoints ();
}
}
if (address == null)
throw new ArgumentNullException ("address");
- if ((servicePoints.Count % 4) == 0)
- RecycleServicePoints ();
-
var origAddress = new Uri (address.Scheme + "://" + address.Authority);
bool usesProxy = false;
return sp;
}
- // Internal Methods
-
- static void RecycleServicePoints ()
- {
- lock (servicePoints) {
- var toRemove = new ArrayList ();
- var idleList = new SortedDictionary<DateTime, ServicePoint> ();
- IDictionaryEnumerator e = servicePoints.GetEnumerator ();
- while (e.MoveNext ()) {
- ServicePoint sp = (ServicePoint) e.Value;
- DateTime idleSince;
- if (sp.CheckAvailableForRecycling (out idleSince)) {
- toRemove.Add (e.Key);
- continue;
- }
-
- while (idleList.ContainsKey (idleSince))
- idleSince = idleSince.AddMilliseconds (1);
- idleList.Add (idleSince, sp);
- }
-
- for (int i = 0; i < toRemove.Count; i++)
- servicePoints.Remove (toRemove [i]);
-
- if (maxServicePoints == 0 || servicePoints.Count <= maxServicePoints)
- return;
-
- // get rid of the ones with the longest idle time
- foreach (var sp in idleList.Values) {
- if (servicePoints.Count <= maxServicePoints)
- break;
- servicePoints.Remove (sp);
- }
- }
- }
#if SECURITY_DEP
internal class ChainValidationHelper {
object sender;
//
-// System.Net.WebAsyncResult
+// SimpleAsyncResult.cs
//
// Authors:
// Gonzalo Paniagua Javier (gonzalo@ximian.com)
};
}
- public static SimpleAsyncResult Run (SimpleAsyncFunc func, SimpleAsyncCallback callback)
+ public static void Run (SimpleAsyncFunc func, SimpleAsyncCallback callback)
{
var result = new SimpleAsyncResult (callback);
try {
} catch (Exception ex) {
result.SetCompleted (true, ex);
}
- return result;
}
- public static SimpleAsyncResult RunWithLock (object locker, SimpleAsyncFunc func, SimpleAsyncCallback callback)
+ public static void RunWithLock (object locker, SimpleAsyncFunc func, SimpleAsyncCallback callback)
{
- return Run (inner => {
+ Run (inner => {
bool running = func (inner);
if (running)
Monitor.Exit (locker);
{
callbackDone = false;
exc = null;
- exc = null;
lock (locker) {
isCompleted = false;
if (handle != null)
{
if (!callbackDone && cb != null) {
callbackDone = true;
-// if (true || synch)
- cb (this);
-// else
-// ThreadPool.QueueUserWorkItem (CB, null);
+ cb (this);
}
}
- void CB (object unused)
- {
- cb (this);
- }
-
internal void WaitUntilComplete ()
{
if (IsCompleted)
string data2 = UploadString ((Uri) args [0], (string) args [1], (string) args [2]);
OnUploadStringCompleted (
new UploadStringCompletedEventArgs (data2, null, false, args [3]));
- } catch (ThreadInterruptedException){
- OnUploadStringCompleted (
- new UploadStringCompletedEventArgs (null, null, true, args [3]));
} catch (Exception e){
+ if (e is ThreadInterruptedException || e.InnerException is ThreadInterruptedException) {
+ OnUploadStringCompleted (
+ new UploadStringCompletedEventArgs (null, null, true, args [3]));
+ return;
+ }
OnUploadStringCompleted (
new UploadStringCompletedEventArgs (null, e, false, args [3]));
}});
byte [] buffer = new byte [1024];
MemoryStream ms = new MemoryStream ();
- bool gotStatus = false;
- WebHeaderCollection headers = null;
while (true) {
int n = stream.Read (buffer, 0, 1024);
ms.Write (buffer, 0, n);
int start = 0;
string str = null;
- headers = new WebHeaderCollection ();
+ bool gotStatus = false;
+ WebHeaderCollection headers = new WebHeaderCollection ();
while (ReadLine (ms.GetBuffer (), ref start, (int) ms.Length, ref str)) {
if (str == null) {
int contentLen = 0;
continue;
}
- int spaceidx = str.IndexOf (' ');
- if (spaceidx == -1) {
+ string[] parts = str.Split (' ');
+ if (parts.Length < 2) {
HandleError (WebExceptionStatus.ServerProtocolViolation, null, "ReadHeaders2");
return null;
}
- status = (int) UInt32.Parse (str.Substring (spaceidx + 1, 3));
+ if (String.Compare (parts [0], "HTTP/1.1", true) == 0)
+ Data.ProxyVersion = HttpVersion.Version11;
+ else if (String.Compare (parts [0], "HTTP/1.0", true) == 0)
+ Data.ProxyVersion = HttpVersion.Version10;
+ else {
+ HandleError (WebExceptionStatus.ServerProtocolViolation, null, "ReadHeaders2");
+ return null;
+ }
+
+ status = (int)UInt32.Parse (parts [1]);
gotStatus = true;
}
}
string header = (sPoint.UsesProxy) ? "Proxy-Connection" : "Connection";
string cncHeader = (Data.Headers != null) ? Data.Headers [header] : null;
bool keepAlive = (Data.Version == HttpVersion.Version11 && this.keepAlive);
+ if (Data.ProxyVersion != null && Data.ProxyVersion != HttpVersion.Version11)
+ keepAlive = false;
if (cncHeader != null) {
cncHeader = cncHeader.ToLower ();
keepAlive = (this.keepAlive && cncHeader.IndexOf ("keep-alive", StringComparison.Ordinal) != -1);
public string StatusDescription;
public WebHeaderCollection Headers;
public Version Version;
+ public Version ProxyVersion;
public Stream stream;
public string[] Challenge;
ReadState _readState;
//TODO: abort requests or wait for them to finish
lock (sPoint) {
closing = true;
- foreach (var cnc in connections) {
- if (cnc.Connection == null)
- continue;
- cnc.Connection.Close (false);
- cnc.Connection = null;
+ var iter = connections.First;
+ while (iter != null) {
+ var cnc = iter.Value.Connection;
+ var node = iter;
+ iter = iter.Next;
+
+ connections.Remove (node);
+ cnc.Close (false);
OnConnectionClosed ();
}
- connections.Clear ();
}
}
ConnectionState FindIdleConnection ()
{
foreach (var cnc in connections) {
- if (cnc.Busy || cnc.Connection == null)
+ if (cnc.Busy)
continue;
connections.Remove (cnc);
return cnc.Connection;
}
- if (sPoint.ConnectionLimit > connections.Count) {
+ if (sPoint.ConnectionLimit > connections.Count || connections.Count == 0) {
created = true;
cnc = new ConnectionState (this);
connections.AddFirst (cnc);
}
int count = 0;
- for (var node = connections.First; node != null; node = node.Next) {
- var cnc = node.Value;
-
- if (cnc.Connection == null) {
- connections.Remove (node);
- OnConnectionClosed ();
- continue;
- }
+ var iter = connections.First;
+ while (iter != null) {
+ var cnc = iter.Value;
+ var node = iter;
+ iter = iter.Next;
++count;
if (cnc.Busy)
if (connectionsToClose == null)
connectionsToClose = new List<WebConnection> ();
connectionsToClose.Add (cnc.Connection);
- cnc.Connection = null;
+ connections.Remove (node);
}
recycled = connections.Count == 0;
}
class ConnectionState : IWebConnectionState {
- public WebConnection Connection;
+ public WebConnection Connection {
+ get;
+ private set;
+ }
public WebConnectionGroup Group {
get;
{
}
- internal SimpleAsyncResult SetHeadersAsync (bool setInternalLength, SimpleAsyncCallback callback)
+ internal void SetHeadersAsync (bool setInternalLength, SimpleAsyncCallback callback)
{
- return SimpleAsyncResult.Run (r => SetHeadersAsync (r, setInternalLength), callback);
+ SimpleAsyncResult.Run (r => SetHeadersAsync (r, setInternalLength), callback);
}
bool SetHeadersAsync (SimpleAsyncResult result, bool setInternalLength)
WebExceptionStatus.ServerProtocolViolation, null);
}
- var ret = SetHeadersAsync (true, inner => {
+ SetHeadersAsync (true, inner => {
if (inner.GotException) {
result.SetCompleted (inner.CompletedSynchronously, inner.Exception);
return;
// Copyright (C) 2010 Novell, Inc (http://www.novell.com)
-// Copyright 2012 Xamarin Inc.
+// Copyright 2012-2014 Xamarin Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
extern static IntPtr SecCertificateCreateWithData (IntPtr allocator, IntPtr nsdataRef);
[DllImport (SecurityLibrary)]
- extern static int SecTrustCreateWithCertificates (IntPtr certOrCertArray, IntPtr policies, out IntPtr sectrustref);
+ extern static /* OSStatus */ int SecTrustCreateWithCertificates (IntPtr certOrCertArray, IntPtr policies, out IntPtr sectrustref);
[DllImport (SecurityLibrary)]
- extern static IntPtr SecPolicyCreateSSL (bool server, IntPtr cfStringHostname);
+ extern static IntPtr SecPolicyCreateSSL ([MarshalAs (UnmanagedType.I1)] bool server, IntPtr cfStringHostname);
[DllImport (SecurityLibrary)]
- extern static int SecTrustEvaluate (IntPtr secTrustRef, out SecTrustResult secTrustResultTime);
+ extern static /* OSStatus */ int SecTrustEvaluate (IntPtr secTrustRef, out SecTrustResult secTrustResultTime);
[DllImport (CoreFoundationLibrary, CharSet=CharSet.Unicode)]
- extern static IntPtr CFStringCreateWithCharacters (IntPtr allocator, string str, int count);
+ extern static IntPtr CFStringCreateWithCharacters (IntPtr allocator, string str, /* CFIndex */ IntPtr count);
[DllImport (CoreFoundationLibrary)]
- unsafe extern static IntPtr CFDataCreate (IntPtr allocator, byte *bytes, IntPtr length);
+ unsafe extern static IntPtr CFDataCreate (IntPtr allocator, byte *bytes, /* CFIndex */ IntPtr length);
[DllImport (CoreFoundationLibrary)]
- unsafe extern static void CFRelease (IntPtr handle);
+ extern static void CFRelease (IntPtr handle);
[DllImport (CoreFoundationLibrary)]
- extern static IntPtr CFArrayCreate (IntPtr allocator, IntPtr values, IntPtr numValues, IntPtr callbacks);
-
+ extern static IntPtr CFArrayCreate (IntPtr allocator, IntPtr values, /* CFIndex */ IntPtr numValues, IntPtr callbacks);
+
+ // uint32_t
public enum SecTrustResult {
Invalid,
Proceed,
return SecTrustResult.Deny;
}
certArray = FromIntPtrs (secCerts);
- host = CFStringCreateWithCharacters (IntPtr.Zero, hostName, hostName.Length);
+ host = CFStringCreateWithCharacters (IntPtr.Zero, hostName, (IntPtr) hostName.Length);
sslsecpolicy = SecPolicyCreateSSL (true, host);
int code = SecTrustCreateWithCertificates (certArray, sslsecpolicy, out sectrust);
private MX.X509Certificate ImportPkcs12 (byte[] rawData, string password)
{
- MX.PKCS12 pfx = (password == null) ? new MX.PKCS12 (rawData) : new MX.PKCS12 (rawData, password);
+ MX.PKCS12 pfx = null;
+ if (string.IsNullOrEmpty (password)) {
+ try {
+ // Support both unencrypted PKCS#12..
+ pfx = new MX.PKCS12 (rawData, (string)null);
+ } catch {
+ // ..and PKCS#12 encrypted with an empty password
+ pfx = new MX.PKCS12 (rawData, string.Empty);
+ }
+ } else {
+ pfx = new MX.PKCS12 (rawData, password);
+ }
+
if (pfx.Certificates.Count == 0) {
// no certificate was found
return null;
public void ClosePort ()
{
var h = new HttpListener ();
- h.Prefixes.Add ("http://127.0.0.1:8080/");
+ h.Prefixes.Add ("http://127.0.0.1:30158/");
h.Start ();
h.BeginGetContext (null, null);
h.Stop ();
- TcpListener t = new TcpListener (IPAddress.Parse ("127.0.0.1"), 8080);
+ TcpListener t = new TcpListener (IPAddress.Parse ("127.0.0.1"), 30158);
t.Start ();
t.Stop ();
}
// and return the same instance as WebRequest.DefaultWebProxy
Assert.AreSame (wc.Proxy, WebRequest.DefaultWebProxy);
}
+
+#if NET_4_5
+ [Test]
+ public void UploadStringAsyncCancelEvent ()
+ {
+ UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+ {
+
+ webClient.UploadStringCompleted += (sender, args) =>
+ {
+ if (args.Cancelled)
+ cancelEvent.Set ();
+ };
+
+ webClient.UploadStringAsync (uri, "PUT", "text");
+ });
+ }
+
+ [Test]
+ public void UploadDataAsyncCancelEvent ()
+ {
+ UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+ {
+ webClient.UploadDataCompleted += (sender, args) =>
+ {
+ if (args.Cancelled)
+ cancelEvent.Set ();
+ };
+
+ webClient.UploadDataAsync (uri, "PUT", new byte[] { });
+ });
+ }
+
+ [Test]
+ public void UploadValuesAsyncCancelEvent ()
+ {
+ UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+ {
+ webClient.UploadValuesCompleted += (sender, args) =>
+ {
+ if (args.Cancelled)
+ cancelEvent.Set ();
+ };
+
+ webClient.UploadValuesAsync (uri, "PUT", new NameValueCollection ());
+ });
+ }
+
+ [Test]
+ public void UploadFileAsyncCancelEvent ()
+ {
+ UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+ {
+ string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+ File.Create (tempFile).Close ();
+
+ webClient.UploadFileCompleted += (sender, args) =>
+ {
+ if (args.Cancelled)
+ cancelEvent.Set ();
+ };
+
+ webClient.UploadFileAsync (uri, "PUT", tempFile);
+ });
+ }
+#endif
+
+#if NET_4_0
+ public void UploadAsyncCancelEventTest (Action<WebClient, Uri, EventWaitHandle> uploadAction)
+ {
+ var ep = new IPEndPoint (IPAddress.Loopback, 8000);
+ string url = "http://" + IPAddress.Loopback + ":8000/test/";
+
+ using (var responder = new SocketResponder (ep, EchoRequestHandler))
+ {
+ responder.Start ();
+
+ var webClient = new WebClient ();
+
+ var cancellationTokenSource = new CancellationTokenSource ();
+ cancellationTokenSource.Token.Register (webClient.CancelAsync);
+
+ var cancelEvent = new ManualResetEvent (false);
+
+ uploadAction.Invoke (webClient, new Uri (url), cancelEvent);
+
+ cancellationTokenSource.Cancel ();
+
+ Assert.IsTrue (cancelEvent.WaitOne (1000));
+ }
+ }
+#endif
}
}
0x89, 0x53, 0xBD, 0x10, 0xAA, 0x1E, 0xC6, 0x41, 0x7C, 0x71, 0xCA, 0x47, 0x79, 0x60, 0x95, 0x2E, 0xAB, 0xF6, 0x17, 0xBE, 0x1D, 0xF1, 0x05, 0xAD, 0x76, 0xD8, 0xBB, 0xF2, 0xBB, 0x36, 0xEE, 0xCD, 0xAA, 0xBC, 0xBA, 0xBE, 0x94, 0x42, 0x9A, 0xA8, 0xEE, 0xE5, 0x93, 0x5C, 0x3C, 0x23, 0xE2, 0x75, 0xD3, 0x59, 0xB4, 0xB3, 0xC4, 0x01, 0xBB, 0xC9, 0x05, 0xFE, 0xFA, 0x1B, 0x31, 0x7A, 0x15, 0x29, 0x91, 0xE6, 0xB9, 0xB2, 0x1E, 0xF9, 0x36, 0xC5, 0x17, 0xB9, 0x9D, 0x32, 0x0D, 0x0D, 0x80, 0x4A, 0x0D, 0x14, 0xB4, 0xDF, 0x89, 0x3A, 0x4B, 0xCA, 0x4B, 0xDE, 0xF8, 0xC0, 0x1B, 0xA6, 0x6D, 0xD9, 0x19, 0xFB, 0x0E, 0x02,
0x22, 0x82, 0x8E, 0x25, 0x8E, 0x9F, 0xD5, 0x7B, 0xB6, 0x14, 0x15, 0x08, 0x61, 0xCD, 0xA6, 0xB3, 0x0F, 0xC8, 0xE8, 0xF9, 0xEE, 0xDB, 0xAF, 0x25, 0x40, 0x01, 0x85, 0x0E, 0x89, 0x0D, 0x0D, 0x85, 0xA6, 0xA3, 0xC9, 0x65, 0x64, 0x8A, 0xD1, 0xF7, 0x55, 0xF9, 0x31, 0x24, 0x41, 0x30, 0x3B, 0x30, 0x1F, 0x30, 0x07, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x04, 0x14, 0xD4, 0x77, 0x3F, 0x92, 0xB6, 0xA6, 0x1B, 0xD5, 0x7F, 0xC1, 0x1B, 0x93, 0xB3, 0x6E, 0x87, 0x67, 0x80, 0xE7, 0x4C, 0x7C, 0x04, 0x14, 0x58, 0x4C, 0x92, 0xDD, 0x0B, 0xEF, 0x09, 0x35, 0xE0, 0x06, 0x33, 0x54, 0xB2, 0xA8, 0x8E, 0x0C, 0x60, 0x67,
0xB5, 0x0F, 0x02, 0x02, 0x07, 0xD0 };
+
+ public static byte[] openssl_emptypwd_pfx = { 0x30, 0x82, 0x06, 0x19, 0x02, 0x01, 0x03, 0x30, 0x82, 0x05, 0xDF, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0xD0, 0x04, 0x82, 0x05, 0xCC, 0x30, 0x82, 0x05, 0xC8, 0x30, 0x82, 0x02, 0xC7, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x06, 0xA0, 0x82, 0x02, 0xB8, 0x30, 0x82, 0x02, 0xB4, 0x02, 0x01, 0x00, 0x30, 0x82, 0x02, 0xAD, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x06, 0x30, 0x0E, 0x04, 0x08, 0xE4, 0x0A, 0x2F, 0x48, 0xE6, 0x07, 0x62,
+ 0x5D, 0x02, 0x02, 0x08, 0x00, 0x80, 0x82, 0x02, 0x80, 0x35, 0x6F, 0x44, 0xFA, 0xA8, 0x0D, 0x41, 0xBA, 0x1A, 0xAE, 0xB1, 0xFB, 0xA4, 0xBB, 0x91, 0x28, 0x75, 0x19, 0xF8, 0x1C, 0x0E, 0xB4, 0xCE, 0x2A, 0x5C, 0x28, 0x2E, 0x34, 0x6F, 0x9B, 0x5F, 0x94, 0x16, 0x33, 0xE0, 0x36, 0x50, 0x5D, 0x47, 0x74, 0x42, 0x4E, 0xCC, 0xA0, 0x7F, 0x8C, 0x32, 0x26, 0x7A, 0x5F, 0x24, 0xB1, 0xEB, 0xD8, 0x2C, 0xE3, 0x6D, 0xC2, 0x3C, 0xBC, 0x3B, 0x0A, 0x78, 0x39, 0x88, 0x24, 0x9E, 0x94, 0x15, 0xC3, 0x43, 0xE0, 0x25, 0x31, 0x3F, 0xB0, 0xDA, 0xF8, 0x4E, 0x37, 0x56, 0xD4, 0xAE, 0x75, 0x28, 0x30, 0x67, 0x5F, 0xBF, 0xF9, 0x7D,
+ 0xDC, 0xF6, 0x1A, 0x02, 0xF0, 0x65, 0xBF, 0x0A, 0x4D, 0x39, 0x16, 0xC7, 0x57, 0x9A, 0xA1, 0x7C, 0xF0, 0x4B, 0xDD, 0x0E, 0xAF, 0x4E, 0xA9, 0xC8, 0x85, 0x89, 0xCB, 0xB8, 0xD3, 0x96, 0x5F, 0x0C, 0xCB, 0x85, 0xBD, 0xEB, 0x11, 0x00, 0x3B, 0x34, 0xB6, 0x6B, 0xCE, 0x32, 0x75, 0x09, 0x8C, 0x09, 0x3B, 0x13, 0x9D, 0x9F, 0xC1, 0x72, 0x8F, 0xC5, 0x9E, 0x90, 0x89, 0x7C, 0x3A, 0x64, 0xC2, 0x27, 0xD5, 0xF5, 0x6B, 0x23, 0x2C, 0x32, 0xEF, 0xB4, 0x2C, 0x09, 0x0F, 0x65, 0xF4, 0xE4, 0xDC, 0xC3, 0x1F, 0x00, 0xF4, 0x77, 0xB0, 0x3B, 0x08, 0xA5, 0x59, 0xFA, 0x50, 0xAF, 0x9D, 0x9D, 0x22, 0x80, 0xC6, 0x6E, 0xF8, 0xA7,
+ 0xB7, 0x03, 0x2A, 0x64, 0x37, 0x9C, 0xFB, 0x0D, 0x9D, 0xEF, 0xEC, 0x81, 0xDD, 0xEE, 0x17, 0xA9, 0x8D, 0xA1, 0x9D, 0x06, 0x0F, 0x51, 0x1E, 0x21, 0xF6, 0xEB, 0x10, 0x20, 0x99, 0xE6, 0x8D, 0x23, 0xDC, 0x27, 0xD5, 0xF5, 0xAF, 0x02, 0x07, 0xBE, 0x85, 0x7E, 0x11, 0x5D, 0x87, 0xEB, 0x49, 0xCA, 0xA1, 0xDB, 0x10, 0xB6, 0x18, 0x7C, 0x52, 0x07, 0x08, 0x99, 0xAF, 0x37, 0x15, 0x0E, 0x72, 0xB4, 0x0A, 0x5B, 0x88, 0x70, 0xCF, 0x24, 0xF4, 0xB3, 0x38, 0x99, 0x21, 0x2E, 0xB2, 0x98, 0x79, 0x28, 0x2E, 0x23, 0x1F, 0x9A, 0x20, 0xA7, 0x62, 0xC4, 0x31, 0x82, 0x35, 0x59, 0xFD, 0xAB, 0x7F, 0xE6, 0x6C, 0x9A, 0xE6, 0x4D,
+ 0x3E, 0xE3, 0xA7, 0x3E, 0xAE, 0x6F, 0xCA, 0xD2, 0x3A, 0x9B, 0x31, 0x1B, 0x96, 0xA9, 0x25, 0xB5, 0x25, 0x47, 0x57, 0xCF, 0x7C, 0x5F, 0x1E, 0x5C, 0x38, 0xB9, 0x24, 0xB2, 0xA5, 0x50, 0xB1, 0x3F, 0xAC, 0x3C, 0x77, 0x53, 0xC7, 0xC8, 0x3B, 0x95, 0xD4, 0x37, 0x30, 0x6E, 0xE6, 0x39, 0x2E, 0x53, 0x09, 0x30, 0x9B, 0x35, 0x1C, 0x74, 0x31, 0x46, 0x67, 0xC5, 0x6E, 0x4D, 0x35, 0x8F, 0x61, 0xC5, 0xA4, 0xD4, 0xBA, 0xE1, 0x47, 0xC7, 0x1D, 0x94, 0x75, 0x6B, 0xFA, 0xAE, 0x2E, 0xDC, 0xB4, 0xA7, 0x64, 0xFA, 0x14, 0x68, 0x14, 0xA0, 0x81, 0x96, 0xD9, 0xC0, 0x2A, 0xFD, 0xEE, 0x78, 0xFE, 0xB6, 0x38, 0xC9, 0x1B, 0xF7,
+ 0x05, 0xC1, 0x4C, 0xF1, 0x21, 0x53, 0x62, 0x17, 0xED, 0x1D, 0xF7, 0x34, 0x92, 0xD4, 0xDD, 0xD7, 0xF0, 0xA7, 0x90, 0x34, 0xBE, 0x26, 0x86, 0x26, 0x67, 0x3B, 0x40, 0xC6, 0x4C, 0x6A, 0x26, 0xD9, 0x2A, 0x4E, 0x58, 0xEF, 0x86, 0x80, 0x8B, 0x6D, 0x40, 0xCD, 0x40, 0xFD, 0x7B, 0xD9, 0x1C, 0xC4, 0x24, 0x94, 0x4A, 0xFB, 0xFC, 0xB9, 0xF8, 0xE6, 0x95, 0x82, 0x0D, 0x02, 0xE3, 0x53, 0xC9, 0x28, 0xBD, 0x60, 0x65, 0x76, 0x0F, 0xF0, 0xFE, 0x23, 0xF6, 0x8A, 0xB6, 0xB3, 0xD4, 0x51, 0xC2, 0xE5, 0xB4, 0x3A, 0x10, 0x0D, 0x25, 0x7C, 0xC9, 0xCC, 0x11, 0x45, 0x7C, 0xC0, 0x1F, 0x82, 0x52, 0xCA, 0xE8, 0x25, 0x53, 0xCE,
+ 0x92, 0x67, 0xEC, 0xA2, 0x04, 0xE1, 0x58, 0x7B, 0xE6, 0xF2, 0xA2, 0x5D, 0x74, 0x46, 0xD5, 0x9A, 0x6F, 0x70, 0x60, 0xC4, 0x99, 0xB2, 0x29, 0xF9, 0x60, 0x19, 0x89, 0x37, 0xB3, 0xE5, 0x97, 0xCD, 0x9E, 0xD4, 0x53, 0x0B, 0xD6, 0xB5, 0xC6, 0xFA, 0x8D, 0x0F, 0x96, 0x65, 0x78, 0xE9, 0xC0, 0x84, 0x38, 0x26, 0xD9, 0xA5, 0x27, 0x62, 0xFC, 0x2A, 0x79, 0xCF, 0x7F, 0xC9, 0xFC, 0xBC, 0x41, 0x29, 0x9C, 0xD8, 0x3B, 0x37, 0x54, 0xA0, 0x39, 0x78, 0x21, 0x3A, 0x9C, 0x51, 0xE0, 0x30, 0x18, 0xA4, 0x56, 0x61, 0x13, 0x9C, 0x1C, 0x01, 0x35, 0x96, 0x19, 0x4B, 0xAF, 0xD0, 0xFE, 0x95, 0xF1, 0xC1, 0xBB, 0x6A, 0xBC, 0x2C,
+ 0x39, 0x21, 0x38, 0xB4, 0xB9, 0x10, 0x27, 0xD6, 0x04, 0xC5, 0xE4, 0xC3, 0x2C, 0xB8, 0x0B, 0xEC, 0xB3, 0x28, 0x32, 0x50, 0x02, 0x4E, 0xE4, 0xE9, 0x11, 0x4C, 0x38, 0x87, 0x3D, 0x7F, 0x54, 0xA2, 0x1D, 0xFF, 0x4B, 0x07, 0x0A, 0xE7, 0x42, 0x08, 0x48, 0x54, 0x3C, 0x7B, 0xE4, 0xF4, 0x2D, 0x98, 0x16, 0x30, 0x82, 0x02, 0xF9, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x02, 0xEA, 0x04, 0x82, 0x02, 0xE6, 0x30, 0x82, 0x02, 0xE2, 0x30, 0x82, 0x02, 0xDE, 0x06, 0x0B, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01, 0x02, 0xA0, 0x82, 0x02, 0xA6, 0x30, 0x82, 0x02,
+ 0xA2, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30, 0x0E, 0x04, 0x08, 0x8C, 0xA8, 0xAE, 0x70, 0xEB, 0x90, 0xF9, 0xB7, 0x02, 0x02, 0x08, 0x00, 0x04, 0x82, 0x02, 0x80, 0xA7, 0x49, 0x1D, 0x10, 0xDD, 0x5C, 0xE8, 0xD5, 0x2F, 0x55, 0xAB, 0x62, 0x21, 0x13, 0x64, 0x32, 0xA8, 0xED, 0xFF, 0x8A, 0xE2, 0x5F, 0xCE, 0x74, 0x89, 0x1C, 0x9F, 0x73, 0x02, 0x99, 0x85, 0xE4, 0xF8, 0x21, 0xE1, 0xAA, 0x64, 0x72, 0x95, 0xEC, 0xA0, 0x2E, 0xA9, 0x90, 0x35, 0x51, 0x82, 0x9B, 0x28, 0xDC, 0x0C, 0x47, 0xCD, 0x5C, 0x08, 0x0C, 0x49, 0x8D, 0x06, 0x70, 0x97, 0xF5, 0x4C, 0x48, 0x43,
+ 0xDC, 0x84, 0xC4, 0x6C, 0x4F, 0x55, 0xD9, 0x86, 0x16, 0x39, 0x31, 0x22, 0x0C, 0x12, 0x55, 0x76, 0x0E, 0xBC, 0x57, 0x66, 0x0D, 0xB3, 0xC0, 0xAB, 0x87, 0x6B, 0x85, 0x20, 0x4D, 0x69, 0x57, 0xAF, 0x44, 0xAB, 0x76, 0x15, 0xA7, 0xAA, 0x07, 0xA9, 0xD8, 0x82, 0x4C, 0x79, 0xA5, 0x62, 0x6D, 0x2E, 0x6C, 0x99, 0xE6, 0xE8, 0x6E, 0xD0, 0x12, 0x85, 0x98, 0x63, 0xEA, 0xC7, 0x07, 0x8C, 0x4B, 0xEB, 0x46, 0x2A, 0xE0, 0x94, 0xAA, 0x0C, 0x19, 0xFA, 0xD6, 0x93, 0x80, 0x7B, 0x20, 0x74, 0x1D, 0xB8, 0xB9, 0x76, 0xEB, 0x93, 0x9A, 0x32, 0x76, 0xA4, 0x93, 0x13, 0x54, 0x71, 0x23, 0xBC, 0x93, 0x26, 0x32, 0x11, 0x4F, 0xFB,
+ 0x61, 0xD1, 0xD7, 0x15, 0x2F, 0x6F, 0x8C, 0xF9, 0x42, 0x0F, 0xE4, 0x24, 0x20, 0xA8, 0x22, 0x0C, 0x04, 0xFB, 0x1A, 0xB6, 0xF8, 0x89, 0xF7, 0x89, 0xF5, 0xD7, 0x46, 0xB6, 0x7C, 0xE0, 0x72, 0x22, 0x53, 0xD3, 0x23, 0x27, 0x98, 0xCC, 0x8E, 0xF8, 0xA8, 0x58, 0xC7, 0x36, 0x69, 0x0D, 0xF2, 0x20, 0x84, 0x83, 0x2D, 0x7A, 0xA9, 0xA5, 0x8D, 0x41, 0x62, 0xA6, 0x99, 0xAE, 0xBC, 0x92, 0xB0, 0x7B, 0xF6, 0x9A, 0x84, 0x37, 0x2B, 0x16, 0x9A, 0xD7, 0x46, 0x97, 0xB8, 0x72, 0x1B, 0xCC, 0x9F, 0xE7, 0xDD, 0x54, 0x83, 0x33, 0x42, 0xE5, 0x55, 0xEA, 0xC1, 0xC0, 0x00, 0xDE, 0xE8, 0x13, 0xB4, 0x7B, 0x9F, 0x0D, 0xAD, 0xF4,
+ 0xB9, 0xA8, 0xEA, 0x54, 0xDF, 0x44, 0xF1, 0x67, 0xB7, 0x32, 0x0F, 0x84, 0x39, 0xEF, 0x75, 0xE2, 0xBC, 0x21, 0xA3, 0x71, 0x2E, 0xC3, 0x36, 0xE9, 0x9F, 0x2C, 0x6F, 0x35, 0x94, 0x2B, 0x51, 0x9A, 0xB3, 0xA7, 0xDD, 0xA1, 0x02, 0xF9, 0x14, 0x74, 0x58, 0x36, 0x7C, 0x86, 0x5E, 0xD1, 0xAE, 0x77, 0xA7, 0x3E, 0x38, 0x93, 0xB4, 0x50, 0x5F, 0x1E, 0x35, 0xC7, 0x77, 0xA9, 0x24, 0x28, 0xD2, 0xED, 0x9F, 0x8A, 0x67, 0xB6, 0x94, 0x8C, 0xF5, 0x69, 0x19, 0x1B, 0x3C, 0xAA, 0x39, 0x5D, 0x40, 0x6A, 0x33, 0x5A, 0xDA, 0x69, 0x24, 0x59, 0x99, 0x04, 0x90, 0x3E, 0xB3, 0xDE, 0xDC, 0xCB, 0x59, 0x35, 0xEF, 0x1B, 0xC1, 0x68,
+ 0xCD, 0x20, 0x0E, 0x22, 0x94, 0xB7, 0xFC, 0x5B, 0xC0, 0x17, 0x38, 0x3E, 0xB5, 0x9C, 0xBA, 0x78, 0x94, 0xB2, 0x10, 0x05, 0x21, 0x30, 0x4B, 0x2F, 0x8B, 0xF1, 0x8D, 0xFC, 0x2A, 0xBF, 0x89, 0x4E, 0xE1, 0xF9, 0xBF, 0x3C, 0xCF, 0xAA, 0xB1, 0xEC, 0x39, 0x59, 0x9A, 0xE9, 0x07, 0xE1, 0xA0, 0xAA, 0x91, 0x7C, 0x09, 0xF1, 0xD5, 0xD9, 0xA3, 0xF1, 0x0E, 0xD2, 0xBD, 0xE8, 0x65, 0x83, 0xDB, 0xE4, 0x03, 0xFA, 0x19, 0x56, 0x00, 0x3F, 0x3E, 0x94, 0x03, 0xAD, 0x4D, 0x00, 0x7C, 0x47, 0x2C, 0x88, 0x88, 0x53, 0x7C, 0xF2, 0x7B, 0x2A, 0x5A, 0xCB, 0x44, 0x93, 0x4F, 0xDA, 0xE3, 0x2E, 0xC3, 0x1F, 0x4E, 0x14, 0x52, 0x1B,
+ 0x33, 0x5F, 0xB7, 0xCD, 0x1D, 0xB1, 0xDE, 0xFE, 0xE8, 0xCF, 0xC2, 0xEE, 0xEB, 0xA6, 0x79, 0xF5, 0x0C, 0x21, 0x71, 0x95, 0xE1, 0x52, 0xBF, 0x76, 0xD5, 0x35, 0x43, 0x0E, 0xB6, 0x9B, 0x36, 0x34, 0x4E, 0x07, 0xF9, 0x29, 0x34, 0x44, 0x52, 0x15, 0xCC, 0x71, 0x5C, 0x5F, 0x89, 0x32, 0x32, 0x5B, 0x76, 0x8E, 0x08, 0x55, 0x46, 0xD5, 0x4A, 0x78, 0xEB, 0xB2, 0x9A, 0x39, 0xF9, 0xE6, 0xD7, 0x54, 0xE8, 0x59, 0x85, 0x09, 0x2B, 0xE8, 0x2D, 0x5E, 0x7F, 0x09, 0x8F, 0xA2, 0x65, 0x82, 0x54, 0x93, 0x17, 0x56, 0x51, 0x4F, 0x93, 0x2F, 0x92, 0x47, 0x3C, 0x7A, 0x2D, 0x45, 0x45, 0x67, 0x03, 0x02, 0x0C, 0x0B, 0xA4, 0x2A,
+ 0x25, 0x22, 0x2F, 0x8E, 0x87, 0x04, 0x78, 0x12, 0x5C, 0x80, 0x1E, 0xF9, 0x0D, 0xC1, 0x5B, 0x06, 0x4D, 0x43, 0x1D, 0x13, 0x6C, 0xDB, 0x3D, 0xD2, 0x1C, 0x94, 0xA3, 0xBB, 0x62, 0xEB, 0x4F, 0x78, 0xC9, 0x43, 0x5E, 0x5F, 0x84, 0xCB, 0xE8, 0x31, 0x5F, 0xE9, 0xB7, 0xA9, 0xEA, 0x4A, 0xF2, 0xAB, 0x1E, 0x37, 0x7C, 0xAF, 0xE4, 0xF0, 0x4E, 0x3F, 0x6A, 0xA9, 0x04, 0xAB, 0x20, 0x44, 0xFD, 0x81, 0x47, 0x9F, 0x86, 0xF3, 0x59, 0xA5, 0x2A, 0x3D, 0x60, 0xB1, 0xF7, 0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0x30, 0x29, 0x69, 0x4B, 0x22, 0xB2,
+ 0xEE, 0x6A, 0xEC, 0x9B, 0x78, 0x44, 0x9E, 0x51, 0x0F, 0x7C, 0x34, 0x8D, 0xBA, 0x33, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0xC7, 0xDD, 0xD6, 0xA5, 0xC4, 0x14, 0xB6, 0x24, 0xF9, 0x03, 0xB9, 0xB6, 0xA3, 0x5A, 0x4A, 0x09, 0x51, 0x18, 0x5A, 0x19, 0x04, 0x08, 0x35, 0xB5, 0x1D, 0xC3, 0x17, 0x45, 0x8B, 0x92, 0x02, 0x02, 0x08, 0x00 };
public const string base64_cert = @"-----BEGIN CERTIFICATE-----
MIIBxTCCATKgAwIBAgIQx3WuSFObHp5EgBXKeBVHaTAJBgUrDgMCHQUAMCUxIzAh
CheckPkcs12 (new X509Certificate2 (farscape_strong_path_pfx, "farscape"));
}
+ [Test]
+ public void Pkcs12_6_Properties ()
+ {
+ CheckPkcs12 (new X509Certificate2 (openssl_emptypwd_pfx));
+ }
+
private void CheckBase64 (X509Certificate2 x)
{
// note: the raw data is still the DER encoded ASN.1 (not the base64 string)
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Web/System.Web-net_4_5.csproj">\r
<Project>{B489C3DE-3ED3-4EDC-B42B-82B38E101857}</Project>\r
- <Name>System.Web\System.Web-net_4_5</Name>\r
+ <Name>System.Web-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Data/System.Data-net_4_5.csproj">\r
<Project>{9A33954F-57A8-4D75-B1D8-0F81808A0DD4}</Project>\r
- <Name>System.Data\System.Data-net_4_5</Name>\r
+ <Name>System.Data-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xaml/System.Xaml-net_4_5.csproj">\r
<Project>{F574F9BD-1838-4C13-8722-7D6D33DE1781}</Project>\r
- <Name>System.Xaml\System.Xaml-net_4_5</Name>\r
+ <Name>System.Xaml-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
bool ICollection<KeyValuePair<TKey,TValue>>.Contains (KeyValuePair<TKey, TValue> pair)
{
- return ContainsKey (pair.Key);
+ TValue value;
+ if (!TryGetValue (pair.Key, out value))
+ return false;
+
+ return EqualityComparer<TValue>.Default.Equals (value, pair.Value);
}
public KeyValuePair<TKey,TValue>[] ToArray ()
using System.Runtime.Serialization;
using System.Security;
-#if !NET_2_1
+#if !MOBILE
using System.Security.AccessControl;
#endif
}
}
-#if !NET_2_1
public bool IsReadOnly {
get {
if (!Exists)
// handling this exception to work properly.
throw new NotSupportedException (Locale.GetText ("File encryption isn't supported on any file system."));
}
-#endif
public long Length {
get {
public override string ToString ()
{
-#if NET_2_1
- // for Moonlight we *never* return paths, since ToString is not [SecurityCritical] we simply return the Name
- return Name;
-#else
return OriginalPath;
-#endif
}
-#if !NET_2_1
+#if !MOBILE
public FileSecurity GetAccessControl ()
{
return File.GetAccessControl (FullPath);
using System.Security.Permissions;
using System.Diagnostics.SymbolStore;
+#if !NET_4_5
+using TypeInfo = System.Type;
+#endif
+
namespace System.Reflection.Emit
{
[ComVisible (true)]
[ComDefaultInterface (typeof (_TypeBuilder))]
[ClassInterface (ClassInterfaceType.None)]
[StructLayout (LayoutKind.Sequential)]
- public sealed class TypeBuilder :
-#if NET_4_5
- TypeInfo
-#else
- Type
-#endif
- , _TypeBuilder
+ public sealed class TypeBuilder : TypeInfo, _TypeBuilder
{
#pragma warning disable 169
#region Sync with reflection.h
private IntPtr generic_container;
private GenericTypeParameterBuilder[] generic_params;
private RefEmitPermissionSet[] permissions;
- private Type created;
+ private TypeInfo created;
#endregion
#pragma warning restore 169
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern Type create_runtime_class (TypeBuilder tb);
+ private extern TypeInfo create_runtime_class (TypeBuilder tb);
private bool is_nested_in (Type t)
{
return false;
}
+
+ public Type CreateType ()
+ {
+ return CreateTypeInfo ();
+ }
- public Type CreateType()
+#if NET_4_5
+ public
+#endif
+ TypeInfo CreateTypeInfo ()
{
/* handle nesting_type */
if (createTypeCalled)
{
public static class ClaimTypes
{
+ public const string Actor = "http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor";
+
public const string Anonymous = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous";
public const string Authentication = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authentication";
+ public const string AuthenticationInstant = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant";
+
+ public const string AuthenticationMethod = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod";
+
public const string AuthorizationDecision = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision";
+ public const string ClaimsType2005Namespace = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims";
+
+ public const string ClaimsType2009Namespace = "http://schemas.xmlsoap.org/ws/2009/09/identity/claims";
+
+ public const string ClaimsTypeNamespace = "http://schemas.microsoft.com/ws/2008/06/identity/claims";
+
+ public const string CookiePath = "http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath";
+
public const string Country = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country";
public const string DateOfBirth = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth";
+ public const string DenyOnlyPrimaryGroup = "http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroup";
+
+ public const string DenyOnlyPrimarySid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid";
+
public const string DenyOnlySid = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid";
public const string Dns = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns";
- public const string Email = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";
+ public const string Dsa = "http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa";
+
+ public const string Email = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email";
+
+ public const string Expiration = "http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration";
+
+ public const string Expired = "http://schemas.microsoft.com/ws/2008/06/identity/claims/expired";
public const string Gender = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender";
public const string GivenName = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname";
+ public const string GroupSid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid";
+
public const string Hash = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash";
public const string HomePhone = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone";
+ public const string IsPersistent = "http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent";
+
public const string Locality = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality";
public const string MobilePhone = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone";
public const string PPID = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier";
+ public const string PrimaryGroupSid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid";
+
+ public const string PrimarySid = "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid";
+
+ public const string Role = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
+
public const string Rsa = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa";
+ public const string SerialNumber = "http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber";
+
public const string Sid = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid";
public const string Spn = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn";
public const string Uri = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri";
+ public const string UserData = "http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata";
+
+ public const string Version = "http://schemas.microsoft.com/ws/2008/06/identity/claims/version";
+
public const string Webpage = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage";
+ public const string WindowsAccountName = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname";
+
public const string X500DistinguishedName = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname";
}
}
-#endif
\ No newline at end of file
+#endif
List<Claim> claims;
ClaimsIdentity actor;
+ string auth_type;
public ClaimsIdentity ()
: this (claims: null, authenticationType: null, nameType: null, roleType: null)
{
claims = claims == null ? new List<Claim> (): new List<Claim> (claims);
- AuthenticationType = authenticationType;
-
// Special case: if empty, set to null.
if (authenticationType == "")
- AuthenticationType = null;
-
+ auth_type = null;
+ else
+ auth_type = authenticationType;
+
NameClaimType = nameType == null ? DefaultNameClaimType : nameType;
RoleClaimType = roleType == null ? DefaultRoleClaimType : roleType;
}
foreach (var c in ci.Claims)
this.claims.Add (c);
- foreach (var c in claims)
- this.claims.Add (c);
+ if (claims != null) {
+ foreach (var c in claims)
+ this.claims.Add (c);
+ }
Label = ci.Label;
NameClaimType = ci.NameClaimType;
RoleClaimType = ci.RoleClaimType;
- AuthenticationType = ci.AuthenticationType;
+ auth_type = ci.AuthenticationType;
}
}
}
}
- public virtual string AuthenticationType { get; private set; }
+ public virtual string AuthenticationType {
+ get {
+ return auth_type;
+ }
+ }
public object BootstrapContext { get; set; }
public string Label { get; set; }
public virtual string Name {
}
}
}
-#endif
\ No newline at end of file
+#endif
if (identities == null)
throw new ArgumentNullException ("identities");
- identities = new List<ClaimsIdentity> (identities);
+ this.identities = new List<ClaimsIdentity> (identities);
}
public ClaimsPrincipal (IIdentity identity)
{
if (identity == null)
throw new ArgumentNullException ("identity");
- // TODO
+
+ identities = new List<ClaimsIdentity> ();
+ identities.Add (new ClaimsIdentity (identity));
}
public ClaimsPrincipal (IPrincipal principal)
}
}
-#endif
\ No newline at end of file
+#endif
}
public AggregateException (params Exception[] innerExceptions)
- : this (string.Empty, innerExceptions)
+ : this (defaultMessage, innerExceptions)
{
}
// Authors:
// Sebastien Pouliot <sebastien@xamarin.com>
//
-// Copyright 2012-2013 Xamarin Inc. All rights reserved.
+// Copyright 2012-2014 Xamarin Inc. All rights reserved.
//
#if FULL_AOT_RUNTIME
extern static void monotouch_log (string s);
[DllImport ("/usr/lib/libSystem.dylib")]
- extern static int write (int fd, byte [] buffer, int n);
+ extern static /* ssize_t */ IntPtr write (int fd, byte [] buffer, /* size_t */ IntPtr n);
StringBuilder sb;
static void direct_write_to_stdout (string s)
{
byte [] b = Encoding.Default.GetBytes (s);
- while (write (1, b, b.Length) == -1 && Marshal.GetLastWin32Error () == /* EINTR*/ 4)
+ var len = (IntPtr) b.Length;
+ while ((int) write (1, b, len) == -1 && Marshal.GetLastWin32Error () == /* EINTR*/ 4)
;
}
"yyyy/MMMM",
};
+ private static readonly string[] ExoticAndNonStandardFormats = new string[] {
+ "ddMMMyyyy"
+ };
+
private enum Which
{
Day,
if (ParseExact (s, dfi.GetAllDateTimePatternsInternal (), dfi, styles, out result, false, ref longYear, setExceptionOnError, ref exception))
return true;
+ if (ParseExact (s, ExoticAndNonStandardFormats, dfi, styles, out result, false, ref longYear, setExceptionOnError, ref exception))
+ return true;
+
if (!setExceptionOnError)
return false;
return GetLogicalDrivesInternal ();
}
-#if !NET_2_1
+#if !MOBILE
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private static extern void internalBroadcastSettingChange ();
throw new ArgumentException ("target");
}
}
+#else
+ public static void SetEnvironmentVariable (string variable, string value)
+ {
+ if (variable == null)
+ throw new ArgumentNullException ("variable");
+ if (variable == String.Empty)
+ throw new ArgumentException ("String cannot be of zero length.", "variable");
+ if (variable.IndexOf ('=') != -1)
+ throw new ArgumentException ("Environment variable name cannot contain an equal character.", "variable");
+ if (variable[0] == '\0')
+ throw new ArgumentException ("The first char in the string is the null character.", "variable");
+ InternalSetEnvironmentVariable (variable, value);
+ }
+#endif
[MethodImplAttribute (MethodImplOptions.InternalCall)]
internal static extern void InternalSetEnvironmentVariable (string variable, string value);
-#endif
+
[SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode=true)]
public static void FailFast (string message)
{
} catch (ArgumentNullException ex) {
}
}
+
+ [Test]
+ public void ContainsKeyPairTest ()
+ {
+ var validKeyPair = new KeyValuePair<string, string> ("key", "validValue");
+ var wrongKeyPair = new KeyValuePair<string, string> ("key", "wrongValue");
+
+ IDictionary<string, string> dict = new ConcurrentDictionary<string, string> ();
+ dict.Add (validKeyPair);
+
+ Assert.IsTrue (dict.Contains (validKeyPair));
+ Assert.IsFalse (dict.Contains (wrongKeyPair));
+ }
}
}
#endif
{
queue.CopyTo (new int[3], 0);
}
-
+
static WeakReference CreateWeakReference (object obj)
{
return new WeakReference (obj);
}
-
+
[Test]
+ // This depends on precise stack scanning
+ [Category ("NotWorking")]
public void TryDequeueReferenceTest ()
{
var obj = new Object ();
}
[Test]
+ [Category("MobileNotWorking")]
public void TaskContinuationChainLeak()
{
// Start cranking out tasks, starting each new task upon completion of and from inside the prior task.
DateTime.Parse ("Sat,,, 01,,, Oct,,, ,,,1994 03:00:00", CultureInfo.InvariantCulture);
}
+ [Test]
+ public void TryParse_Bug11630 ()
+ {
+ DateTime parsed;
+
+ Assert.IsTrue (DateTime.TryParse ("10Feb2013", out parsed));
+ Assert.AreEqual (new DateTime (2013, 2, 10), parsed);
+ }
+
[Test]
[ExpectedException (typeof (FormatException))]
public void Parse_CommaAfterHours ()
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
public string Htmlize (XmlReader ecma_xml, XsltArgumentList args)
{
- EnsureTransform ();
-
- var output = new StringBuilder ();
- ecma_transform.Transform (ecma_xml,
- args,
- XmlWriter.Create (output, ecma_transform.OutputSettings),
- CreateDocumentResolver ());
- return output.ToString ();
+ try{
+ EnsureTransform ();
+
+ var output = new StringBuilder ();
+ ecma_transform.Transform (ecma_xml,
+ args,
+ XmlWriter.Create (output, ecma_transform.OutputSettings),
+ CreateDocumentResolver ());
+ return output.ToString ();
+ }
+ catch(Exception x)
+ {
+ var msg = x.ToString ();
+ return msg;
+ }
}
protected virtual XmlResolver CreateDocumentResolver ()
public string Export (Stream stream, Dictionary<string, string> extraArgs)
{
- return Htmlize (XmlReader.Create (WrapStream (new StreamReader (stream), extraArgs)), extraArgs);
+ return Htmlize (XmlReader.Create (new StreamReader(stream)), extraArgs);
}
public string Export (string input, Dictionary<string, string> extraArgs)
{
- return Htmlize (XmlReader.Create (WrapStream (new StringReader (input), extraArgs)), extraArgs);
+ return Htmlize (XmlReader.Create (new StringReader(input)), extraArgs);
}
- TextReader WrapStream (TextReader initialReader, Dictionary<string, string> renderArgs)
- {
- string show;
- if (renderArgs.TryGetValue ("show", out show) && show == "namespace")
- return new AvoidCDataTextReader (initialReader);
- return initialReader;
- }
static void EnsureTransform ()
{
}
}
}
-
- public class AvoidCDataTextReader : TextReader
- {
- static readonly char[] CDataPattern = new[] {
- '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '['
- };
- static readonly char[] CDataClosingPattern = new[] {
- ']', ']', '>'
- };
- TextReader wrappedReader;
- char[] backingArray = new char[9]; // "<![CDATA[".Length
- int currentIndex = -1;
- int eofIndex = -1;
- bool inCData;
-
- public AvoidCDataTextReader (TextReader wrappedReader)
- {
- this.wrappedReader = wrappedReader;
- }
-
- public override int Peek ()
- {
- if (!EnsureBuffer ())
- return -1;
- return (int)backingArray[currentIndex];
- }
-
- public override int Read ()
- {
- if (!EnsureBuffer ())
- return -1;
- var result = (int)backingArray[currentIndex];
- var next = wrappedReader.Read ();
- if (next == -1 && eofIndex == -1)
- eofIndex = currentIndex;
- else
- backingArray[currentIndex] = (char)next;
- currentIndex = (currentIndex + 1) % backingArray.Length;
- return result;
- }
-
- void ReadLength (int length)
- {
- for (int i = 0; i < length; i++)
- Read ();
- }
-
- bool EnsureBuffer ()
- {
- if (currentIndex == -1) {
- currentIndex = 0;
- var read = wrappedReader.ReadBlock (backingArray, 0, backingArray.Length);
- if (read < backingArray.Length)
- eofIndex = read;
- return read > 0;
- } else if (currentIndex == eofIndex) {
- return false;
- }
- if (!inCData && PatternDetect (CDataPattern)) {
- inCData = true;
- ReadLength (CDataPattern.Length);
- return EnsureBuffer ();
- }
- if (inCData && PatternDetect (CDataClosingPattern)) {
- inCData = false;
- ReadLength (CDataClosingPattern.Length);
- return EnsureBuffer ();
- }
-
- return true;
- }
-
- bool PatternDetect (char[] pattern)
- {
- return backingArray[currentIndex] == pattern[0] && Enumerable.Range (1, pattern.Length - 1).All (i => backingArray[(currentIndex + i) % backingArray.Length] == pattern[i]);
- }
- }
+
}
+++ /dev/null
-using System;
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Collections.Generic;
-
-using NUnit.Framework;
-
-using Monodoc;
-using Monodoc.Generators;
-using Monodoc.Generators.Html;
-
-namespace MonoTests.Monodoc.Generators
-{
- [TestFixture]
- public class AvoidCDataTextReaderTest
- {
- void AssertSameInputOutput (string expected, string input)
- {
- var processed = new AvoidCDataTextReader (new StringReader (input)).ReadToEnd ();
- Assert.AreEqual (expected, processed);
- }
-
- [Test]
- public void NoCDataXmlTest ()
- {
- var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
- Provides access to the system Address Book.
- </summary></class></elements>";
-
- AssertSameInputOutput (input, input);
- }
-
- [Test]
- public void WithCDataXmlTest ()
- {
- var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary><![CDATA[
- Provides access to the system Address Book.]]>
- </summary></class></elements>";
-
- AssertSameInputOutput (input.Replace ("<![CDATA[", string.Empty).Replace ("]]>", string.Empty), input);
- }
-
- [Test]
- public void PartialCDataXmlTest ()
- {
- var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary><![CDA[
- Provides access to the system Address Book.]]>
- </summary></class></elements>";
-
- AssertSameInputOutput (input, input);
- }
-
- [Test]
- public void FinishWithPartialCDataXmlTest ()
- {
- var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
- Provides access to the system Address Book.
- </summary></class></elements><![CDA[";
-
- AssertSameInputOutput (input, input);
- }
-
- [Test]
- public void FinishWithCDataXmlTest ()
- {
- var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
- Provides access to the system Address Book.
- </summary></class></elements><![CDATA[";
-
- AssertSameInputOutput (input.Replace ("<![CDATA[", string.Empty), input);
- }
-
- [Test]
- public void EmptyInputTest ()
- {
- AssertSameInputOutput (string.Empty, string.Empty);
- }
-
- [Test]
- public void LimitedInputTest ()
- {
- AssertSameInputOutput ("foo", "foo");
- }
- }
-}
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib-net_4_5.csproj">\r
<Project>{0B587DBA-BA92-4B92-821A-AA200C612A7E}</Project>\r
- <Name>ICSharpCode.SharpZipLib\ICSharpCode.SharpZipLib-net_4_5</Name>\r
+ <Name>ICSharpCode.SharpZipLib-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System/System-net_4_5.csproj">\r
<Project>{FFAC0B73-D997-493B-9C62-27656CD858BB}</Project>\r
- <Name>System\System-net_4_5</Name>\r
+ <Name>System-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Core/System.Core-net_4_5.csproj">\r
<Project>{D92530F4-3F2B-4351-BD21-9D6BEE6D2A4E}</Project>\r
- <Name>System.Core\System.Core-net_4_5</Name>\r
+ <Name>System.Core-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.XML/System.Xml-net_4_5.csproj">\r
<Project>{2951DEC2-4393-4A78-83F9-42EB39CB708F}</Project>\r
- <Name>System.XML\System.Xml-net_4_5</Name>\r
+ <Name>System.Xml-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Xml.Linq/System.Xml.Linq-net_4_5.csproj">\r
<Project>{8328796E-8A15-4972-8F1E-2F15E7D57C42}</Project>\r
- <Name>System.Xml.Linq\System.Xml.Linq-net_4_5</Name>\r
+ <Name>System.Xml.Linq-net_4_5</Name>\r
</ProjectReference>\r
<ProjectReference Include="../System.Configuration/System.Configuration-net_4_5.csproj">\r
<Project>{D52A2CEA-245E-4877-950E-3EAC5F541B8E}</Project>\r
- <Name>System.Configuration\System.Configuration-net_4_5</Name>\r
+ <Name>System.Configuration-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
Monodoc.Generators/RawGeneratorTests.cs
Monodoc/NodeTest.cs
Monodoc/RootTreeTest.cs
-Monodoc.Generators/AvoidCDataTextReaderTests.cs
--- /dev/null
+.assembly extern mscorlib
+{
+}
+
+.assembly extern System.Core
+{
+}
+
+.assembly extern 'CS0012-lib-missing'
+{
+}
+
+.assembly 'CS0012-23-lib'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+
+.module 'CS0012-23-lib.dll'
+
+
+.class public abstract auto ansi sealed beforefieldinit B
+ extends [mscorlib]System.Object
+{
+ .field public static valuetype ['CS0012-lib-missing']Struct`1<int32>[] ArrayMember
+}
+++ /dev/null
-using System;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-[assembly: AssemblyVersion ("1.0.0.0")]
-[assembly: AssemblyCulture ("en-US")]
-
-public class Lang
-{
-}
--- /dev/null
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyVersion ("1.0.0.0")]
+[assembly: AssemblyCulture ("en-US")]
+
+public class Lang
+{
+}
$(wildcard dlls/second/*.cs)
TEST_SUPPORT_FILES = \
- CS0012-lib.dll CS0012-2-lib.dll CS0012-3-lib.dll CS0012-4-lib.dll CS0012-5-lib.dll CS0012-6-lib.dll CS0012-9-lib.dll CS0012-10-lib.dll CS0012-11-lib.dll CS0012-12-lib.dll CS0012-13-lib.dll CS0012-14-lib.dll CS0012-15-lib.dll CS0012-16-lib.dll CS0012-17-lib.dll CS0012-18-lib.dll CS0012-21-lib.dll CS0012-22-lib.dll CS0019-71-lib.dll CS0029-26-lib.dll \
+ CS0012-lib.dll CS0012-2-lib.dll CS0012-3-lib.dll CS0012-4-lib.dll CS0012-5-lib.dll CS0012-6-lib.dll CS0012-9-lib.dll CS0012-10-lib.dll CS0012-11-lib.dll CS0012-12-lib.dll CS0012-13-lib.dll CS0012-14-lib.dll CS0012-15-lib.dll CS0012-16-lib.dll CS0012-17-lib.dll CS0012-18-lib.dll CS0012-21-lib.dll CS0012-22-lib.dll CS0012-23-lib.dll CS0019-71-lib.dll CS0029-26-lib.dll \
CS0103-2-lib.dll CS0118-2-lib.dll CS0122-8-lib.dll CS0122-10-lib.dll CS0122-14-lib.dll CS0122-15-lib.dll CS0122-19-lib.dll CS0122-35-lib.dll CS0122-36-lib.dll CS0143-lib.dll CS0144-3-lib.dll CS0165-19-lib.dll \
CS0205-3-lib.dll CS0246-29-lib.dll CS0229-3-lib.dll CS0229-4-lib.dll CS0266-25-lib.dll \
CS0315-2-lib.dll \
CS0730-lib.dll CS0731-1-lib.dll CS0731-2-lib.dll \
CS1070-lib.dll \
CS1540-15-lib.dll CS1540-17-lib.dll CS1542-lib.dll CS1577-lib.dll \
- CS1607-3-lib.dll CS1683-lib.dll CS1684-lib.dll CS1685-2-lib.dll \
+ CS1683-lib.dll CS1684-lib.dll CS1685-2-lib.dll \
dlls/first/CS1701-lib.dll dlls/second/CS1701-lib.dll CS1701-lib.dll dlls/first/CS1702-lib.dll dlls/second/CS1702-lib.dll CS1702-lib.dll dlls/first/CS1705-lib.dll dlls/second/CS1705-lib.dll CS1705-lib.dll \
CS2015-lib.dll CS3005-16-lib.dll CS3013-module.dll CSExternAlias-lib.dll \
+ CS8009-lib.dll \
CSFriendAssembly-lib.dll \
dlls/first/CS1703-lib.dll dlls/first/CS1704-lib.dll \
dlls/second/CS1703-lib.dll dlls/second/CS1704-lib.dll
--- /dev/null
+// CS0012: The type `Struct`1<int>' is defined in an assembly that is not referenced. Consider adding a reference to assembly `CS0012-lib-missing, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
+// Line: 9
+// Compiler options: -r:CS0012-23-lib.dll
+
+public class C
+{
+ public static void Main ()
+ {
+ var val = B.ArrayMember;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0070: The event `A.evt' can only appear on the left hand side of += or -= when used outside of the type `A'
+// Line: 22
+
+using System;
+
+public static class EventExtensions
+{
+ public static void Raise (this EventHandler h)
+ {
+ }
+}
+
+public class A
+{
+ public event EventHandler evt;
+}
+
+public class B : A
+{
+ public void Run()
+ {
+ Action a = () => evt.Raise ();
+ }
+}
\ No newline at end of file
+++ /dev/null
-// CS0127: `C.GetValue()': A return keyword must not be followed by any expression when method returns void
-// Line: 11
-
-using System;
-using System.Threading.Tasks;
-
-class C
-{
- public async void GetValue()
- {
- return await Task.FromResult(100);
- }
-}
+++ /dev/null
-// CS0127: `System.Action': A return keyword must not be followed by any expression when delegate returns void
-// Line: 10
-
-using System;
-
-class C
-{
- public void Test ()
- {
- Action a = () => { return Skip (); };
- }
-
- void Skip ()
- {
- }
-}
+++ /dev/null
-// CS0127: `D': A return keyword must not be followed by any expression when delegate returns void
-// Line: 9
-
-delegate void D (int x);
-
-class X {
- static void Main ()
- {
- D d6 = delegate (int x) { return x; }; // Return type mismatch.
- }
-}
--- /dev/null
+// CS0133: The expression being assigned to `o' must be constant
+// Line: 8
+
+class X
+{
+ void Foo ()
+ {
+ const object o = "" ?? null;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0133: The expression being assigned to `o' must be constant
+// Line: 8
+
+class X
+{
+ void Foo ()
+ {
+ const object o = null ?? "";
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0181: Attribute constructor parameter has type `int[][]', which is not a valid attribute parameter type
+// Line: 13
+
+using System;
+
+class TestAttribute: Attribute
+{
+ public TestAttribute (int[][] o) {}
+}
+
+public class E
+{
+ [Test (null)]
+ public static void Main ()
+ {
+ System.Reflection.MethodBase.GetCurrentMethod().GetCustomAttributes (true);
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0181: Attribute constructor parameter has type `System.Enum', which is not a valid attribute parameter type
+// Line: 18
+
+using System;
+
+enum E
+{
+ Value
+}
+
+class AAttribute : Attribute
+{
+ public AAttribute (Enum e)
+ {
+ }
+}
+
+[A (E.Value)]
+class Test
+{
+}
\ No newline at end of file
--- /dev/null
+// CS0181: Attribute constructor parameter has type `System.Attribute', which is not a valid attribute parameter type
+// Line: 6
+
+using System;
+
+[BAttribute (null)]
+public class BAttribute : Attribute
+{
+ public BAttribute (Attribute a)
+ {
+ }
+
+ public static void Main ()
+ {
+ }
+}
--- /dev/null
+// CS0181: Attribute constructor parameter has type `int[,]', which is not a valid attribute parameter type
+// Line: 13
+
+using System;
+
+class TestAttribute: Attribute
+{
+ public TestAttribute (int[,] i) {}
+}
+
+public class E
+{
+ [Test (null)]
+ public void Method () {}
+}
\ No newline at end of file
+++ /dev/null
-// CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression
-// Line: 13
-
-using System;
-
-class TestAttribute: Attribute
-{
- public TestAttribute (int[][] o) {}
-}
-
-public class E
-{
- [Test (null)]
- public static void Main ()
- {
- System.Reflection.MethodBase.GetCurrentMethod().GetCustomAttributes (true);
- }
-}
\ No newline at end of file
+++ /dev/null
-// CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression
-// Line: 18
-
-using System;
-
-enum E
-{
- Value
-}
-
-class AAttribute : Attribute
-{
- public AAttribute (Enum e)
- {
- }
-}
-
-[A (E.Value)]
-class Test
-{
-}
\ No newline at end of file
+++ /dev/null
-// CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression
-// Line: 6
-
-using System;
-
-[BAttribute (null)]
-public class BAttribute : Attribute
-{
- public BAttribute (Attribute a)
- {
- }
-
- public static void Main ()
- {
- }
-}
+++ /dev/null
-// CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression
-// Line: 13
-
-using System;
-
-class TestAttribute: Attribute
-{
- public TestAttribute (int[,] i) {}
-}
-
-public class E
-{
- [Test (null)]
- public void Method () {}
-}
\ No newline at end of file
--- /dev/null
+// CS0253: Possible unintended reference comparison. Consider casting the right side expression to type `System.Action' to get value comparison
+// Line: 13
+// Compiler options: -warnaserror
+
+using System;
+
+class MainClass
+{
+ public static void Main ()
+ {
+ Action a = null;
+ object b = null;
+ var x = a == b;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0545: `B.Prop': cannot override because `A.Prop' does not have accessible get accessor
+// Line: 13
+
+public class A
+{
+ public virtual string Prop {
+ set; private get;
+ }
+}
+
+public class B : A
+{
+ sealed override public string Prop {
+ set { }
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0546: `B.Prop': cannot override because `A.Prop' does not have accessible set accessor
+// Line: 13
+
+public class A
+{
+ public virtual string Prop {
+ get; private set;
+ }
+}
+
+public class B : A
+{
+ sealed override public string Prop {
+ get { return ""; }
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0591: Invalid value for argument to `System.Runtime.InteropServices.GuidAttribute' attribute
+// Line: 6
+
+using System.Runtime.InteropServices;
+
+[Guid ("aaa")]
+class X {
+static void Main () {}
+}
--- /dev/null
+// CS0591: Invalid value for argument to `System.Runtime.InteropServices.DllImportAttribute' attribute
+// Line: 8
+
+using System.Runtime.InteropServices;
+using System;
+
+class X {
+ [DllImport ("")]
+ extern static void Blah ();
+
+ static void Main (string [] args)
+ {
+ }
+
+}
--- /dev/null
+// CS0591: Invalid value for argument to `System.Runtime.InteropServices.DllImportAttribute' attribute
+// Line: 8
+
+using System.Runtime.InteropServices;
+using System;
+
+class X {
+ [DllImport (null)]
+ extern static void Blah ();
+
+ static void Main (string [] args)
+ {
+ }
+
+}
--- /dev/null
+// CS0591: Invalid value for argument to `System.Runtime.CompilerServices.MethodImplAttribute' attribute
+// Line: 8
+
+using System.Runtime.CompilerServices;
+
+class Test
+{
+ [MethodImplAttribute(445)]
+ public void test ()
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0591: Invalid value for argument to `System.Runtime.CompilerServices.MethodImplAttribute' attribute
+// Line: 8
+
+using System.Runtime.CompilerServices;
+
+class Program
+{
+ [MethodImpl((MethodImplOptions)255)]
+ void Foo()
+ {
+ }
+}
\ No newline at end of file
-// CS0591: Invalid value for argument to `System.AttributeUsage' attribute
+// CS0591: Invalid value for argument to `System.AttributeUsageAttribute' attribute
// Line: 4
[System.AttributeUsage(0)]
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.InteropServices.MarshalAsAttribute' attribute. The reason is `Specified unmanaged type is only valid on fields'
-// Line: 10
-
-using System;
-using System.Runtime.InteropServices;
-
-public class main {
-
- [DllImport("libname", EntryPoint = "scumbag")]
- static extern int scumbag(ref int X, [MarshalAs(UnmanagedType.ByValArray)] ref byte[] fb);
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.InteropServices.MarshalAsAttribute' attribute. The reason is `Specified unmanaged type is only valid on fields'
-// Line: 10
-
-using System;
-using System.Runtime.InteropServices;
-
-public class main {
-
- [DllImport("libname", EntryPoint = "scumbag")]
- static extern int scumbag(ref int X, [MarshalAs(UnmanagedType.ByValArray)] ref byte[] fb);
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.InteropServices.DllImportAttribute' attribute. The reason is `DllName cannot be empty or null'
-// Line: 8
-
-using System.Runtime.InteropServices;
-using System;
-
-class X {
- [DllImport ("")]
- extern static void Blah ();
-
- static void Main (string [] args)
- {
- }
-
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.InteropServices.DllImportAttribute' attribute. The reason is `DllName cannot be empty or null'
-// Line: 8
-
-using System.Runtime.InteropServices;
-using System;
-
-class X {
- [DllImport (null)]
- extern static void Blah ();
-
- static void Main (string [] args)
- {
- }
-
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.CompilerServices.MethodImplAttribute' attribute. The reason is `Incorrect argument value'
-// Line: 8
-
-using System.Runtime.CompilerServices;
-
-class Test
-{
- [MethodImplAttribute(445)]
- public void test ()
- {
- }
-}
\ No newline at end of file
+++ /dev/null
-// CS0647: Error during emitting `System.Reflection.AssemblyCultureAttribute' attribute. The reason is `The executables cannot be satelite assemblies, remove the attribute or keep it empty'
-// Line: 7
-
-using System;
-using System.Reflection;
-
-[assembly: AssemblyCulture("es")]
-[assembly: AssemblyVersion("1.2.3456.7")]
-
-namespace NS
-{
- class MyClass
- {
- static void Main ()
- {
- Console.WriteLine (typeof(MyClass).Assembly.FullName);
- }
- }
-}
+++ /dev/null
-// Cs0647: Error during emitting `System.Reflection.AssemblyVersionAttribute' attribute. The reason is `Specified version `0.0.0.80420' is not valid'
-// Line: 7
-
-using System;
-using System.Reflection;
-
-[assembly: AssemblyVersion ("0.0.0.80420")]
-
-public class Test {
-
- public static int Main ()
- {
- return 1;
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Reflection.AssemblyVersionAttribute' attribute. The reason is `Specified version `2.0.*.*' is not valid'
-// Line: 6
-
-using System.Reflection;
-
-[assembly: AssemblyVersion("2.0.*.*")]
+++ /dev/null
-// CS0647: Error during emitting `System.Reflection.AssemblyVersionAttribute' attribute. The reason is `Specified version `2.*' is not valid'
-// Line: 6
-
-using System.Reflection;
-
-[assembly: AssemblyVersion("2.*")]
+++ /dev/null
-// CS0647: Error during emitting `System.Security.Permissions.SecurityPermissionAttribute' attribute. The reason is `SecurityAction `Demand' is not valid for this declaration'
-// Line : 10
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-[assembly: SecurityPermission (SecurityAction.Demand, SkipVerification=true)]
-
-class Test
-{
- static void Main () {}
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.CompilerServices.MethodImplAttribute' attribute. The reason is `Incorrect argument value'
-// Line: 8
-
-using System.Runtime.CompilerServices;
-
-class Program
-{
- [MethodImpl((MethodImplOptions)255)]
- void Foo()
- {
- }
-}
\ No newline at end of file
+++ /dev/null
-// CS0647: Error during emitting `System.Security.Permissions.SecurityPermissionAttribute' attribute. The reason is `SecurityAction `RequestMinimum' is not valid for this declaration'
-// Line : 10
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
-
- [SecurityPermission (SecurityAction.RequestMinimum, ControlPrincipal=true, Flags=SecurityPermissionFlag.ControlPrincipal)]
- static public void Main (string[] args)
- {
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `DebugPermissionAttribute' attribute. The reason is `it is attached to invalid parent'
-// Line : 10
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
-
- [DebugPermission (SecurityAction.RequestMinimum)]
- public int i;
-}
-
-[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
-[Serializable]
-public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
-
- public DebugPermissionAttribute (SecurityAction action)
- : base (action)
- {
- }
-
- public override IPermission CreatePermission ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `DebugPermissionAttribute' attribute. The reason is `it is attached to invalid parent'
-// Line : 11
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
- public delegate int DisplayHandler (string msg);
-
- [DebugPermission (SecurityAction.RequestMinimum)]
- public event DisplayHandler OnShow;
-}
-
-[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
-[Serializable]
-public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
-
- public DebugPermissionAttribute (SecurityAction action)
- : base (action)
- {
- }
-
- public override IPermission CreatePermission ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `DebugPermissionAttribute' attribute. The reason is `it is attached to invalid parent'
-// Line : 11
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
-
- [return: DebugPermission (SecurityAction.LinkDemand)]
- public int Show (string message)
- {
- return 2;
- }
-}
-
-[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
-[Serializable]
-public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
-
- public DebugPermissionAttribute (SecurityAction action)
- : base (action)
- {
- }
-
- public override IPermission CreatePermission ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `DebugPermissionAttribute' attribute. The reason is `it is attached to invalid parent'
-// Line : 11
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
-
- [DebugPermission (SecurityAction.LinkDemand)]
- public int Show
- {
- get {
- return 2;
- }
- }
-}
-
-[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
-[Serializable]
-public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
-
- public DebugPermissionAttribute (SecurityAction action)
- : base (action)
- {
- }
-
- public override IPermission CreatePermission ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Security.Permissions.PrincipalPermissionAttribute' attribute. The reason is `SecurityAction is out of range'
-// Line : 10
-
-using System;
-using System.Security;
-using System.Security.Permissions;
-
-public class Program {
-
- [PrincipalPermission ((SecurityAction)100, Name="Poupou")]
- public virtual void Show (string message)
- {
- }
-}
+++ /dev/null
-// CS0647: Error during emitting `System.Runtime.InteropServices.GuidAttribute' attribute. The reason is `Invalid Guid format: aaa'
-// Line: 6
-
-using System.Runtime.InteropServices;
-
-[Guid ("aaa")]
-class X {
-static void Main () {}
-}
--- /dev/null
+// CS1501: No overload for method `Block' takes `2' arguments
+// Line: 12
+
+class X
+{
+ public static void Block (object type, object variables, params object[] expressions)
+ {
+ }
+
+ public static void Main ()
+ {
+ Block (variables: null, expressions: null);
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS1593: Delegate `System.Action<System.Threading.Tasks.Task>' does not take `0' arguments
+// Line: 17
+
+using System;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+
+namespace CrashRepro.Core
+{
+ public class X
+ {
+ async void Foo ()
+ {
+ var pushes = await Run ().ContinueWith (l =>
+ {
+ for (int i = 0; i < 1; ++i)
+ Run ().ContinueWith(() => { });
+ });
+ }
+
+ Task Run ()
+ {
+ return null;
+ }
+ }
+}
+
+++ /dev/null
-// CS1607: The version number `1.*' specified for `AssemblyFileVersion' is invalid
-// Line: 7
-// Compiler options: -warnaserror
-
-using System.Reflection;
-
-[assembly: AssemblyFileVersion ("1.*")]
+++ /dev/null
-// CS1607: Referenced assembly `CS1607-3-lib' has different culture setting of `en-US'
-// Line: 0
-// Compiler options: -r:CS1607-3-lib.dll -warnaserror
-
-using System;
-
-class Program
-{
- static void Main ()
- {
- Console.WriteLine (typeof (Lang));
- }
-}
-// CS1617: Invalid -langversion option `ISO'. It must be `ISO-1', `ISO-2', `3', `4', `5', `Default' or `Future'
+// CS1617: Invalid -langversion option `ISO'. It must be `ISO-1', `ISO-2', Default or value in range 1 to 6
// Line: 0
// Compiler options: -langversion:ISO
--- /dev/null
+// CS1644: Feature `exception filter' cannot be used because it is not part of the C# 5.0 language specification
+// Line: 14
+// Compiler options: -langversion:5
+
+using System;
+
+class X
+{
+ public static void Main ()
+ {
+ int x = 4;
+ try {
+ throw null;
+ } catch (Exception) if (x > 0) {
+ }
+ }
+}
-// CS1700: Assembly reference `MyAssemblyName, Version=' is invalid and cannot be resolved
+// CS1700: Friend assembly reference `MyAssemblyName, Version=' is invalid and cannot be resolved
// Line: 8
// Compiler options: -warnaserror -warn:3
+++ /dev/null
-// CS1984: The `await' operator cannot be used in the body of a finally clause
-// Line: 13
-
-using System;
-using System.Threading.Tasks;
-
-class C
-{
- public async Task Test ()
- {
- try {
- } finally {
- await Call ();
- }
- }
-
- static Task Call ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS1985: The `await' operator cannot be used in a catch clause
-// Line: 18
-
-using System;
-using System.Threading.Tasks;
-
-class X
-{
- public static void Main ()
- {
- }
-
- static async Task Test ()
- {
- int x = 4;
- try {
- throw null;
- } catch (NullReferenceException) if (await Foo ()) {
- return;
- }
- }
-
- static Task<bool> Foo ()
- {
- throw new NotImplementedException ();
- }
-}
\ No newline at end of file
+++ /dev/null
-// CS1985: The `await' operator cannot be used in a catch clause
-// Line: 13
-
-using System;
-using System.Threading.Tasks;
-
-class C
-{
- public async Task Test ()
- {
- try {
- } catch {
- await Call ();
- }
- }
-
- static Task Call ()
- {
- return null;
- }
-}
+++ /dev/null
-// CS1997: `System.Func<System.Threading.Tasks.Task>': A return keyword must not be followed by an expression when async delegate returns `Task'. Consider using `Task<T>' return type
-// Line: 12
-
-using System;
-using System.Threading.Tasks;
-
-class Test
-{
- public static void Main()
- {
- Func<Task> t = async delegate {
- return null;
- };
-
- return;
- }
-}
-// CS4017: The CallerMemberName attribute cannot be applied because there is no standard conversion from `int' to `byte'
+// CS4017: The CallerLineNumberAttribute attribute cannot be applied because there is no standard conversion from `int' to `byte'
// Line: 8
using System.Runtime.CompilerServices;
--- /dev/null
+// CS4024: The CallerLineNumberAttribute applied to parameter `x' will have no effect because it applies to a member that is used in context that do not allow optional arguments
+// Line: 14
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+partial class D
+{
+ partial void Foo (int x = 2);
+}
+
+partial class D
+{
+ partial void Foo ([CallerLineNumber] int x)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS4025: The CallerFilePath applied to parameter `x' will have no effect because it applies to a member that is used in context that do not allow optional arguments
+// Line: 14
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+partial class D
+{
+ partial void Foo (string x = "x");
+}
+
+partial class D
+{
+ partial void Foo ([CallerFilePath] string x)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS4026: The CallerMemberName applied to parameter `x' will have no effect because it applies to a member that is used in context that do not allow optional arguments
+// Line: 14
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+partial class D
+{
+ partial void Foo (string x = "x");
+}
+
+partial class D
+{
+ partial void Foo ([CallerMemberName] string x)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS4029: Cannot return an expression of type `void'
+// Line: 15
+
+using System;
+using System.Threading.Tasks;
+
+class C
+{
+ static void Foo<T> (Func<Task<T>> f)
+ {
+ }
+
+ static void Main ()
+ {
+ Foo (async () => {
+ return await Task.Factory.StartNew (() => { });
+ });
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7023: The second operand of `is' or `as' operator cannot be static type `X'
+// Line: 8
+
+static class X
+{
+ public static void Main ()
+ {
+ var v = null is X;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7023: The second operand of `is' or `as' operator cannot be static type `X'
+// Line: 8
+
+static class X
+{
+ public static void Main ()
+ {
+ var v = null as X;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7025: Inconsistent accessibility: event type `System.Action<I>' is less accessible than event `C.E'
+// Line: 8
+
+using System;
+
+public class C
+{
+ public event Action<I> E;
+}
+
+interface I
+{
+}
\ No newline at end of file
--- /dev/null
+// CS7030: Friend assembly reference cannot have `null' value
+// Line: 6
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo (null)]
--- /dev/null
+// CS7034: The specified version string `2.0.*.*' does not conform to the required format - major[.minor[.build[.revision]]]
+// Line: 6
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.0.*.*")]
--- /dev/null
+// CS7034: The specified version string `2.*' does not conform to the required format - major[.minor[.build[.revision]]]
+// Line: 6
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.*")]
--- /dev/null
+// CS7034: The specified version string `0.0.0.80420' does not conform to the required format - major[.minor[.build[.revision]]]
+// Line: 7
+
+using System;
+using System.Reflection;
+
+[assembly: AssemblyVersion ("0.0.0.80420")]
+
+public class Test {
+
+ public static int Main ()
+ {
+ return 1;
+ }
+}
--- /dev/null
+// CS7035: The specified version string `1.*' does not conform to the recommended format major.minor.build.revision
+// Line: 7
+// Compiler options: -warnaserror
+
+using System.Reflection;
+
+[assembly: AssemblyFileVersion ("1.*")]
--- /dev/null
+// CS7042: The DllImport attribute cannot be applied to a method that is generic or contained in a generic type
+// Line: 9
+
+using System.Runtime.InteropServices;
+
+public class C
+{
+ [DllImport ("my.dll")]
+ static extern void Foo<T> ();
+}
\ No newline at end of file
--- /dev/null
+// CS7042: The DllImport attribute cannot be applied to a method that is generic or contained in a generic type
+// Line: 9
+
+using System.Runtime.InteropServices;
+
+public class C<T>
+{
+ [DllImport ("my.dll")]
+ static extern void Foo ();
+}
\ No newline at end of file
--- /dev/null
+// CS7049: Security attribute `System.Security.Permissions.PrincipalPermissionAttribute' has an invalid SecurityAction value `100'
+// Line: 10
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+
+ [PrincipalPermission ((SecurityAction)100, Name="Poupou")]
+ public virtual void Show (string message)
+ {
+ }
+}
--- /dev/null
+// CS7050: SecurityAction value `System.Security.Permissions.SecurityAction' is invalid for security attributes applied to an assembly
+// Line: 10
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+[assembly: SecurityPermission (SecurityAction.Demand, SkipVerification=true)]
+
+class Test
+{
+ static void Main () {}
+}
--- /dev/null
+// CS7051: SecurityAction value `System.Security.Permissions.SecurityAction' is invalid for security attributes applied to a type or a method
+// Line: 10
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+
+ [SecurityPermission (SecurityAction.RequestMinimum, ControlPrincipal=true, Flags=SecurityPermissionFlag.ControlPrincipal)]
+ static public void Main (string[] args)
+ {
+ }
+}
--- /dev/null
+// CS7055: Unmanaged type `ByValArray' is only valid for fields
+// Line: 10
+
+using System;
+using System.Runtime.InteropServices;
+
+public class main {
+
+ [DllImport("libname", EntryPoint = "scumbag")]
+ static extern int scumbag(ref int X, [MarshalAs(UnmanagedType.ByValArray)] ref byte[] fb);
+}
--- /dev/null
+// CS7055: Unmanaged type `ByValArray' is only valid for fields
+// Line: 10
+
+using System;
+using System.Runtime.InteropServices;
+
+public class main {
+
+ [DllImport("libname", EntryPoint = "scumbag")]
+ static extern int scumbag(ref int X, [MarshalAs(UnmanagedType.ByValArray)] ref byte[] fb);
+}
--- /dev/null
+// CS7059: Executables cannot be satellite assemblies. Remove the attribute or keep it empty
+// Line: 7
+
+using System;
+using System.Reflection;
+
+[assembly: AssemblyCulture("es")]
+[assembly: AssemblyVersion("1.2.3456.7")]
+
+namespace NS
+{
+ class MyClass
+ {
+ static void Main ()
+ {
+ Console.WriteLine (typeof(MyClass).Assembly.FullName);
+ }
+ }
+}
--- /dev/null
+// CS7070: Security attribute `DebugPermissionAttribute' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations
+// Line: 11
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+ public delegate int DisplayHandler (string msg);
+
+ [DebugPermission (SecurityAction.RequestMinimum)]
+ public event DisplayHandler OnShow;
+}
+
+[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
+[Serializable]
+public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
+
+ public DebugPermissionAttribute (SecurityAction action)
+ : base (action)
+ {
+ }
+
+ public override IPermission CreatePermission ()
+ {
+ return null;
+ }
+}
--- /dev/null
+// CS7070: Security attribute `DebugPermissionAttribute' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations
+// Line: 11
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+
+ [DebugPermission (SecurityAction.LinkDemand)]
+ public int Show
+ {
+ get {
+ return 2;
+ }
+ }
+}
+
+[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
+[Serializable]
+public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
+
+ public DebugPermissionAttribute (SecurityAction action)
+ : base (action)
+ {
+ }
+
+ public override IPermission CreatePermission ()
+ {
+ return null;
+ }
+}
--- /dev/null
+// CS7070: Security attribute `DebugPermissionAttribute' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations
+// Line: 11
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+
+ [return: DebugPermission (SecurityAction.LinkDemand)]
+ public int Show (string message)
+ {
+ return 2;
+ }
+}
+
+[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
+[Serializable]
+public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
+
+ public DebugPermissionAttribute (SecurityAction action)
+ : base (action)
+ {
+ }
+
+ public override IPermission CreatePermission ()
+ {
+ return null;
+ }
+}
--- /dev/null
+// CS7070: Security attribute `DebugPermissionAttribute' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations
+// Line: 10
+
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+public class Program {
+
+ [DebugPermission (SecurityAction.RequestMinimum)]
+ public int i;
+}
+
+[AttributeUsage (AttributeTargets.All, AllowMultiple = true, Inherited = false)]
+[Serializable]
+public class DebugPermissionAttribute : CodeAccessSecurityAttribute {
+
+ public DebugPermissionAttribute (SecurityAction action)
+ : base (action)
+ {
+ }
+
+ public override IPermission CreatePermission ()
+ {
+ return null;
+ }
+}
--- /dev/null
+// CS7080: The CallerMemberNameAttribute applied to parameter `o' will have no effect. It is overridden by the CallerFilePathAttribute
+// Line: 9
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+class D
+{
+ void Foo ([CallerMemberName, CallerFilePath] object o = null)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7081: The CallerMemberNameAttribute applied to parameter `o' will have no effect. It is overridden by the CallerLineNumberAttribute
+// Line: 9
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+class D
+{
+ void Foo ([CallerMemberName, CallerLineNumber] object o = null)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7082: The CallerFilePathAttribute applied to parameter `o' will have no effect. It is overridden by the CallerLineNumberAttribute
+// Line: 9
+// Compiler options: -warnaserror
+
+using System.Runtime.CompilerServices;
+
+class D
+{
+ void Foo ([CallerFilePath, CallerLineNumber] object o = null)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7083: Expression must be implicitly convertible to Boolean or its type `C' must define operator `false'
+// Line: 8
+
+class C
+{
+ dynamic M (dynamic d)
+ {
+ return this && d;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7083: Expression must be implicitly convertible to Boolean or its type `C' must define operator `true'
+// Line: 8
+
+class C
+{
+ dynamic M (dynamic d)
+ {
+ return this || d;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS7094: The `await' operator cannot be used in the filter expression of a catch clause
+// Line: 12
+
+using System.Threading.Tasks;
+
+class Test
+{
+ async static Task M1 ()
+ {
+ try {
+ }
+ catch if (await Task.Factory.StartNew (() => false)) {
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS8009: Referenced assembly `CS8009-lib' has different culture setting of `en-US'
+// Line: 0
+// Compiler options: -r:CS8009-lib.dll -warnaserror
+
+using System;
+
+class Program
+{
+ static void Main ()
+ {
+ Console.WriteLine (typeof (Lang));
+ }
+}
--- /dev/null
+// CS8030: Anonymous function or lambda expression converted to a void returning delegate cannot return a value
+// Line: 9
+
+delegate void D (int x);
+
+class X {
+ static void Main ()
+ {
+ D d6 = delegate (int x) { return x; }; // Return type mismatch.
+ }
+}
--- /dev/null
+// CS8030: Anonymous function or lambda expression converted to a void returning delegate cannot return a value
+// Line: 11
+
+using System;
+using System.Threading.Tasks;
+
+class C
+{
+ public async void GetValue()
+ {
+ return await Task.FromResult(100);
+ }
+}
--- /dev/null
+// CS8030: Anonymous function or lambda expression converted to a void returning delegate cannot return a value
+// Line: 10
+
+using System;
+
+class C
+{
+ public void Test ()
+ {
+ Action a = () => { return Skip (); };
+ }
+
+ void Skip ()
+ {
+ }
+}
--- /dev/null
+// CS8031: Async lambda expression or anonymous method converted to a `Task' cannot return a value. Consider returning `Task<T>'
+// Line: 12
+
+using System;
+using System.Threading.Tasks;
+
+class Test
+{
+ public static void Main()
+ {
+ Func<Task> t = async delegate {
+ return null;
+ };
+
+ return;
+ }
+}
return (p);
}
+#ifdef __GNUC__
+#define GNUC_UNUSED __attribute__((__unused__))
+#else
+#define GNUC_UNUSED
+#endif
create_file_names()
{
int i, len;
char *tmpdir;
+ int mkstemp_res GNUC_UNUSED;
#if defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
tmpdir = ".";
prolog_file_name[len + 5] = 'p';
local_file_name[len + 5] = 'l';
- mkstemp(action_file_name);
- mkstemp(prolog_file_name);
- mkstemp(local_file_name);
+ mkstemp_res = mkstemp(action_file_name);
+ mkstemp_res = mkstemp(prolog_file_name);
+ mkstemp_res = mkstemp(local_file_name);
len = strlen(file_prefix);
return;
if (Compiler.Settings.Target == Target.Exe) {
- a.Error_AttributeEmitError ("The executables cannot be satelite assemblies, remove the attribute or keep it empty");
+ Report.Error (7059, a.Location, "Executables cannot be satellite assemblies. Remove the attribute or keep it empty");
return;
}
var vinfo = IsValidAssemblyVersion (value, true);
if (vinfo == null) {
- a.Error_AttributeEmitError (string.Format ("Specified version `{0}' is not valid", value));
+ Report.Error (7034, a.Location, "The specified version string `{0}' does not conform to the required format - major[.minor[.build[.revision]]]",
+ value);
return;
}
if (a.Type == pa.InternalsVisibleTo) {
string assembly_name = a.GetString ();
+ if (assembly_name == null) {
+ Report.Error (7030, a.Location, "Friend assembly reference cannot have `null' value");
+ return;
+ }
+
if (assembly_name.Length == 0)
return;
#if STATIC
ParsedAssemblyName aname;
ParseAssemblyResult r = Fusion.ParseAssemblyName (assembly_name, out aname);
if (r != ParseAssemblyResult.OK) {
- Report.Warning (1700, 3, a.Location, "Assembly reference `{0}' is invalid and cannot be resolved",
+ Report.Warning (1700, 3, a.Location, "Friend assembly reference `{0}' is invalid and cannot be resolved",
assembly_name);
return;
}
} else if (a.Type == pa.AssemblyFileVersion) {
vi_product_version = a.GetString ();
if (string.IsNullOrEmpty (vi_product_version) || IsValidAssemblyVersion (vi_product_version, false) == null) {
- Report.Warning (1607, 1, a.Location, "The version number `{0}' specified for `{1}' is invalid",
+ Report.Warning (7035, 1, a.Location, "The specified version string `{0}' does not conform to the recommended format major.minor.build.revision",
vi_product_version, a.Name);
return;
}
+
+ // File version info decoding from blob is not supported
+ var cab = new CustomAttributeBuilder ((ConstructorInfo) ctor.GetMetaInfo (), new object[] { vi_product_version });
+ Builder.SetCustomAttribute (cab);
+ return;
} else if (a.Type == pa.AssemblyProduct) {
vi_product = a.GetString ();
} else if (a.Type == pa.AssemblyCompany) {
}
var ci = a.Assembly.GetName ().CultureInfo;
- if (!ci.Equals (System.Globalization.CultureInfo.InvariantCulture)) {
- Report.Warning (1607, 1, "Referenced assembly `{0}' has different culture setting of `{1}'",
+ if (!ci.Equals (CultureInfo.InvariantCulture)) {
+ Report.Warning (8009, 1, "Referenced assembly `{0}' has different culture setting of `{1}'",
a.Name, ci.Name);
}
protected override Expression DoResolve (ResolveContext rc)
{
- if (rc.HasSet (ResolveContext.Options.FinallyScope)) {
- rc.Report.Error (1984, loc, "The `await' operator cannot be used in the body of a finally clause");
- }
-
if (rc.HasSet (ResolveContext.Options.LockScope)) {
rc.Report.Error (1996, loc,
"The `await' operator cannot be used in the body of a lock statement");
var fe_awaiter = new FieldExpr (awaiter, loc);
fe_awaiter.InstanceExpression = new CompilerGeneratedThis (ec.CurrentType, loc);
- Label skip_continuation = ec.DefineLabel ();
+ Label skip_continuation = ec.DefineLabel ();
using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) {
//
return false;
}
- if (bc.HasSet (ResolveContext.Options.CatchScope)) {
- bc.Report.Error (1985, loc, "The `await' operator cannot be used in a catch clause");
- }
-
if (!base.Resolve (bc))
return false;
public class AsyncInitializer : StateMachineInitializer
{
TypeInferenceContext return_inference;
+ List<Label> redirected_jumps;
+ FieldExpr HoistedReturnState;
public AsyncInitializer (ParametersBlock block, TypeDefinition host, TypeSpec returnType)
: base (block, host, returnType)
protected override BlockContext CreateBlockContext (BlockContext bc)
{
var ctx = base.CreateBlockContext (bc);
- var lambda = bc.CurrentAnonymousMethod as LambdaMethod;
- if (lambda != null)
- return_inference = lambda.ReturnTypeInference;
+ var am = bc.CurrentAnonymousMethod as AnonymousMethodBody;
+ if (am != null)
+ return_inference = am.ReturnTypeInference;
ctx.Set (ResolveContext.Options.TryScope);
ec.Emit (OpCodes.Ret);
}
+ //
+ // Emits state table of jumps outside of try block and reload of return
+ // value when try block returns value
+ //
+ public void EmitRedirectedJumpsTable (EmitContext ec, StackFieldExpr returnResult, Label localReturn)
+ {
+ if (redirected_jumps == null)
+ return;
+
+ int ret_index = redirected_jumps.IndexOf (localReturn);
+ if (ret_index >= 0) {
+ redirected_jumps [ret_index] = ec.DefineLabel ();
+ }
+
+ HoistedReturnState.Emit (ec);
+ ec.Emit (OpCodes.Switch, redirected_jumps.ToArray ());
+
+ if (ret_index >= 0) {
+ ec.MarkLabel (redirected_jumps [ret_index]);
+ var s = (AsyncTaskStorey)storey;
+ ((IAssignMethod)s.HoistedReturnValue).EmitAssign (ec, returnResult, false, false);
+
+ ec.Emit (OpCodes.Leave, BodyEnd);
+ }
+
+ // Mark fallthrough label
+ ec.MarkLabel (redirected_jumps [0]);
+ }
+
+ public void EmitRedirectedJump (EmitContext ec, Label label)
+ {
+ if (redirected_jumps == null) {
+ redirected_jumps = new List<Label> ();
+
+ // Add fallthrough label
+ redirected_jumps.Add (ec.DefineLabel ());
+ HoistedReturnState = ec.GetTemporaryField (ec.Module.Compiler.BuiltinTypes.Int);
+ }
+
+ int index = redirected_jumps.IndexOf (label);
+ if (index < 0) {
+ redirected_jumps.Add (label);
+ index = redirected_jumps.Count - 1;
+ }
+
+ //
+ // Indicates we have return value captured
+ //
+ HoistedReturnState.EmitAssign (ec, new IntConstant (HoistedReturnState.Type, index, Location.Null), false, false);
+ }
+
public override void MarkReachable (Reachability rc)
{
//
MethodSpec builder_factory;
MethodSpec builder_start;
PropertySpec task;
- LocalVariable hoisted_return;
int locals_captured;
Dictionary<TypeSpec, List<Field>> stack_fields;
Dictionary<TypeSpec, List<Field>> awaiter_fields;
#region Properties
- public LocalVariable HoistedReturn {
- get {
- return hoisted_return;
- }
- }
+ public Expression HoistedReturnValue { get; set; }
public TypeSpec ReturnType {
get {
set_state_machine.Block.AddStatement (new StatementExpression (new Invocation (mg, args)));
if (has_task_return_type) {
- hoisted_return = LocalVariable.CreateCompilerGenerated (bt.TypeArguments[0], StateMachineMethod.Block, Location);
+ HoistedReturnValue = TemporaryVariableReference.Create (bt.TypeArguments [0], StateMachineMethod.Block, Location);
}
return true;
};
Arguments args;
- if (hoisted_return == null) {
+ if (HoistedReturnValue == null) {
args = new Arguments (0);
} else {
args = new Arguments (1);
- args.Add (new Argument (new LocalVariableReference (hoisted_return, Location)));
+ args.Add (new Argument (HoistedReturnValue));
}
using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) {
Report.Error (1970, loc, "Do not use `{0}' directly. Use `dynamic' keyword instead", GetSignatureForError ());
}
- /// <summary>
- /// This is rather hack. We report many emit attribute error with same error to be compatible with
- /// csc. But because csc has to report them this way because error came from ilasm we needn't.
- /// </summary>
- public void Error_AttributeEmitError (string inner)
+ void Error_AttributeEmitError (string inner)
{
Report.Error (647, Location, "Error during emitting `{0}' attribute. The reason is `{1}'",
Type.GetSignatureForError (), inner);
}
+ public void Error_InvalidArgumentValue (TypeSpec attributeType)
+ {
+ Report.Error (591, Location, "Invalid value for argument to `{0}' attribute", attributeType.GetSignatureForError ());
+ }
+
public void Error_InvalidSecurityParent ()
{
- Error_AttributeEmitError ("it is attached to invalid parent");
+ Report.Error (7070, Location,
+ "Security attribute `{0}' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations",
+ Type.GetSignatureForError ());
}
Attributable Owner {
return ((MethodImplOptions) value | all) == all;
}
- static bool IsValidArgumentType (TypeSpec t)
+ public static bool IsValidArgumentType (TypeSpec t)
{
if (t.IsArray) {
var ac = (ArrayContainer) t;
{
SecurityAction action = GetSecurityActionValue ();
bool for_assembly = Target == AttributeTargets.Assembly || Target == AttributeTargets.Module;
+ var c = (Constant)pos_args [0].Expr;
switch (action) {
#pragma warning disable 618
#pragma warning restore 618
default:
- Error_AttributeEmitError ("SecurityAction is out of range");
+ Report.Error (7049, c.Location, "Security attribute `{0}' has an invalid SecurityAction value `{1}'",
+ Type.GetSignatureForError (), c.GetValueAsLiteral());
return false;
}
- Error_AttributeEmitError (String.Concat ("SecurityAction `", action, "' is not valid for this declaration"));
+ switch (Target) {
+ case AttributeTargets.Assembly:
+ Report.Error (7050, c.Location, "SecurityAction value `{0}' is invalid for security attributes applied to an assembly",
+ c.GetSignatureForError ());
+ break;
+ default:
+ Report.Error (7051, c.Location, "SecurityAction value `{0}' is invalid for security attributes applied to a type or a method",
+ c.GetSignatureForError ());
+ break;
+ }
+
return false;
}
return;
}
} else if (Type == predefined.Guid) {
+ string v = ((StringConstant) arg_expr).Value;
try {
- string v = ((StringConstant) arg_expr).Value;
new Guid (v);
- } catch (Exception e) {
- Error_AttributeEmitError (e.Message);
+ } catch {
+ Error_InvalidArgumentValue (Type);
return;
}
} else if (Type == predefined.AttributeUsage) {
int v = ((IntConstant) ((EnumConstant) arg_expr).Child).Value;
- if (v == 0) {
- context.Module.Compiler.Report.Error (591, Location, "Invalid value for argument to `{0}' attribute",
- "System.AttributeUsage");
- }
+ if (v == 0)
+ Error_InvalidArgumentValue (Type);
} else if (Type == predefined.MarshalAs) {
if (pos_args.Count == 1) {
var u_type = (UnmanagedType) System.Enum.Parse (typeof (UnmanagedType), ((Constant) pos_args[0].Expr).GetValue ().ToString ());
if (u_type == UnmanagedType.ByValArray && !(Owner is FieldBase)) {
- Error_AttributeEmitError ("Specified unmanaged type is only valid on fields");
+ Report.Error (7055, pos_args [0].Expr.Location, "Unmanaged type `ByValArray' is only valid for fields");
}
}
} else if (Type == predefined.DllImport) {
if (pos_args.Count == 1 && pos_args[0].Expr is Constant) {
var value = ((Constant) pos_args[0].Expr).GetValue () as string;
if (string.IsNullOrEmpty (value))
- Error_AttributeEmitError ("DllName cannot be empty or null");
+ Error_InvalidArgumentValue (Type);
}
} else if (Type == predefined.MethodImpl) {
if (pos_args.Count == 1) {
var value = (int) ((Constant) arg_expr).GetValueAsLong ();
if (!IsValidMethodImplOption (value)) {
- Error_AttributeEmitError ("Incorrect argument value");
+ Error_InvalidArgumentValue (Type);
}
}
}
}
- arg_expr.EncodeAttributeValue (context, encoder, pt);
+ arg_expr.EncodeAttributeValue (context, encoder, pt, pt);
}
}
encoder.Encode (na.Key.Type);
encoder.Encode (na.Value.Name);
- na.Value.Expr.EncodeAttributeValue (context, encoder, na.Key.Type);
+ na.Value.Expr.EncodeAttributeValue (context, encoder, na.Key.Type, na.Key.Type);
}
} else {
encoder.EncodeEmptyNamedArguments ();
Encode ((byte) 0x54); // property
Encode (property.MemberType);
Encode (property.Name);
- value.EncodeAttributeValue (null, this, property.MemberType);
+ value.EncodeAttributeValue (null, this, property.MemberType, property.MemberType);
}
//
Encode ((byte) 0x53); // field
Encode (field.MemberType);
Encode (field.Name);
- value.EncodeAttributeValue (null, this, field.MemberType);
+ value.EncodeAttributeValue (null, this, field.MemberType, field.MemberType);
}
public void EncodeNamedArguments<T> (T[] members, Constant[] values) where T : MemberSpec, IInterfaceMemberSpec
Encode (member.MemberType);
Encode (member.Name);
- values [i].EncodeAttributeValue (null, this, member.MemberType);
+ values [i].EncodeAttributeValue (null, this, member.MemberType, member.MemberType);
}
}
return null;
result = result.Reduce (ec, lt);
- if (result == null)
- return null;
+ if (result == null || lt.IsEnum)
+ return result;
return new EnumConstant (result, lt);
}
Report.SymbolRelatedToPreviousError (MemberType);
if (this is Property)
Report.Error (53, Location,
- "Inconsistent accessibility: property type `" +
- MemberType.GetSignatureForError () + "' is less " +
- "accessible than property `" + GetSignatureForError () + "'");
+ "Inconsistent accessibility: property type `" +
+ MemberType.GetSignatureForError () + "' is less " +
+ "accessible than property `" + GetSignatureForError () + "'");
else if (this is Indexer)
Report.Error (54, Location,
- "Inconsistent accessibility: indexer return type `" +
- MemberType.GetSignatureForError () + "' is less " +
- "accessible than indexer `" + GetSignatureForError () + "'");
+ "Inconsistent accessibility: indexer return type `" +
+ MemberType.GetSignatureForError () + "' is less " +
+ "accessible than indexer `" + GetSignatureForError () + "'");
else if (this is MethodCore) {
if (this is Operator)
Report.Error (56, Location,
- "Inconsistent accessibility: return type `" +
- MemberType.GetSignatureForError () + "' is less " +
- "accessible than operator `" + GetSignatureForError () + "'");
+ "Inconsistent accessibility: return type `" +
+ MemberType.GetSignatureForError () + "' is less " +
+ "accessible than operator `" + GetSignatureForError () + "'");
else
Report.Error (50, Location,
- "Inconsistent accessibility: return type `" +
- MemberType.GetSignatureForError () + "' is less " +
- "accessible than method `" + GetSignatureForError () + "'");
+ "Inconsistent accessibility: return type `" +
+ MemberType.GetSignatureForError () + "' is less " +
+ "accessible than method `" + GetSignatureForError () + "'");
+ } else if (this is Event) {
+ Report.Error (7025, Location,
+ "Inconsistent accessibility: event type `{0}' is less accessible than event `{1}'",
+ MemberType.GetSignatureForError (), GetSignatureForError ());
} else {
Report.Error (52, Location,
"Inconsistent accessibility: field type `" +
}
}
+ public LocalVariable AsyncThrowVariable { get; set; }
+
#endregion
public void AddStatementEpilog (IExpressionCleanup cleanupExpression)
}
}
- if (call_op == OpCodes.Callvirt && (InstanceExpression.Type.IsGenericParameter || InstanceExpression.Type.IsStruct)) {
+ if (call_op == OpCodes.Callvirt && (InstanceExpression.Type.IsGenericParameter || InstanceExpression.Type.IsStructOrEnum)) {
ec.Emit (OpCodes.Constrained, InstanceExpression.Type);
}
//
// Push the instance expression
//
- if ((instance_type.IsStruct && (callOpcode == OpCodes.Callvirt || (callOpcode == OpCodes.Call && declaringType.IsStruct))) ||
+ if ((instance_type.IsStructOrEnum && (callOpcode == OpCodes.Callvirt || (callOpcode == OpCodes.Call && declaringType.IsStruct))) ||
instance_type.IsGenericParameter || declaringType.IsNullableType) {
//
// If the expression implements IMemoryLocation, then
return ReferenceContainer.MakeType (ec.Module, instance_type);
}
- if (instance_type.IsEnum || instance_type.IsStruct) {
+ if (instance_type.IsStructOrEnum) {
instance.Emit (ec);
ec.Emit (OpCodes.Box, instance_type);
return ec.BuiltinTypes.Object;
return Value ? 1 : 0;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode ((ushort) Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
return base.ConvertImplicitly (type);
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
Value = v;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
enc.Encode (Value);
}
ec.Emit (OpCodes.Ldstr, Value);
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
// cast to object
if (type != targetType)
return base.CreateExpressionTree (ec);
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
switch (targetType.BuiltinType) {
case BuiltinTypeSpec.Type.Object:
break;
}
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
}
public override void Emit (EmitContext ec)
ConstructorScope = 1 << 3,
- AsyncBody = 1 << 4
+ AsyncBody = 1 << 4,
+
+ HoistedReturnResult = 1 << 5
}
// utility helper for CheckExpr, UnCheckExpr, Checked and Unchecked statements
}
| OPERATOR overloadable_operator opt_doc_method_sig
{
- var p = (List<DocumentationParameter>)$3 ?? new List<DocumentationParameter> (1);
+ var p = (List<DocumentationParameter>)$3;
module.DocumentationBuilder.ParsedParameters = p;
module.DocumentationBuilder.ParsedOperator = (Operator.OpType) $2;
$$ = null;
public override bool ContainsEmitWithAwait ()
{
- return false;
+ var instance = method_group.InstanceExpression;
+ return instance != null && instance.ContainsEmitWithAwait ();
}
public static Arguments CreateDelegateMethodArguments (ResolveContext rc, AParametersCollection pd, TypeSpec[] types, Location loc)
return c;
}
- public virtual void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public virtual void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
- rc.Module.Compiler.Report.Error (182, loc,
- "An attribute argument must be a constant expression, typeof expression or array creation expression");
+ if (Attribute.IsValidArgumentType (parameterType)) {
+ rc.Module.Compiler.Report.Error (182, loc,
+ "An attribute argument must be a constant expression, typeof expression or array creation expression");
+ } else {
+ rc.Module.Compiler.Report.Error (181, loc,
+ "Attribute constructor parameter has type `{0}', which is not a valid attribute parameter type",
+ targetType.GetSignatureForError ());
+ }
}
/// <summary>
Child.Emit (ec);
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
- Child.EncodeAttributeValue (rc, enc, Child.Type);
+ Child.EncodeAttributeValue (rc, enc, Child.Type, parameterType);
}
public override void EmitBranchable (EmitContext ec, Label label, bool on_true)
return this;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
// Only boxing to object type is supported
if (targetType.BuiltinType != BuiltinTypeSpec.Type.Object) {
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
return;
}
enc.Encode (child.Type);
- child.EncodeAttributeValue (rc, enc, child.Type);
+ child.EncodeAttributeValue (rc, enc, child.Type, parameterType);
}
public override void Emit (EmitContext ec)
return c;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
//
// LAMESPEC: Reduced conditional expression is allowed as an attribute argument
//
if (orig_expr is Conditional)
- child.EncodeAttributeValue (rc, enc, targetType);
+ child.EncodeAttributeValue (rc, enc, targetType,parameterType);
else
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
}
}
//
// LAMESPEC:
//
- // void Foo (params int[]) is better than void Foo (int i = 0) for Foo ()
+ // void Foo (int i = 0) is better than void Foo (params int[]) for Foo ()
// void Foo (string[] s, string value = null) is better than Foo (string s, params string[]) for Foo (null) or Foo ()
//
if (cand_param.HasDefaultValue != best_param.HasDefaultValue)
- return !candidate_params;
+ return cand_param.HasDefaultValue;
if (cand_param.HasDefaultValue) {
++j;
++arg_count;
temp = null;
} else {
- temp = arguments[index];
+ if (index == arg_count)
+ return (i + 1) * 3;
+
+ temp = arguments [index];
// The slot has been taken by positional argument
if (temp != null && !(temp is NamedArgument))
// For candidates which match on parameters count report more details about incorrect arguments
//
if (pm != null) {
- int unexpanded_count = ((IParametersMember) best_candidate).Parameters.HasParams ? pm.Parameters.Count - 1 : pm.Parameters.Count;
- if (pm.Parameters.Count == arg_count || params_expanded || unexpanded_count == arg_count) {
+ if (pm.Parameters.Count == arg_count || params_expanded || HasUnfilledParams (best_candidate, pm, args)) {
// Reject any inaccessible member
if (!best_candidate.IsAccessible (rc) || !best_candidate.DeclaringType.IsAccessible (rc)) {
rc.Report.SymbolRelatedToPreviousError (best_candidate);
}
}
+ static bool HasUnfilledParams (MemberSpec best_candidate, IParametersMember pm, Arguments args)
+ {
+ var p = ((IParametersMember)best_candidate).Parameters;
+ if (!p.HasParams)
+ return false;
+
+ string name = null;
+ for (int i = p.Count - 1; i != 0; --i) {
+ var fp = p.FixedParameters [i];
+ if ((fp.ModFlags & Parameter.Modifier.PARAMS) == 0)
+ continue;
+
+ name = fp.Name;
+ break;
+ }
+
+ foreach (var arg in args) {
+ var na = arg as NamedArgument;
+ if (na == null)
+ continue;
+
+ if (na.Name == name) {
+ name = null;
+ break;
+ }
+ }
+
+ if (name == null)
+ return false;
+
+ return args.Count + 1 == pm.Parameters.Count;
+ }
+
bool VerifyArguments (ResolveContext ec, ref Arguments args, MemberSpec member, IParametersMember pm, bool chose_params_expanded)
{
var pd = pm.Parameters;
var temp = ec.GetTemporaryLocal (type);
ec.Emit (OpCodes.Stloc, temp);
ec.Emit (OpCodes.Ldloca, temp);
- ec.FreeTemporaryLocal (temp, type);
return;
}
if (undo_actions == null)
undo_actions = new List<Action> ();
- var existing = current_container.Containers.FirstOrDefault (l => l.Basename == tc.Basename);
- if (existing != null) {
- current_container.RemoveContainer (existing);
- undo_actions.Add (() => current_container.AddTypeContainer (existing));
+ if (current_container.Containers != null)
+ {
+ var existing = current_container.Containers.FirstOrDefault (l => l.Basename == tc.Basename);
+ if (existing != null) {
+ current_container.RemoveContainer (existing);
+ undo_actions.Add (() => current_container.AddTypeContainer (existing));
+ }
}
undo_actions.Add (() => current_container.RemoveContainer (tc));
return null;
if (probe_type_expr.IsStatic) {
- ec.Report.Error (-244, loc, "The `{0}' operator cannot be applied to an operand of a static type",
- OperatorName);
+ ec.Report.Error (7023, loc, "The second operand of `is' or `as' operator cannot be static type `{0}'",
+ probe_type_expr.GetSignatureForError ());
+ return null;
}
if (expr.Type.IsPointer || probe_type_expr.IsPointer) {
public override void FlowAnalysis (FlowAnalysisContext fc)
{
if ((oper & Operator.LogicalMask) == 0) {
+ fc.DefiniteAssignmentOnTrue = fc.DefiniteAssignmentOnFalse = fc.DefiniteAssignment;
left.FlowAnalysis (fc);
+ fc.DefiniteAssignmentOnTrue = fc.DefiniteAssignmentOnFalse = fc.DefiniteAssignment;
right.FlowAnalysis (fc);
return;
}
}
}
- left = ConvertEnumOperandToUnderlyingType (rc, left);
- right = ConvertEnumOperandToUnderlyingType (rc, right);
+ left = ConvertEnumOperandToUnderlyingType (rc, left, r.IsNullableType);
+ right = ConvertEnumOperandToUnderlyingType (rc, right, l.IsNullableType);
return expr;
}
} else if ((oper == Operator.Addition || oper == Operator.Subtraction)) {
// which is not ambiguous with predefined enum operators
//
if (expr != null) {
- left = ConvertEnumOperandToUnderlyingType (rc, left);
- right = ConvertEnumOperandToUnderlyingType (rc, right);
+ left = ConvertEnumOperandToUnderlyingType (rc, left, false);
+ right = ConvertEnumOperandToUnderlyingType (rc, right, false);
return expr;
}
} else {
LocalVariable temp = LocalVariable.CreateCompilerGenerated (rc.BuiltinTypes.Bool, rc.CurrentBlock, loc);
+ if (!Convert.ImplicitConversionExists (rc, left, temp.Type) && (oper == Operator.LogicalAnd ? GetOperatorFalse (rc, left, loc) : GetOperatorTrue (rc, left, loc)) == null) {
+ rc.Report.Error (7083, left.Location,
+ "Expression must be implicitly convertible to Boolean or its type `{0}' must define operator `{1}'",
+ lt.GetSignatureForError (), oper == Operator.LogicalAnd ? "false" : "true");
+ return null;
+ }
+
args.Add (new Argument (temp.CreateReferenceExpression (rc, loc).Resolve (rc)));
args.Add (new Argument (right));
right = new DynamicExpressionStatement (this, args, loc);
return null;
}
- static Expression ConvertEnumOperandToUnderlyingType (ResolveContext rc, Expression expr)
+ static Expression ConvertEnumOperandToUnderlyingType (ResolveContext rc, Expression expr, bool liftType)
{
TypeSpec underlying_type;
if (expr.Type.IsNullableType) {
break;
}
- if (expr.Type.IsNullableType)
+ if (expr.Type.IsNullableType || liftType)
underlying_type = rc.Module.PredefinedTypes.Nullable.TypeSpec.MakeGenericType (rc.Module, new[] { underlying_type });
if (expr.Type == underlying_type)
if (!TypeSpec.IsReferenceType (l) || !TypeSpec.IsReferenceType (r))
return null;
- if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || MemberCache.GetUserOperator (l, CSharp.Operator.OpType.Equality, false) != null)
+ if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || l.IsDelegate || MemberCache.GetUserOperator (l, CSharp.Operator.OpType.Equality, false) != null)
ec.Report.Warning (253, 2, loc,
"Possible unintended reference comparison. Consider casting the right side expression to type `{0}' to get value comparison",
l.GetSignatureForError ());
- if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || MemberCache.GetUserOperator (r, CSharp.Operator.OpType.Equality, false) != null)
+ if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || r.IsDelegate || MemberCache.GetUserOperator (r, CSharp.Operator.OpType.Equality, false) != null)
ec.Report.Warning (252, 2, loc,
"Possible unintended reference comparison. Consider casting the left side expression to type `{0}' to get value comparison",
r.GetSignatureForError ());
if (!Emit (ec, v))
v.Emit (ec);
}
-
+
public override void EmitStatement (EmitContext ec)
{
LocalTemporary v = null;
public override void Emit (EmitContext ec)
{
- EmitToFieldSource (ec);
+ var await_field = EmitToFieldSource (ec);
+ if (await_field != null)
+ await_field.Emit (ec);
}
protected sealed override FieldExpr EmitToFieldSource (EmitContext ec)
return await_stack_field;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
// no multi dimensional or jagged arrays
if (arguments.Count != 1 || array_element_type.IsArray) {
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
return;
}
// No array covariance, except for array -> object
if (type != targetType) {
if (targetType.BuiltinType != BuiltinTypeSpec.Type.Object) {
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
return;
}
if (array_data == null) {
IntConstant ic = arguments[0] as IntConstant;
if (ic == null || !ic.IsDefaultValue) {
- base.EncodeAttributeValue (rc, enc, targetType);
+ base.EncodeAttributeValue (rc, enc, targetType, parameterType);
} else {
enc.Encode (0);
}
enc.Encode (array_data.Count);
foreach (var element in array_data) {
- element.EncodeAttributeValue (rc, enc, array_element_type);
+ element.EncodeAttributeValue (rc, enc, array_element_type, parameterType);
}
}
return false;
}
- public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType)
+ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType)
{
// Target type is not System.Type therefore must be object
// and we need to use different encoding sequence
// with disable flow analysis as we don't know whether left side expression
// is used as variable or type
//
- if (expr is VariableReference || expr is ConstantExpr || expr is Linq.TransparentMemberAccess) {
+ if (expr is VariableReference || expr is ConstantExpr || expr is Linq.TransparentMemberAccess || expr is EventExpr) {
expr = expr.Resolve (rc);
} else if (expr is TypeParameterExpr) {
expr.Error_UnexpectedKind (rc, flags, sn.Location);
return e;
}
+ public override void Emit (EmitContext ec)
+ {
+ if (method == null && TypeSpec.IsValueType (type) && initializers.Initializers.Count > 1 && ec.HasSet (BuilderContext.Options.AsyncBody) && initializers.ContainsEmitWithAwait ()) {
+ var fe = ec.GetTemporaryField (type);
+
+ if (!Emit (ec, fe))
+ fe.Emit (ec);
+
+ return;
+ }
+
+ base.Emit (ec);
+ }
+
public override bool Emit (EmitContext ec, IMemoryLocation target)
{
bool left_on_stack;
LocalTemporary temp = null;
instance = target as LocalTemporary;
+ if (instance == null)
+ instance = target as StackFieldExpr;
if (instance == null) {
if (!left_on_stack) {
if (MemberType.IsStatic)
Error_VariableOfStaticClass (Location, GetSignatureForError (), MemberType, Report);
- CheckBase ();
+ if (!IsCompilerGenerated)
+ CheckBase ();
+
IsTypePermitted ();
}
if (tp != null)
return Inflate (tp);
- var ac = type as ArrayContainer;
- if (ac != null) {
- var et = Inflate (ac.Element);
- if (et != ac.Element)
- return ArrayContainer.MakeType (context.Module, et, ac.Rank);
+ var ec = type as ElementTypeSpec;
+ if (ec != null) {
+ var et = Inflate (ec.Element);
+ if (et != ec.Element) {
+ var ac = ec as ArrayContainer;
+ if (ac != null)
+ return ArrayContainer.MakeType (context.Module, et, ac.Rank);
+
+ throw new NotImplementedException ();
+ }
- return ac;
+ return ec;
}
if (type.Kind == MemberKind.MissingType)
// The state as we generate the machine
//
Label move_next_ok;
- Label iterator_body_end;
protected Label move_next_error;
LocalBuilder skip_finally;
protected LocalBuilder current_pc;
#region Properties
- public Label BodyEnd {
- get {
- return iterator_body_end;
- }
- }
+ public Label BodyEnd { get; set; }
public LocalBuilder CurrentPC
{
// We only care if the PC is zero (start executing) or non-zero (don't do anything)
ec.Emit (OpCodes.Brtrue, move_next_error);
- iterator_body_end = ec.DefineLabel ();
+ BodyEnd = ec.DefineLabel ();
block.EmitEmbedded (ec);
- ec.MarkLabel (iterator_body_end);
+ ec.MarkLabel (BodyEnd);
EmitMoveNextEpilogue (ec);
ec.MarkLabel (labels[0]);
- iterator_body_end = ec.DefineLabel ();
+ BodyEnd = ec.DefineLabel ();
block.EmitEmbedded (ec);
- ec.MarkLabel (iterator_body_end);
+ ec.MarkLabel (BodyEnd);
if (async_init != null) {
var catch_value = LocalVariable.CreateCompilerGenerated (ec.Module.Compiler.BuiltinTypes.Exception, block, Location);
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ \r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
<ItemGroup>\r
<ProjectReference Include="../class/corlib/corlib-net_4_5.csproj">\r
<Project>{33BF0182-AC5C-464C-995B-C9CFE74E1A95}</Project>\r
- <Name>corlib\corlib-net_4_5</Name>\r
+ <Name>corlib-net_4_5</Name>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
if ((ModFlags & extern_static) != extern_static) {
Report.Error (601, a.Location, "The DllImport attribute must be specified on a method marked `static' and `extern'");
}
+
+ if (MemberName.IsGeneric || Parent.IsGenericOrParentIsGeneric) {
+ Report.Error (7042, a.Location,
+ "The DllImport attribute cannot be applied to a method that is generic or contained in a generic type");
+ }
+
is_external_implementation = true;
}
//
Constant lc = left as Constant;
if (lc != null && !lc.IsDefaultValue)
- return ReducedExpression.Create (lc, this);
+ return ReducedExpression.Create (lc, this, false);
//
// Reduce (left ?? null) to left OR (null-constant ?? right) to right
//
- if (right.IsNull || lc != null)
- return ReducedExpression.Create (lc != null ? right : left, this);
+ if (right.IsNull || lc != null) {
+ //
+ // Special case null ?? null
+ //
+ if (right.IsNull && ltype == right.Type)
+ return null;
+
+ return ReducedExpression.Create (lc != null ? right : left, this, false);
+ }
right = Convert.ImplicitConversion (ec, right, ltype, loc);
type = ltype;
return this;
}
-
- //
- // Special case null ?? null
- //
- if (ltype == right.Type) {
- type = ltype;
- return this;
- }
} else {
return null;
}
// Reduce (null ?? right) to right
//
if (left.IsNull)
- return ReducedExpression.Create (right, this).Resolve (ec);
+ return ReducedExpression.Create (right, this, false).Resolve (ec);
left = Convert.ImplicitConversion (ec, unwrap ?? left, rtype, loc);
type = rtype;
// When both expressions are nullable the unwrap
// is needed only for null check not for value uwrap
//
- if (type.IsNullableType)
+ if (type.IsNullableType && TypeSpecComparer.IsEqual (NullableInfo.GetUnderlyingType (type), unwrap.Type))
unwrap.Load (ec);
else
left.Emit (ec);
return member.IsAccessibleAs (parameter_type);
}
+ bool IsValidCallerContext (MemberCore memberContext)
+ {
+ var m = memberContext as Method;
+ if (m != null)
+ return !m.IsPartialImplementation;
+
+ return true;
+ }
+
// <summary>
// Resolve is used in method definitions
// </summary>
{
var pa = rc.Module.PredefinedAttributes;
TypeSpec caller_type;
+ Attribute callerMemberName = null, callerFilePath = null;
foreach (var attr in attributes.Attrs) {
var atype = attr.ResolveTypeForComparison ();
caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ());
}
+ if (!IsValidCallerContext (rc.CurrentMemberDefinition)) {
+ rc.Report.Warning (4026, 1, attr.Location,
+ "The CallerMemberName applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments",
+ name);
+ }
+
modFlags |= Modifier.CallerMemberName;
+ callerMemberName = attr;
continue;
}
caller_type = rc.BuiltinTypes.Int;
if (caller_type != parameter_type && !Convert.ImplicitNumericConversionExists (caller_type, parameter_type)) {
rc.Report.Error (4017, attr.Location,
- "The CallerMemberName attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'",
+ "The CallerLineNumberAttribute attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'",
caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ());
}
+ if (!IsValidCallerContext (rc.CurrentMemberDefinition)) {
+ rc.Report.Warning (4024, 1, attr.Location,
+ "The CallerLineNumberAttribute applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments",
+ name);
+ }
+
modFlags |= Modifier.CallerLineNumber;
continue;
}
caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ());
}
+ if (!IsValidCallerContext (rc.CurrentMemberDefinition)) {
+ rc.Report.Warning (4025, 1, attr.Location,
+ "The CallerFilePath applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments",
+ name);
+ }
+
modFlags |= Modifier.CallerFilePath;
+ callerFilePath = attr;
continue;
}
}
+
+ if ((modFlags & Modifier.CallerLineNumber) != 0) {
+ if (callerMemberName != null) {
+ rc.Report.Warning (7081, 1, callerMemberName.Location,
+ "The CallerMemberNameAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerLineNumberAttribute",
+ Name);
+ }
+
+ if (callerFilePath != null) {
+ rc.Report.Warning (7082, 1, callerFilePath.Location,
+ "The CallerFilePathAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerLineNumberAttribute",
+ name);
+ }
+ }
+
+ if ((modFlags & Modifier.CallerMemberName) != 0) {
+ if (callerFilePath != null) {
+ rc.Report.Warning (7080, 1, callerFilePath.Location,
+ "The CallerMemberNameAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerFilePathAttribute",
+ name);
+ }
+
+ }
}
public void ResolveDefaultValue (ResolveContext rc)
// Check base property accessors conflict
//
var base_prop = (PropertySpec) base_member;
- if (Get != null) {
+ if (Get == null) {
+ if ((ModFlags & Modifiers.SEALED) != 0 && base_prop.HasGet && !base_prop.Get.IsAccessible (this)) {
+ // TODO: Should be different error code but csc uses for some reason same
+ Report.SymbolRelatedToPreviousError (base_prop);
+ Report.Error (545, Location,
+ "`{0}': cannot override because `{1}' does not have accessible get accessor",
+ GetSignatureForError (), base_prop.GetSignatureForError ());
+ ok = false;
+ }
+ } else {
if (!base_prop.HasGet) {
if (ok) {
Report.SymbolRelatedToPreviousError (base_prop);
}
}
- if (Set != null) {
+ if (Set == null) {
+ if ((ModFlags & Modifiers.SEALED) != 0 && base_prop.HasSet && !base_prop.Set.IsAccessible (this)) {
+ // TODO: Should be different error code but csc uses for some reason same
+ Report.SymbolRelatedToPreviousError (base_prop);
+ Report.Error (546, Location,
+ "`{0}': cannot override because `{1}' does not have accessible set accessor",
+ GetSignatureForError (), base_prop.GetSignatureForError ());
+ ok = false;
+ }
+ } else {
if (!base_prop.HasSet) {
if (ok) {
Report.SymbolRelatedToPreviousError (base_prop);
3000, 3001, 3002, 3003, 3005, 3006, 3007, 3008, 3009,
3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019,
3021, 3022, 3023, 3024, 3026, 3027,
- 4014
+ 4014, 4024, 4025, 4026,
+ 7035, 7080, 7081, 7082, 7095,
+ 8009,
};
static HashSet<int> AllWarningsHashSet;
V_3 = 3,
V_4 = 4,
V_5 = 5,
+ V_6 = 6,
Future = 100,
Default = LanguageVersion.Future,
switch (value.ToLowerInvariant ()) {
case "iso-1":
+ case "1":
settings.Version = LanguageVersion.ISO_1;
return ParseResult.Success;
case "default":
settings.Version = LanguageVersion.Default;
return ParseResult.Success;
+ case "2":
case "iso-2":
settings.Version = LanguageVersion.ISO_2;
return ParseResult.Success;
case "5":
settings.Version = LanguageVersion.V_5;
return ParseResult.Success;
+ case "6":
+ settings.Version = LanguageVersion.V_6;
+ return ParseResult.Success;
case "future":
settings.Version = LanguageVersion.Future;
return ParseResult.Success;
}
- report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', `3', `4', `5', `Default' or `Future'", value);
+ report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', Default or value in range 1 to 6", value);
return ParseResult.Error;
case "/codepage":
infinite = true;
}
- base.Resolve (bc);
-
- Iterator.Resolve (bc);
-
- return true;
+ return base.Resolve (bc) && Iterator.Resolve (bc);
}
protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
var prev_loop = bc.EnclosingLoop;
var prev_los = bc.EnclosingLoopOrSwitch;
bc.EnclosingLoopOrSwitch = bc.EnclosingLoop = this;
- Statement.Resolve (bc);
+ var ok = Statement.Resolve (bc);
bc.EnclosingLoopOrSwitch = prev_los;
bc.EnclosingLoop = prev_loop;
- return true;
+ return ok;
}
//
var async_type = storey.ReturnType;
if (async_type == null && async_block.ReturnTypeInference != null) {
- async_block.ReturnTypeInference.AddCommonTypeBoundAsync (expr.Type);
+ if (expr.Type.Kind == MemberKind.Void && !(this is ContextualReturn))
+ ec.Report.Error (4029, loc, "Cannot return an expression of type `void'");
+ else
+ async_block.ReturnTypeInference.AddCommonTypeBoundAsync (expr.Type);
return true;
}
if (async_type.Kind == MemberKind.Void) {
- ec.Report.Error (127, loc,
- "`{0}': A return keyword must not be followed by any expression when method returns void",
- ec.GetSignatureForError ());
-
+ ec.Report.Error (8030, loc,
+ "Anonymous function or lambda expression converted to a void returning delegate cannot return a value");
return false;
}
if (this is ContextualReturn)
return true;
- // Same error code as .NET but better error message
if (async_block.DelegateType != null) {
- ec.Report.Error (1997, loc,
- "`{0}': A return keyword must not be followed by an expression when async delegate returns `Task'. Consider using `Task<T>' return type",
- async_block.DelegateType.GetSignatureForError ());
+ ec.Report.Error (8031, loc,
+ "Async lambda expression or anonymous method converted to a `Task' cannot return a value. Consider returning `Task<T>'");
} else {
ec.Report.Error (1997, loc,
"`{0}': A return keyword must not be followed by an expression when async method returns `Task'. Consider using `Task<T>' return type",
ec.GetSignatureForError ());
-
}
-
return false;
}
}
}
} else {
- // Same error code as .NET but better error message
if (block_return_type.Kind == MemberKind.Void) {
- ec.Report.Error (127, loc,
- "`{0}': A return keyword must not be followed by any expression when delegate returns void",
- am.GetSignatureForError ());
-
+ ec.Report.Error (8030, loc,
+ "Anonymous function or lambda expression converted to a void returning delegate cannot return a value");
return false;
}
protected override void DoEmit (EmitContext ec)
{
if (expr != null) {
- expr.Emit (ec);
var async_body = ec.CurrentAnonymousMethod as AsyncInitializer;
if (async_body != null) {
- var async_return = ((AsyncTaskStorey) async_body.Storey).HoistedReturn;
+ var storey = (AsyncTaskStorey)async_body.Storey;
+ //
// It's null for await without async
- if (async_return != null) {
- async_return.EmitAssign (ec);
+ //
+ if (storey.HoistedReturnValue != null) {
+ //
+ // Special case hoisted return value (happens in try/finally scenario)
+ //
+ if (ec.HasSet (BuilderContext.Options.HoistedReturnResult)) {
+ if (storey.HoistedReturnValue is VariableReference) {
+ storey.HoistedReturnValue = ec.GetTemporaryField (storey.HoistedReturnValue.Type);
+ }
+
+ async_body.EmitRedirectedJump (ec, async_body.BodyEnd);
+ }
+
+ var async_return = (IAssignMethod)storey.HoistedReturnValue;
+ async_return.EmitAssign (ec, expr, false, false);
ec.EmitEpilogue ();
+ } else {
+ expr.Emit (ec);
}
ec.Emit (OpCodes.Leave, async_body.BodyEnd);
return;
}
+ expr.Emit (ec);
ec.EmitEpilogue ();
if (unwind_protect || ec.EmitAccurateDebugInfo)
} else {
label.AddGotoReference (rc, true);
}
-
- try_finally = null;
} else {
label.AddGotoReference (rc, false);
}
throw new InternalErrorException ("goto emitted before target resolved");
Label l = label.LabelTarget (ec);
+
+ if (try_finally != null && ec.HasSet (BuilderContext.Options.HoistedReturnResult) && IsLeavingFinally (label.Block)) {
+ var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod;
+ async_body.EmitRedirectedJump (ec, l);
+ l = async_body.BodyEnd;
+ }
+
ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l);
}
+
+ bool IsLeavingFinally (Block labelBlock)
+ {
+ var b = try_finally.Statement as Block;
+ while (b != null) {
+ if (b == labelBlock)
+ return true;
+
+ b = b.Parent;
+ }
+
+ return false;
+ }
public override object Accept (StructuralVisitor visitor)
{
protected override void DoEmit (EmitContext ec)
{
- if (expr == null)
- ec.Emit (OpCodes.Rethrow);
- else {
+ if (expr == null) {
+ var atv = ec.AsyncThrowVariable;
+ if (atv != null) {
+ if (atv.HoistedVariant != null) {
+ atv.HoistedVariant.Emit (ec);
+ } else {
+ atv.Emit (ec);
+ }
+
+ ec.Emit (OpCodes.Throw);
+ } else {
+ ec.Emit (OpCodes.Rethrow);
+ }
+ } else {
expr.Emit (ec);
ec.Emit (OpCodes.Throw);
{
li.CreateBuilder (ec);
- if (Initializer != null)
+ if (Initializer != null && !IsUnreachable)
((ExpressionStatement) Initializer).EmitStatement (ec);
if (declarators != null) {
foreach (var d in declarators) {
d.Variable.CreateBuilder (ec);
- if (d.Initializer != null) {
+ if (d.Initializer != null && !IsUnreachable) {
ec.Mark (d.Variable.Location);
((ExpressionStatement) d.Initializer).EmitStatement (ec);
}
public void EmitAddressOf (EmitContext ec)
{
+ // TODO: Need something better for temporary variables
+ if ((flags & Flags.CompilerGenerated) != 0)
+ CreateBuilder (ec);
+
ec.Emit (OpCodes.Ldloca, builder);
}
DoEmit (ec);
}
- protected void EmitScopeInitializers (EmitContext ec)
+ public void EmitScopeInitializers (EmitContext ec)
{
foreach (Statement s in scope_initializers)
s.Emit (ec);
+
+ scope_initializers = null;
}
protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
end_unreachable = s.FlowAnalysis (fc);
if (s.IsUnreachable) {
- statements[startIndex] = new EmptyStatement (s.loc);
+ statements [startIndex] = RewriteUnreachableStatement (s);
continue;
}
if (s.IsUnreachable) {
s.FlowAnalysis (fc);
- statements[startIndex] = new EmptyStatement (s.loc);
+ statements [startIndex] = RewriteUnreachableStatement (s);
}
}
}
return !Explicit.HasReachableClosingBrace;
}
+ static Statement RewriteUnreachableStatement (Statement s)
+ {
+ // LAMESPEC: It's not clear whether declararion statement should be part of reachability
+ // analysis. Even csc report unreachable warning for it but it's actually used hence
+ // we try to emulate this behaviour
+ //
+ // Consider:
+ // goto L;
+ // int v;
+ // L:
+ // v = 1;
+
+ if (s is BlockVariable)
+ return s;
+
+ return new EmptyStatement (s.loc);
+ }
+
public void ScanGotoJump (Statement label)
{
int i;
var label = value as LabeledStatement;
Block b = block;
if (label != null) {
- do {
- if (label.Block == b)
- return label;
- b = b.Parent;
- } while (b != null);
+ if (IsLabelVisible (label, b))
+ return label;
+
} else {
List<LabeledStatement> list = (List<LabeledStatement>) value;
for (int i = 0; i < list.Count; ++i) {
label = list[i];
- if (label.Block == b)
+ if (IsLabelVisible (label, b))
return label;
}
}
return null;
}
+ static bool IsLabelVisible (LabeledStatement label, Block b)
+ {
+ do {
+ if (label.Block == b)
+ return true;
+ b = b.Parent;
+ } while (b != null);
+
+ return false;
+ }
+
public ParameterInfo GetParameterInfo (Parameter p)
{
for (int i = 0; i < parameters.Count; ++i) {
EmitTryBodyPrepare (ec);
EmitTryBody (ec);
- ec.BeginFinallyBlock ();
+ bool begin = EmitBeginFinallyBlock (ec);
Label start_finally = ec.DefineLabel ();
if (resume_points != null) {
EmitFinallyBody (ec);
}
- ec.EndExceptionBlock ();
+ if (begin)
+ ec.EndExceptionBlock ();
}
public override void EmitForDispose (EmitContext ec, LocalBuilder pc, Label end, bool have_dispatcher)
return res;
}
+ protected virtual bool EmitBeginFinallyBlock (EmitContext ec)
+ {
+ ec.BeginFinallyBlock ();
+ return true;
+ }
+
public override Reachability MarkReachable (Reachability rc)
{
base.MarkReachable (rc);
public override bool Resolve (BlockContext bc)
{
ctch.Filter = ctch.Filter.Resolve (bc);
- var c = ctch.Filter as Constant;
- if (c != null && !c.IsDefaultValue) {
- bc.Report.Warning (7095, 1, ctch.Filter.Location, "Exception filter expression is a constant");
+
+ if (ctch.Filter != null) {
+ if (ctch.Filter.ContainsEmitWithAwait ()) {
+ bc.Report.Error (7094, ctch.Filter.Location, "The `await' operator cannot be used in the filter expression of a catch clause");
+ }
+
+ var c = ctch.Filter as Constant;
+ if (c != null && !c.IsDefaultValue) {
+ bc.Report.Warning (7095, 1, ctch.Filter.Location, "Exception filter expression is a constant");
+ }
}
return true;
if (li != null)
EmitCatchVariableStore (ec);
- } else {
- if (IsGeneral)
- ec.BeginCatchBlock (ec.BuiltinTypes.Object);
- else
- ec.BeginCatchBlock (CatchType);
- if (li != null) {
- EmitCatchVariableStore (ec);
+ if (Block.HasAwait) {
+ Block.EmitScopeInitializers (ec);
} else {
- ec.Emit (OpCodes.Pop);
+ Block.Emit (ec);
}
+
+ return;
}
- Block.Emit (ec);
+ if (IsGeneral)
+ ec.BeginCatchBlock (ec.BuiltinTypes.Object);
+ else
+ ec.BeginCatchBlock (CatchType);
+
+ if (li != null) {
+ EmitCatchVariableStore (ec);
+ } else {
+ ec.Emit (OpCodes.Pop);
+ }
+
+ if (!Block.HasAwait)
+ Block.Emit (ec);
}
void EmitCatchVariableStore (EmitContext ec)
hoisted_temp = new LocalTemporary (li.Type);
hoisted_temp.Store (ec);
- // switch to assigning from the temporary variable and not from top of the stack
+ // switch to assignment from temporary variable and not from top of the stack
assign.UpdateSource (hoisted_temp);
}
}
- public override bool Resolve (BlockContext ec)
+ public override bool Resolve (BlockContext bc)
{
- using (ec.Set (ResolveContext.Options.CatchScope)) {
- if (type_expr != null) {
- type = type_expr.ResolveAsType (ec);
+ using (bc.Set (ResolveContext.Options.CatchScope)) {
+ if (type_expr == null) {
+ if (CreateExceptionVariable (bc.Module.Compiler.BuiltinTypes.Object)) {
+ Expression source = new EmptyExpression (li.Type);
+ assign = new CompilerAssign (new LocalVariableReference (li, Location.Null), source, Location.Null);
+ Block.AddScopeStatement (new StatementExpression (assign, Location.Null));
+ }
+ } else {
+ type = type_expr.ResolveAsType (bc);
if (type == null)
return false;
- if (type.BuiltinType != BuiltinTypeSpec.Type.Exception && !TypeSpec.IsBaseClass (type, ec.BuiltinTypes.Exception, false)) {
- ec.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception");
+ if (li == null)
+ CreateExceptionVariable (type);
+
+ if (type.BuiltinType != BuiltinTypeSpec.Type.Exception && !TypeSpec.IsBaseClass (type, bc.BuiltinTypes.Exception, false)) {
+ bc.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception");
} else if (li != null) {
li.Type = type;
- li.PrepareAssignmentAnalysis (ec);
+ li.PrepareAssignmentAnalysis (bc);
// source variable is at the top of the stack
Expression source = new EmptyExpression (li.Type);
}
Block.SetCatchBlock ();
- return Block.Resolve (ec);
+ return Block.Resolve (bc);
}
}
+ bool CreateExceptionVariable (TypeSpec type)
+ {
+ if (!Block.HasAwait)
+ return false;
+
+ // TODO: Scan the block for rethrow expression
+ //if (!Block.HasRethrow)
+ // return;
+
+ li = LocalVariable.CreateCompilerGenerated (type, block, Location.Null);
+ return true;
+ }
+
protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
{
- if (li != null) {
+ if (li != null && !li.IsCompilerGenerated) {
fc.SetVariableAssigned (li.VariableInfo, true);
}
ExplicitBlock fini;
List<DefiniteAssignmentBitSet> try_exit_dat;
+ // TODO: Should be on stack only
+ Label prev_body_end;
+ Expression prev_HoistedReturn;
+
public TryFinally (Statement stmt, ExplicitBlock fini, Location loc)
: base (stmt, loc)
{
protected override void EmitTryBody (EmitContext ec)
{
+ if (fini.HasAwait) {
+ prev_HoistedReturn = ec.AsyncTaskStorey.HoistedReturnValue;
+ var ai = (AsyncInitializer)ec.CurrentAnonymousMethod;
+ prev_body_end = ai.BodyEnd;
+ ai.BodyEnd = ec.DefineLabel ();
+
+ using (ec.With (BuilderContext.Options.HoistedReturnResult, true)) {
+ stmt.Emit (ec);
+ }
+
+ return;
+ }
+
stmt.Emit (ec);
}
+ protected override bool EmitBeginFinallyBlock (EmitContext ec)
+ {
+ if (fini.HasAwait)
+ return false;
+
+ return base.EmitBeginFinallyBlock (ec);
+ }
+
public override void EmitFinallyBody (EmitContext ec)
{
+ if (!fini.HasAwait) {
+ fini.Emit (ec);
+ return;
+ }
+
+ //
+ // Emits catch block like
+ //
+ // catch (object temp) {
+ // this.exception_field = temp;
+ // }
+ //
+ var type = ec.BuiltinTypes.Object;
+ ec.BeginCatchBlock (type);
+
+ var temp = ec.GetTemporaryLocal (type);
+ ec.Emit (OpCodes.Stloc, temp);
+
+ var exception_field = ec.GetTemporaryField (type);
+ ec.EmitThis ();
+ ec.Emit (OpCodes.Ldloc, temp);
+ exception_field.EmitAssignFromStack (ec);
+
+ ec.EndExceptionBlock ();
+
+ ec.FreeTemporaryLocal (temp, type);
+
+ var ai = (AsyncInitializer)ec.CurrentAnonymousMethod;
+ ec.MarkLabel (ai.BodyEnd);
+ var local_return = ai.BodyEnd;
+ ai.BodyEnd = prev_body_end;
+ var fin_hoisted_return = ec.AsyncTaskStorey.HoistedReturnValue as StackFieldExpr;
+ ec.AsyncTaskStorey.HoistedReturnValue = prev_HoistedReturn;
+
fini.Emit (ec);
+
+ //
+ // Emits exception rethrow
+ //
+ // if (this.exception_field != null)
+ // throw this.exception_field;
+ //
+ exception_field.Emit (ec);
+ var skip_throw = ec.DefineLabel ();
+ ec.Emit (OpCodes.Brfalse_S, skip_throw);
+ exception_field.Emit (ec);
+ ec.Emit (OpCodes.Throw);
+ ec.MarkLabel (skip_throw);
+
+ exception_field.IsAvailableForReuse = true;
+
+ ai.EmitRedirectedJumpsTable (ec, fin_hoisted_return, local_return);
+ if (fin_hoisted_return != null)
+ fin_hoisted_return.PrepareCleanup (ec);
}
protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
public Block Block;
List<Catch> clauses;
readonly bool inside_try_finally;
+ List<Catch> catch_sm;
public TryCatch (Block block, List<Catch> catch_clauses, Location l, bool inside_try_finally)
: base (l)
ok &= c.Resolve (bc);
+ if (c.Block.HasAwait) {
+ if (catch_sm == null)
+ catch_sm = new List<Catch> ();
+
+ catch_sm.Add (c);
+ }
+
if (c.Filter != null)
continue;
Block.Emit (ec);
- foreach (Catch c in clauses)
+ LocalBuilder state_variable = null;
+ foreach (Catch c in clauses) {
c.Emit (ec);
+ if (catch_sm != null) {
+ if (state_variable == null)
+ state_variable = ec.GetTemporaryLocal (ec.Module.Compiler.BuiltinTypes.Int);
+
+ var index = catch_sm.IndexOf (c);
+ if (index < 0)
+ continue;
+
+ ec.EmitInt (index + 1);
+ ec.Emit (OpCodes.Stloc, state_variable);
+ }
+ }
+
if (!inside_try_finally)
ec.EndExceptionBlock ();
+
+ if (state_variable != null) {
+ ec.Emit (OpCodes.Ldloc, state_variable);
+
+ var labels = new Label [catch_sm.Count + 1];
+ for (int i = 0; i < labels.Length; ++i) {
+ labels [i] = ec.DefineLabel ();
+ }
+
+ var end = ec.DefineLabel ();
+ ec.Emit (OpCodes.Switch, labels);
+
+ // 0 value is default label
+ ec.MarkLabel (labels [0]);
+ ec.Emit (OpCodes.Br, end);
+
+ var atv = ec.AsyncThrowVariable;
+ Catch c = null;
+ for (int i = 0; i < catch_sm.Count; ++i) {
+ if (c != null && c.Block.HasReachableClosingBrace)
+ ec.Emit (OpCodes.Br, end);
+
+ ec.MarkLabel (labels [i + 1]);
+ c = catch_sm [i];
+ ec.AsyncThrowVariable = c.Variable;
+ c.Block.Emit (ec);
+ }
+ ec.AsyncThrowVariable = atv;
+
+ ec.MarkLabel (end);
+ }
}
protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
public VariableDeclaration (LocalVariable li, Location loc)
: base (li)
{
+ reachable = true;
this.loc = loc;
}
}
}
- base.Resolve (ec);
+ var ok = base.Resolve (ec);
if (vr != null)
vr.IsLockedByStatement = vr_locked;
- return true;
+ return ok;
}
protected override void CloneTo (CloneContext clonectx, Statement t)
public RuntimeDispose (LocalVariable lv, Location loc)
: base (lv, loc)
{
+ reachable = true;
}
protected override void CheckIDiposableConversion (BlockContext bc, LocalVariable li, Expression initializer)
Statement = new CollectionForeach (this, variable, expr);
}
- base.Resolve (ec);
- return true;
+ return base.Resolve (ec);
}
protected override void DoEmit (EmitContext ec)
}
}
+ public bool IsStructOrEnum {
+ get {
+ return (Kind & (MemberKind.Struct | MemberKind.Enum)) != 0;
+ }
+ }
+
public bool IsTypeBuilder {
get {
#if STATIC
return ac;
}
+
+ public override List<MissingTypeSpecReference> ResolveMissingDependencies (MemberSpec caller)
+ {
+ return Element.ResolveMissingDependencies (caller);
+ }
}
class ReferenceContainer : ElementTypeSpec
+++ /dev/null
-// Compiler options: -t:library
-
-using System;
-using System.Runtime.InteropServices;
-
-class A
-{
- [DllImport ("Dingus", CharSet=CharSet.Auto)]
- extern static void Do<T> ();
-
- [DllImport ("Dingus")]
- extern static void Do2<T> ();
-
- public static void Main ()
- {
-
- }
-}
\ No newline at end of file
if (b != "a")
return 1;
- int? i = null ?? null;
- if (i != null)
- return 2;
-
object z = a ?? null;
- if (i != null)
+ if (z != null)
return 3;
string p = default (string) ?? "a";
--- /dev/null
+using System;
+
+struct S
+{
+ public static explicit operator int? (S? s)
+ {
+ throw new ApplicationException ();
+ }
+
+ public static implicit operator int (S? s)
+ {
+ return 2;
+ }
+}
+
+class C
+{
+ public static int Main()
+ {
+ int? nn = 3;
+ S? s = new S ();
+ int? ret = s ?? nn;
+ if (ret != 2)
+ return 1;
+
+ return 0;
+ }
+}
--- /dev/null
+// Compiler options: -unsafe
+
+unsafe class X
+{
+ struct S
+ {
+ }
+
+ public class N<T>
+ {
+ S* s;
+ }
+}
+
+public class C
+{
+ public static void Main ()
+ {
+ new X.N<int> ();
+ }
+}
\ No newline at end of file
Value_1 = 1
}
+enum EnumInt
+{
+ A,
+ B,
+ C
+}
class NewTest<T>
{
Assert (true, e.Compile ().Invoke (4, 4));
}
+ void EqualTest_16 ()
+ {
+ Expression<Func<EnumInt?, EnumInt, bool?>> e = (x, y) => x == y;
+ AssertNodeType (e, ExpressionType.Convert);
+ Assert (false, e.Compile () (null, 0));
+ Assert (true, e.Compile () (EnumInt.B, EnumInt.B));
+ }
+
void EqualTestDelegate ()
{
Expression<Func<Delegate, Delegate, bool>> e1 = (a, b) => a == b;
--- /dev/null
+using System;
+
+class Test
+{
+ public static int M (bool b = false)
+ {
+ Console.WriteLine ("PASS");
+ return 0;
+ }
+
+ public static int M (params string[] args)
+ {
+ Console.WriteLine ("FAIL");
+ return 1;
+ }
+
+ public static int Main ()
+ {
+ return M ();
+ }
+}
{
public struct DC
{
- private readonly Guid m_Id;
+ public readonly Guid m_Id;
public DC (Guid Id)
{
if (dc.Id.Equals (default (Guid)))
return 1;
+ if (dc.m_Id.Equals (default (Guid)))
+ return 2;
+
+Console.WriteLine ("ok");
return 0;
}
}
--- /dev/null
+class X
+{
+ public static void Main ()
+ {
+ int i = 0;
+ if (i == 1) {
+ a:
+ switch (i) {
+ default:
+ goto a;
+ }
+ } else if (i == 2) {
+ a:
+ switch (i) {
+ default:
+ goto a;
+ }
+ }
+ }
+}
--- /dev/null
+using System.Reflection;
+using System.Diagnostics;
+using System;
+
+[assembly: AssemblyVersion ("2011.04.0.0")]
+[assembly: AssemblyFileVersion ("2011.02.0.0")]
+
+class X
+{
+ public static int Main ()
+ {
+ Assembly executingAssembly = Assembly.GetAssembly (typeof(X));
+ FileVersionInfo fvi = FileVersionInfo.GetVersionInfo (executingAssembly.Location);
+ if (fvi.FileVersion != "2011.02.0.0")
+ return 1;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+public class A
+{
+ public static bool TryAssign (out int x)
+ {
+ x = 0;
+ return true;
+ }
+
+ public static void Main ()
+ {
+ int x, y;
+ if ((!TryAssign (out x) || x == 0) & (!TryAssign (out y) || y == 0)) {
+ }
+ }
+}
--- /dev/null
+using System;
+
+[AttributeUsage (AttributeTargets.All + 0xFFFFFE + 1)]
+class A1Attribute : Attribute
+{
+}
+
+[AttributeUsage ((AttributeTargets) 0xffff)]
+class A2Attribute : Attribute
+{
+}
+
+public class Test
+{
+ public static void Main ()
+ {
+
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+class X
+{
+ public void Test (int g, out int results)
+ {
+ if ((results = Foo (g > 0 ? 1 : 2)) != 4)
+ {
+ Console.WriteLine (results);
+ }
+ }
+
+ int Foo (object o)
+ {
+ return 4;
+ }
+
+ public static void Main ()
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+class Program
+{
+ public static void Main ()
+ {
+ goto L1;
+ int z;
+ L1:
+ z = 3;
+ Console.WriteLine (z);
+ }
+}
\ No newline at end of file
var s = new S (await Task.Factory.StartNew (() => 77), await Task.Factory.StartNew (() => "b"));
return s.Value == 77;
}
+
+ async Task<int> NewDelegate_1 ()
+ {
+ var f = new Func<int> (await NewDelegate_1_0 ());
+ return f ();
+ }
+
+ static async Task<Func<int>> NewDelegate_1_0 ()
+ {
+ await Task.Factory.StartNew (() => { });
+ return () => 0;
+ }
async Task<int> NewInitTest_1 ()
{
-// Compiler options: -langversion:future
-
using System;
using System.Threading.Tasks;
using System.Threading;
+using System.Collections;
+using System.Collections.Generic;
interface IFoo
{
}
}
+struct S2 : IEnumerable
+{
+ public List<int> Values;
+
+ public void Add (int x)
+ {
+ if (Values == null)
+ Values = new List<int> ();
+
+ Values.Add(x);
+ }
+
+ public IEnumerator GetEnumerator()
+ {
+ return Values as IEnumerator;
+ }
+}
+
class Tester
{
async Task<T> NewInitTestGen<T> () where T : struct, IFoo
{
- int value = 9;
-
var s = new T () {
Value = await Task.Factory.StartNew (() => 13).ConfigureAwait (false)
};
return s;
}
+
+ static async Task<int> NewInitCol ()
+ {
+ var s = new S2 {
+ await Task.FromResult (1),
+ await Task.Factory.StartNew (() => 2)
+ };
+
+ return s.Values [0] + s.Values [1];
+ }
public static int Main ()
{
if (t.Result.Value != 13)
return 2;
+
+ var v = NewInitCol ().Result;
+ if (v != 3)
+ return 3;
return 0;
}
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class C
+{
+ static int counter;
+ public static async Task TestSingleAwait (bool throwException)
+ {
+ try {
+ if (throwException)
+ throw new ApplicationException ();
+ } catch (ApplicationException ex) {
+ Console.WriteLine ("x1a");
+ ++counter;
+ await Call ();
+ Console.WriteLine ("x2a");
+ ++counter;
+ } catch {
+ throw;
+ }
+
+ Console.WriteLine ("end");
+ }
+
+ public static async Task TestDoubleAwait (bool throwException)
+ {
+ try {
+ if (throwException)
+ throw new ApplicationException ();
+ } catch (ApplicationException ex) {
+ Console.WriteLine ("x1a");
+ ++counter;
+ await Call ();
+ Console.WriteLine ("x2a");
+ ++counter;
+ } catch {
+ Console.WriteLine ("x1b");
+ counter += 4;
+ await Call ();
+ Console.WriteLine ("x2b");
+ counter += 7;
+ }
+
+ Console.WriteLine ("end");
+ }
+
+ static Task Call ()
+ {
+ return Task.Factory.StartNew (() => false);
+ }
+
+ void HH ()
+ {
+ try {
+ throw new ApplicationException ();
+ } catch {
+ throw;
+ }
+ }
+
+ public static int Main ()
+ {
+ TestSingleAwait (true).Wait ();
+ Console.WriteLine (counter);
+ if (counter != 2)
+ return 1;
+
+ TestSingleAwait (false).Wait ();
+ if (counter != 2)
+ return 2;
+
+ counter = 0;
+
+ TestDoubleAwait (true).Wait ();
+ Console.WriteLine (counter);
+ if (counter != 2)
+ return 3;
+
+ TestDoubleAwait (false).Wait ();
+ if (counter != 2)
+ return 4;
+
+ return 0;
+ }
+}
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class X
+{
+ public static void Main ()
+ {
+ Invoke (async delegate {
+ await Task.Yield ();
+ return 1;
+ });
+ }
+
+ static T Invoke<T> (Func<Task<T>> m)
+ {
+ return default (T);
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class C
+{
+ static int counter;
+
+ public static async Task TestRethrow (Exception e)
+ {
+ try {
+ throw e;
+ } catch (ApplicationException) {
+ Console.WriteLine ("x1a");
+ counter = 1;
+ await Task.Delay (1);
+ Console.WriteLine ("x2a");
+ counter = 3;
+ throw;
+ } catch {
+ counter = 9;
+ await Task.Delay (1);
+ Console.WriteLine ("ga");
+ throw;
+ }
+ }
+
+ public static int Main ()
+ {
+ var ex = new ApplicationException ();
+ try {
+ TestRethrow (ex).Wait ();
+ } catch (AggregateException e) {
+ if (e.InnerException != ex)
+ return 1;
+ }
+
+ if (counter != 3)
+ return 2;
+
+ var ex2 = new NotSupportedException ();
+ try {
+ TestRethrow (ex2).Wait ();
+ } catch (AggregateException e) {
+ if (e.InnerException != ex2)
+ return 3;
+ }
+
+ if (counter != 9)
+ return 4;
+
+ Console.WriteLine ("ok");
+ return 0;
+ }
+}
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class TestFinally
+{
+ static int counter;
+
+ async static Task Test (bool throwException)
+ {
+ try {
+ if (throwException)
+ throw new ApplicationException ();
+
+ ++counter;
+ System.Console.WriteLine ();
+ } finally {
+ counter += 10;
+ await Task.Delay (2);
+ counter += 100;
+ }
+ counter += 1000;
+ }
+
+ static int Main ()
+ {
+ Test (false).Wait ();
+ if (counter != 1111)
+ return 1;
+
+ counter = 0;
+ try {
+ Test (true).Wait ();
+ return 2;
+ } catch (AggregateException) {
+ }
+
+ if (counter != 110)
+ return 3;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class Test
+{
+ public static async Task<int[]> Run ()
+ {
+ return new int[] {
+ 1, await Task.Factory.StartNew (() => 2)
+ };
+ }
+
+ public static int Main ()
+ {
+ var t = Run ().Result;
+ if (t [0] != 1)
+ return 1;
+
+ if (t [1] != 2)
+ return 2;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class Test
+{
+ static bool fin;
+
+ static async Task<int> YieldValue (int a)
+ {
+ await Task.Yield ();
+ return a;
+ }
+
+ static async Task<int> TestFinallyWithReturn (int value)
+ {
+ fin = false;
+ try {
+ if (value > 4)
+ return 5;
+
+ value += 10;
+ Console.WriteLine ("try");
+ } finally {
+ fin = true;
+ Console.WriteLine ("finally");
+ value += await YieldValue (100);
+ }
+
+ value += 1000;
+ Console.WriteLine ("over");
+
+ return value;
+ }
+
+ static async Task TestFinallyWithReturnNoValue (int value)
+ {
+ fin = false;
+ try {
+ if (value > 4)
+ return;
+
+ value += 10;
+ Console.WriteLine ("try");
+ } finally {
+ fin = true;
+ Console.WriteLine ("finally");
+ value += await YieldValue (100);
+ }
+
+ value += 1000;
+ Console.WriteLine ("over");
+ }
+
+ static async Task<int> TestFinallyWithGoto (int value)
+ {
+ fin = false;
+ try {
+ if (value > 4)
+ goto L;
+
+ value += 10;
+ Console.WriteLine ("try");
+ } finally {
+ fin = true;
+ Console.WriteLine ("finally");
+ value += await YieldValue (100);
+ }
+ value += 1000;
+L:
+ Console.WriteLine ("over");
+ return value;
+ }
+
+ static async Task<int> TestFinallyWithGotoAndReturn (int value)
+ {
+ fin = false;
+ try {
+ if (value > 4)
+ goto L;
+
+ value += 10;
+ Console.WriteLine ("try");
+ if (value > 12)
+ return 9;
+ } finally {
+ fin = true;
+ Console.WriteLine ("finally");
+ value += await YieldValue (100);
+ }
+ value += 1000;
+L:
+ Console.WriteLine ("over");
+ return value;
+ }
+
+ public static int Main ()
+ {
+ if (TestFinallyWithReturn (9).Result != 5)
+ return 1;
+
+ if (!fin)
+ return 2;
+
+ if (TestFinallyWithReturn (1).Result != 1111)
+ return 3;
+
+ if (!fin)
+ return 4;
+
+ TestFinallyWithReturnNoValue (9).Wait ();
+ if (!fin)
+ return 5;
+
+ TestFinallyWithReturnNoValue (1).Wait ();
+ if (!fin)
+ return 6;
+
+ if (TestFinallyWithGoto (9).Result != 109)
+ return 7;
+
+ if (!fin)
+ return 8;
+
+ if (TestFinallyWithGoto (1).Result != 1111)
+ return 9;
+
+ if (!fin)
+ return 10;
+
+ if (TestFinallyWithGotoAndReturn (9).Result != 109)
+ return 11;
+
+ if (!fin)
+ return 12;
+
+ if (TestFinallyWithGotoAndReturn (1).Result != 1111)
+ return 13;
+
+ if (!fin)
+ return 14;
+
+ if (TestFinallyWithGotoAndReturn (3).Result != 9)
+ return 15;
+
+ if (!fin)
+ return 16;
+
+ Console.WriteLine ("ok");
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+class X
+{
+ public static int Main ()
+ {
+ try {
+ bool x = true;
+ try {
+ throw new ApplicationException ();
+ } catch (NullReferenceException) if (x) {
+ throw;
+ }
+
+ return 1;
+ } catch (ApplicationException) {
+ Console.WriteLine ("ok");
+ return 0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+class X
+{
+ static Exception ex = new ApplicationException ();
+
+ public static int Main ()
+ {
+ if (Test (5, null).Result != 5)
+ return 1;
+
+ try {
+ Test (5, ex).Wait ();
+ return 2;
+ } catch (AggregateException ae) {
+ if (ae.InnerException != ex)
+ return 3;
+ }
+
+ try {
+ Test (15, ex).Wait ();
+ return 4;
+ } catch (AggregateException ae) {
+ if (ae.InnerException != ex)
+ return 5;
+ }
+
+ try {
+ TestGeneric (5).Wait ();
+ return 10;
+ } catch (AggregateException ae) {
+ if (ae.InnerException != ex)
+ return 11;
+ }
+
+ try {
+ TestGeneric (15).Wait ();
+ return 12;
+ } catch (AggregateException ae) {
+ if (ae.InnerException != ex)
+ return 13;
+ }
+
+ return 0;
+ }
+
+ async static Task<int> Test (int x, Exception e)
+ {
+ try {
+ Console.WriteLine (x);
+ if (e != null)
+ throw e;
+ } catch (Exception) if (x != 15) {
+ await Task.FromResult (0);
+ throw;
+ }
+
+ return x;
+ }
+
+ async static Task<int> TestGeneric (int x)
+ {
+ try {
+ Console.WriteLine (x);
+ throw ex;
+ } catch if (x != 15) {
+ await Task.FromResult (0);
+ throw;
+ }
+
+ return x;
+ }
+}
\ No newline at end of file
-<?xml version="1.0"?>\r
-<doc>\r
- <assembly>\r
- <name>test-xml-063</name>\r
- </assembly>\r
- <members>\r
- <member name="T:A">\r
- Test A\r
- </member>\r
- <member name="T:Test">\r
- <seealso cref="M:Test.op_Explicit(Test)~System.Int64"/>\r
- <seealso cref="M:Test.op_Explicit(Test)~A"/>\r
- <seealso cref="M:Test.op_Implicit(System.Int32)~Test"/>\r
- <seealso cref="M:Test.op_Implicit(System.Boolean)~Test"/>\r
- <seealso cref="M:Test.op_LogicalNot(Test)"/>\r
- <seealso cref="M:Test.#ctor"/>\r
- </member>\r
- <member name="M:Test.#ctor">\r
- Start\r
- </member>\r
- <member name="M:Test.op_Explicit(Test)~A">\r
- Comment\r
- </member>\r
- <member name="M:Test.op_Explicit(Test)~System.Int64">\r
- Comment 2\r
- </member>\r
- <member name="M:Test.op_Implicit(System.Int32)~Test">\r
- Comment 3\r
- </member>\r
- <member name="M:Test.op_Implicit(System.Boolean)~Test">\r
- Comment 4\r
- </member>\r
- <member name="M:Test.op_LogicalNot(Test)">\r
- Comment 5\r
- </member>\r
- </members>\r
-</doc>\r
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>test-xml-063</name>
+ </assembly>
+ <members>
+ <member name="T:A">
+ Test A</member>
+ <member name="T:Test">
+ <seealso cref="M:Test.op_Explicit(Test)~System.Int64" />
+ <seealso cref="M:Test.op_Explicit(Test)~A" />
+ <seealso cref="M:Test.op_Implicit(System.Int32)~Test" />
+ <seealso cref="M:Test.op_Implicit(System.Boolean)~Test" />
+ <seealso cref="M:Test.op_LogicalNot(Test)" />
+ <seealso cref="M:Test.op_Equality(Test,System.Int32)" />
+ <seealso cref="M:Test.op_Inequality(Test,System.Int32)" />
+ <seealso cref="M:Test.#ctor" />
+ </member>
+ <member name="M:Test.#ctor">
+ Start</member>
+ <member name="M:Test.op_Explicit(Test)~A">
+ Comment</member>
+ <member name="M:Test.op_Explicit(Test)~System.Int64">
+ Comment 2</member>
+ <member name="M:Test.op_Implicit(System.Int32)~Test">
+ Comment 3</member>
+ <member name="M:Test.op_Implicit(System.Boolean)~Test">
+ Comment 4</member>
+ <member name="M:Test.op_LogicalNot(Test)">
+ Comment 5</member>
+ <member name="M:Test.op_Equality(Test,System.Int32)">
+ Comment 6</member>
+ <member name="M:Test.op_Inequality(Test,System.Int32)">
+ Comment 7</member>
+ <member name="M:Test.op_Equality(Test,System.Int64)">
+ Comment 61</member>
+ <member name="M:Test.op_Inequality(Test,System.Int64)">
+ Comment 72</member>
+ </members>
+</doc>
/// <seealso cref="implicit operator Test"/>
/// <seealso cref="implicit operator Test(bool)"/>
/// <seealso cref="operator !(Test)"/>
+/// <seealso cref="operator =="/>
+/// <seealso cref="operator !="/>
/// <seealso cref="Test()"/>
public class Test
{
Test ()
{
}
-
+
/// Comment
- public static explicit operator A(Test test)
+ public static explicit operator A (Test test)
{
return new A ();
}
-
+
/// Comment 2
- public static explicit operator long(Test test)
+ public static explicit operator long (Test test)
{
return 2;
}
-
+
/// Comment 3
- public static implicit operator Test(int test)
+ public static implicit operator Test (int test)
{
return new Test ();
}
-
+
/// Comment 4
- public static implicit operator Test(bool test)
+ public static implicit operator Test (bool test)
{
return new Test ();
}
-
+
/// Comment 5
public static bool operator !(Test test)
{
return false;
}
-
+
+ /// Comment 6
+ public static bool operator == (Test a, int b)
+ {
+ return true;
+ }
+
+ /// Comment 7
+ public static bool operator != (Test a, int b)
+ {
+ return false;
+ }
+
+ /// Comment 61
+ public static bool operator == (Test a, long b)
+ {
+ return true;
+ }
+
+ /// Comment 72
+ public static bool operator != (Test a, long b)
+ {
+ return false;
+ }
+
static void Main ()
{
}
<size>2</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
- <size>245</size>\r
+ <size>208</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<test name="gtest-433.cs">\r
<type name="M">\r
<method name="Void Main()" attrs="150">\r
- <size>38</size>\r
+ <size>42</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<size>28</size>\r
</method>\r
<method name="Void ThisWorksFine()" attrs="150">\r
- <size>39</size>\r
+ <size>41</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-614.cs">\r
+ <type name="S">\r
+ <method name="System.Nullable`1[System.Int32] op_Explicit(System.Nullable`1[S])" attrs="2198">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Int32 op_Implicit(System.Nullable`1[S])" attrs="2198">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>100</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="gtest-615.cs">\r
+ <type name="X">\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+N`1[T]">\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>8</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-anontype-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Tester">\r
+ <method name="Void EqualTest_16()" attrs="129">\r
+ <size>185</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-etree-02.cs">\r
<type name="M">\r
<size>33</size>\r
</method>\r
<method name="T Value[T]()" attrs="145">\r
- <size>84</size>\r
+ <size>86</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-optional-31.cs">\r
+ <type name="Test">\r
+ <method name="Int32 M(Boolean)" attrs="150">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="Int32 M(System.String[])" attrs="150">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-partial-01.cs">\r
<type name="B`1[U]">\r
<method name="Void .ctor()" attrs="6278">\r
<test name="test-279.cs">\r
<type name="FlagsAttributeDemo">\r
<method name="Int32 Main()" attrs="150">\r
- <size>51</size>\r
+ <size>55</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<test name="test-376.cs">\r
<type name="C">\r
<method name="Int32 Main()" attrs="150">\r
- <size>90</size>\r
+ <size>99</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</type>\r
<type name="Test">\r
<method name="Void Main()" attrs="150">\r
- <size>72</size>\r
+ <size>76</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<test name="test-453.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
- <size>34</size>\r
+ <size>38</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</type>\r
<type name="X">\r
<method name="Int32 Main()" attrs="150">\r
- <size>197</size>\r
+ <size>204</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<test name="test-833.cs">\r
<type name="MainClass">\r
<method name="Int32 Main()" attrs="150">\r
- <size>93</size>\r
+ <size>141</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
</test>\r
+ <test name="test-859.cs">\r
+ <type name="X">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>40</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-86.cs">\r
<type name="T.T">\r
<method name="Int32 method1(System.Type, Int32)" attrs="145">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-892.cs">\r
+ <type name="X">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>66</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-893.cs">\r
+ <type name="A">\r
+ <method name="Boolean TryAssign(Int32 ByRef)" attrs="150">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Void Main()" attrs="150">\r
+ <size>48</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-894.cs">\r
+ <type name="A1Attribute">\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="A2Attribute">\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-895.cs">\r
+ <type name="X">\r
+ <method name="Void Test(Int32, Int32 ByRef)" attrs="134">\r
+ <size>47</size>\r
+ </method>\r
+ <method name="Int32 Foo(System.Object)" attrs="129">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Void Main()" attrs="150">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-896.cs">\r
+ <type name="Program">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-9.cs">\r
<type name="X">\r
<method name="Int32 Main(System.String[])" attrs="150">\r
</type>\r
<type name="Tester+<CallTest_4>c__async15">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>234</size>\r
+ <size>240</size>\r
</method>\r
</type>\r
<type name="Tester+<CallTest_5>c__async16">\r
<size>348</size>\r
</method>\r
</type>\r
- <type name="Tester+<NewInitTest_1>c__async30">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>1026</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewInitTest_2>c__async31">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>739</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_1>c__async32">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>240</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_2>c__async33">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>355</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_3>c__async34">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>246</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_4>c__async35">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>427</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_5>c__async36">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>264</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_6>c__async37">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>266</size>\r
- </method>\r
- </type>\r
<type name="Tester">\r
<method name="Tester <CastTest_2>m__4()" attrs="129">\r
<size>9</size>\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="Tester+<NewInitTest_1>c__async30">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__4()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__5()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewInitTest_2>c__async31">\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_1>c__async32">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_2>c__async33">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_3>c__async34">\r
- <method name="Byte <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_4>c__async35">\r
- <method name="UInt16 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="UInt16 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_5>c__async36">\r
- <method name="S <>m__0()" attrs="145">\r
- <size>25</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<NewArrayInitTest_6>c__async37">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
<type name="Tester">\r
<method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_7()" attrs="129">\r
<size>33</size>\r
</method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_7>c__async38">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>299</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<PropertyTest_1>c__async39">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>222</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<PropertyTest_2>c__async3A">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>295</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<PropertyTest_3>c__async3B">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>645</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<StringConcatTest_1>c__async3C">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>455</size>\r
- </method>\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<UnaryTest_1>c__async3D">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>233</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<UnaryTest_2>c__async3E">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>339</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<UnaryTest_3>c__async3F">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>372</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<VariableInitializer_1>c__async40">\r
- <method name="Void MoveNext()" attrs="486">\r
- <size>348</size>\r
- </method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_5>c__async4+<ArrayAccessTest_5>c__AnonStorey41">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<BinaryTest_2>c__asyncD+<BinaryTest_2>c__AnonStorey42">\r
- <method name="Boolean <>m__0()" attrs="131">\r
- <size>24</size>\r
- </method>\r
- <method name="Boolean <>m__1()" attrs="131">\r
- <size>24</size>\r
- </method>\r
- <method name="Boolean <>m__2()" attrs="131">\r
- <size>24</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<CallTest_5>c__async16+<CallTest_5>c__AnonStorey43">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<EventInvoke_1>c__async20+<EventInvoke_1>c__AnonStorey44">\r
- <method name="System.Action <>m__0()" attrs="131">\r
- <size>23</size>\r
- </method>\r
- <method name="Void <>m__1()" attrs="131">\r
- <size>9</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<IndexerTest_3>c__async24+<IndexerTest_3>c__AnonStorey45">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<IndexerTest_4>c__async25+<IndexerTest_4>c__AnonStorey46">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<IndexerTest_5>c__async26+<IndexerTest_5>c__AnonStorey47">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<IndexerTest_7>c__async28+<IndexerTest_7>c__AnonStorey48">\r
- <method name="Int32 <>m__0()" attrs="131">\r
- <size>25</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<UnaryTest_2>c__async3E+<UnaryTest_2>c__AnonStorey49">\r
- <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="131">\r
- <size>14</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
<type name="Base">\r
<method name="Void CallRefParams(Int32 ByRef, Int32[])" attrs="148">\r
<size>5</size>\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="Tester+<NewInitTest_1>c__async30">\r
+ <type name="Tester">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] NewDelegate_1()" attrs="129">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Func`1[System.Int32]] NewDelegate_1_0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewDelegate_1>c__async30">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>212</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="Tester+<NewInitTest_2>c__async31">\r
+ <type name="Tester+<NewDelegate_1_0>c__async31">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>226</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_1>c__async32">\r
+ <type name="Tester+<NewInitTest_1>c__async32">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>1026</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__4()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__5()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_2>c__async33">\r
+ <type name="Tester+<NewInitTest_2>c__async33">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>739</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_3>c__async34">\r
+ <type name="Tester+<NewArrayInitTest_1>c__async34">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>240</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_4>c__async35">\r
+ <type name="Tester+<NewArrayInitTest_2>c__async35">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>355</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_3>c__async36">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>246</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Byte <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_4>c__async37">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>427</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="UInt16 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="UInt16 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_5>c__async36">\r
+ <type name="Tester+<NewArrayInitTest_5>c__async38">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>264</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="S <>m__0()" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_6>c__async37">\r
+ <type name="Tester+<NewArrayInitTest_6>c__async39">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>266</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<NewArrayInitTest_7>c__async38">\r
+ <type name="Tester+<NewArrayInitTest_7>c__async3A">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>299</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="Tester+<PropertyTest_1>c__async39">\r
+ <type name="Tester+<PropertyTest_1>c__async3B">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>222</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<PropertyTest_2>c__async3A">\r
+ <type name="Tester+<PropertyTest_2>c__async3C">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>295</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<PropertyTest_3>c__async3B">\r
+ <type name="Tester+<PropertyTest_3>c__async3D">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>645</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<StringConcatTest_1>c__async3C">\r
+ <type name="Tester+<StringConcatTest_1>c__async3E">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>455</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<UnaryTest_1>c__async3D">\r
+ <type name="Tester+<UnaryTest_1>c__async3F">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>233</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<UnaryTest_2>c__async3E">\r
+ <type name="Tester+<UnaryTest_2>c__async40">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>339</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="Tester+<UnaryTest_3>c__async3F">\r
+ <type name="Tester+<UnaryTest_3>c__async41">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>372</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
- <type name="Tester+<VariableInitializer_1>c__async40">\r
+ <type name="Tester+<VariableInitializer_1>c__async42">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>348</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_5>c__async4+<ArrayAccessTest_5>c__AnonStorey43">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<BinaryTest_2>c__asyncD+<BinaryTest_2>c__AnonStorey44">\r
+ <method name="Boolean <>m__0()" attrs="131">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Boolean <>m__1()" attrs="131">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Boolean <>m__2()" attrs="131">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CallTest_5>c__async16+<CallTest_5>c__AnonStorey45">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<EventInvoke_1>c__async20+<EventInvoke_1>c__AnonStorey46">\r
+ <method name="System.Action <>m__0()" attrs="131">\r
+ <size>23</size>\r
+ </method>\r
+ <method name="Void <>m__1()" attrs="131">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_3>c__async24+<IndexerTest_3>c__AnonStorey47">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_4>c__async25+<IndexerTest_4>c__AnonStorey48">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_5>c__async26+<IndexerTest_5>c__AnonStorey49">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_7>c__async28+<IndexerTest_7>c__AnonStorey4A">\r
+ <method name="Int32 <>m__0()" attrs="131">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<UnaryTest_2>c__async40+<UnaryTest_2>c__AnonStorey4B">\r
+ <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="131">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-14.cs">\r
<size>33</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
- <size>82</size>\r
+ <size>107</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</type>\r
<type name="Tester+<NewInitTestGen>c__async0`1[T]">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>306</size>\r
+ <size>295</size>\r
</method>\r
<method name="Int32 <>m__0()" attrs="145">\r
<size>10</size>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="S2">\r
+ <method name="Void Add(Int32)" attrs="134">\r
+ <size>36</size>\r
+ </method>\r
+ <method name="System.Collections.IEnumerator GetEnumerator()" attrs="486">\r
+ <size>20</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] NewInitCol()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewInitCol>c__async1">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>370</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-16.cs">\r
<type name="Base">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-async-63.cs">\r
+ <type name="C">\r
+ <method name="System.Threading.Tasks.Task TestSingleAwait(Boolean)" attrs="150">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task TestDoubleAwait(Boolean)" attrs="150">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task Call()" attrs="145">\r
+ <size>48</size>\r
+ </method>\r
+ <method name="Void HH()" attrs="129">\r
+ <size>12</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>152</size>\r
+ </method>\r
+ <method name="Boolean <Call>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestSingleAwait>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>274</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestDoubleAwait>c__async1">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>419</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-async-64.cs">\r
+ <type name="X">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>37</size>\r
+ </method>\r
+ <method name="T Invoke[T](System.Func`1[System.Threading.Tasks.Task`1[T]])" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+<Main>c__async2">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>167</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-async-65.cs">\r
+ <type name="C">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>161</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestRethrow>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>363</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="System.Threading.Tasks.Task TestRethrow(System.Exception)" attrs="150">\r
+ <size>41</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-async-66.cs">\r
+ <type name="TestFinally">\r
+ <method name="System.Threading.Tasks.Task Test(Boolean)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="145">\r
+ <size>95</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="TestFinally+<Test>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>277</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-async-67.cs">\r
+ <type name="Test">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32[]] Run()" attrs="150">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>53</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<Run>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>239</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-async-69.cs">\r
+ <type name="Test">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] YieldValue(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] TestFinallyWithReturn(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task TestFinallyWithReturnNoValue(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] TestFinallyWithGoto(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] TestFinallyWithGotoAndReturn(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>390</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<YieldValue>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>172</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<TestFinallyWithReturn>c__async1">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>381</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<TestFinallyWithReturnNoValue>c__async2">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>321</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<TestFinallyWithGoto>c__async3">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>362</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test+<TestFinallyWithGotoAndReturn>c__async4">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>411</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-cls-00.cs">\r
<type name="CLSCLass_6">\r
<method name="Void add_Disposed(Delegate)" attrs="2182">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-ex-filter-03.cs">\r
+ <type name="X">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>52</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-ex-filter-04.cs">\r
+ <type name="X">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>253</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] Test(Int32, System.Exception)" attrs="145">\r
+ <size>49</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] TestGeneric(Int32)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Void .cctor()" attrs="6289">\r
+ <size>11</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+<Test>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>281</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+<TestGeneric>c__async1">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>250</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-externalias-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
if (CheckProcessed (assembly))
return;
+ ProcessModule (assembly);
+
MarkCustomAttributes (assembly);
foreach (ModuleDefinition module in assembly.Modules)
MarkCustomAttributes (module);
}
+ void ProcessModule (AssemblyDefinition assembly)
+ {
+ // Pre-mark <Module> if there is any methods as they need to be executed
+ // at assembly load time
+ foreach (TypeDefinition type in assembly.MainModule.Types)
+ {
+ if (type.Name == "<Module>" && type.HasMethods)
+ {
+ MarkType (type);
+ break;
+ }
+ }
+ }
+
protected void MarkField (FieldReference reference)
{
// if (IgnoreScope (reference.DeclaringType.Scope))
case "mscorlib":
case "Accessibility":
case "Mono.Security":
+ // WPF
+ case "PresentationFramework":
+ case "PresentationCore":
+ case "WindowsBase":
+ case "UIAutomationProvider":
+ case "UIAutomationTypes":
+ case "PresentationUI":
+ case "ReachFramework":
return true;
default:
return name.Name.StartsWith ("System")
var projectInstances = new List<ProjectInstance> ();
if (string.Equals (Path.GetExtension (projectFile), ".sln", StringComparison.OrdinalIgnoreCase)) {
var parser = new SolutionParser ();
- var root = ProjectRootElement.Create ();
+ var root = ProjectRootElement.Create (project_collection);
+ root.FullPath = projectFile;
parser.ParseSolution (projectFile, project_collection, root, LogWarning);
- foreach (var p in project_collection.LoadedProjects)
- projectInstances.Add (p.CreateProjectInstance ());
+ projectInstances.Add (new Project (root, parameters.Properties, parameters.ToolsVersion, project_collection).CreateProjectInstance ());
} else {
project = ProjectRootElement.Create (XmlReader.Create (projectFile, settings), project_collection);
project.FullPath = projectFile;
projectInstances.Add (pi);
}
foreach (var projectInstance in projectInstances) {
- var targets = parameters.Targets.Length == 0 ? projectInstance.DefaultTargets.ToArray () : parameters.Targets;
+ var targets = parameters.Targets.Length > 0 ? parameters.Targets : projectInstance.DefaultTargets.ToArray ();
result = projectInstance.Build (targets, parameters.Loggers.Count > 0 ? parameters.Loggers : project_collection.Loggers);
if (!result)
break;
BUILD_NEW_ENGINE = Microsoft.Build.dll
INSTALL_FRAMEWORK_VERSION = $(FRAMEWORK_VERSION)
+include ../xbuild/xbuild.make
+
ifeq (3.5, $(FRAMEWORK_VERSION))
NAME_SUFFIX = .v3.5
ASSEMBLY_VERSION = 3.5.0.0
REDISTLIST_DIR=$(XBUILD_FRAMEWORKS_DIR)/v$(FRAMEWORK_VERSION)/RedistList
#include $(XBUILD_DIR)/xbuild_targets.make
+install-local: install-extras
+
+install-extras: install-bin-data
+
+install-bin-data:
+ $(INSTALL_DATA) data/msbuild.rsp $(DESTDIR)$(XBUILD_BIN_DIR)
+
+EXTRA_DISTFILES = \
+ data/msbuild.rsp
+
StreamReader reader = new StreamReader (file);
string slnVersion = GetSlnFileVersion (reader);
if (slnVersion == "12.00")
+#if XBUILD_12
projects.DefaultToolsVersion = "12.0";
+#else
+ projects.DefaultToolsVersion = "4.0";
+#endif
else if (slnVersion == "11.00")
projects.DefaultToolsVersion = "4.0";
else if (slnVersion == "10.00")
if (!File.Exists (filename)) {
RaiseWarning (0, String.Format ("Project file {0} referenced in the solution file, " +
- "not found. Ignoring.", filename));
+ " not found. Ignoring.", filename));
continue;
}
--- /dev/null
+# xbuild command line options specified here will be used
+# by xbuild on every build, unless /noautoresponse is passed
+# on the command line.
directories for mscorlib.dll by constructing a filtered item set, and assume it only has
one item.
-->
- <ItemGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' != 'True'">
<_ExplicitReference Include="@(_TargetFrameworkDirectories->'%(FullPath)\mscorlib.dll')" Condition="Exists('%(FullPath)\mscorlib.dll')">
<Private>false</Private>
</_ExplicitReference>
</ItemGroup>
+ <PropertyGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitMSCorlibPath>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries ('$(TargetFrameworkIdentifier)', '$(TargetFrameworkVersion)', '$(TargetFrameworkProfile)'))\mscorlib.dll</_ExplicitMSCorlibPath>
+ </PropertyGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitReference Include="@(_TargetFrameworkDirectories->'%(FullPath)\mscorlib.dll')" Condition="Exists('%(FullPath)\mscorlib.dll')">
+ <Private>false</Private>
+ </_ExplicitReference>
+ </ItemGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitReference Include="$(_ExplicitMSCorlibPath)" Condition="Exists('$(_ExplicitMSCorlibPath)')">
+ <Private>false</Private>
+ </_ExplicitReference>
+ </ItemGroup>
</Target>
<Target
directories for mscorlib.dll by constructing a filtered item set, and assume it only has
one item.
-->
- <ItemGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' != 'True'">
<_ExplicitReference Include="@(_TargetFrameworkDirectories->'%(FullPath)\mscorlib.dll')" Condition="Exists('%(FullPath)\mscorlib.dll')">
<Private>false</Private>
</_ExplicitReference>
</ItemGroup>
+ <PropertyGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitMSCorlibPath>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries ('$(TargetFrameworkIdentifier)', '$(TargetFrameworkVersion)', '$(TargetFrameworkProfile)'))\mscorlib.dll</_ExplicitMSCorlibPath>
+ </PropertyGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitReference Include="@(_TargetFrameworkDirectories->'%(FullPath)\mscorlib.dll')" Condition="Exists('%(FullPath)\mscorlib.dll')">
+ <Private>false</Private>
+ </_ExplicitReference>
+ </ItemGroup>
+ <ItemGroup Condition="'$(MonoUseMicrosoftBuildDll)' == 'True'">
+ <_ExplicitReference Include="$(_ExplicitMSCorlibPath)" Condition="Exists('$(_ExplicitMSCorlibPath)')">
+ <Private>false</Private>
+ </_ExplicitReference>
+ </ItemGroup>
</Target>
<Target
#define S390X_H
#include <glib.h>
#include <assert.h>
+#include <limits.h>
#define FLOAT_REGS 2 /* No. float registers for parms */
#define GENERAL_REGS 5 /* No. general registers for parms */
s390_fpc = 256,
} S390SpecialRegister;
-#define s390_is_imm16(val) ((glong)val >= (glong)-(1<<15) && \
- (glong)val <= (glong)((1<<15)-1))
-#define s390_is_uimm16(val) ((glong)val >= 0 && (glong)val <= 65535)
+#define s390_is_imm16(val) ((glong)val >= (glong) SHRT_MIN && \
+ (glong)val <= (glong) SHRT_MAX)
+#define s390_is_imm32(val) ((glong)val >= (glong) INT_MIN && \
+ (glong)val <= (glong) INT_MAX)
+#define s390_is_uimm16(val) ((glong)val >= 0 && (glong)val <= (glong) USHRT_MAX)
+#define s390_is_uimm32(val) ((glong)val >= 0 && (glong)val <= (glong) UINT_MAX)
#define s390_is_uimm20(val) ((glong)val >= 0 && (glong)val <= 1048575)
#define s390_is_imm20(val) ((glong)val >= -524288 && (glong)val <= 524287)
-#define s390_is_imm12(val) ((glong)val >= (glong)-(1<<11) && \
- (glong)val <= (glong)((1<<11)-1))
+#define s390_is_imm12(val) ((glong)val >= (glong)-4096 && \
+ (glong)val <= (glong)4095)
#define s390_is_uimm12(val) ((glong)val >= 0 && (glong)val <= 4095)
#define STK_BASE s390_r15
short i2;
char xx;
char op2;
-} RIE_Format;
+} RIE_Format_1;
+
+typedef struct {
+ char op1;
+ char r1 : 4;
+ char r3 : 4;
+ short i2;
+ char m2 : 4;
+ char xx : 4;
+ char op2;
+} RIE_Format_2;
+
+typedef struct {
+ char op1;
+ char r1 : 4;
+ char r3 : 4;
+ short d;
+ char i;
+ char op2;
+} RIE_Format_3;
+
+typedef struct {
+ char op1;
+ char r1 : 4;
+ char yy : 4;
+ short i2;
+ char m3 : 4;
+ char xx : 4;
+ char op2;
+} RIE_Format_4;
typedef struct {
char op1;
typedef struct {
short op;
- char b1 : 4;
+ short tb1 : 4;
short d1 : 12;
- char b2 : 4;
+ short b2 : 4;
short d2 : 12;
} __attribute__ ((packed)) SSE_Format;
+typedef struct {
+ short op;
+ char r3 : 4;
+ char o2 : 4;
+ short b1 : 4;
+ short d1 : 12;
+ short b2 : 4;
+ short d2 : 12;
+} __attribute__ ((packed)) SSF_Format;
+
#define s390_emit16(c, x) do \
{ \
*((guint16 *) c) = (guint16) x; \
#define S390_RI(c,opc,g1,m2) s390_emit32(c, ((opc >> 4) << 24 | (g1) << 20 | (opc & 0x0f) << 16 | (m2 & 0xffff)))
-#define S390_RIE(c,opc,g1,g3,m2) do \
+#define S390_RIE_1(c,opc,g1,g3,m2) do \
{ \
s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | g3)); \
s390_emit32(c, ((m2) << 16 | (opc & 0xff))); \
} while (0)
+#define S390_RIE_2(c,opc,g1,g2,m3,v) do \
+{ \
+ s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | g3)); \
+ s390_emit16(c, (v)); \
+ s390_emit16(c, ((m2) << 12 | (opc & 0xff))); \
+} while (0)
+
+#define S390_RIE_3(c,opc,g1,i,m3,d) do \
+{ \
+ s390_emit16(c, ((opc & 0xff00) | (g1) << 4 | m3)); \
+ s390_emit16(c, (d)); \
+ s390_emit16(c, ((i) << 8 | (opc & 0xff))); \
+} while (0)
+
+#define S390_RIE_4(c,opc,g1,i2,m3) do \
+{ \
+ s390_emit16(c, ((opc & 0xff00) | (g1) << 4); \
+ s390_emit16(c, (i2)); \
+ s390_emit16(c, ((m3) << 12 | (opc & 0xff))); \
+} while (0)
+
#define S390_RIL_1(c,opc,g1,m2) do \
{ \
s390_emit16(c, ((opc >> 4) << 8 | (g1) << 4 | (opc & 0xf))); \
s390_emit32(c, m2); \
} while (0)
+#define S390_RIS(c,opc,r,i,m3,b,d) do \
+{ \
+ s390_emit16(c, ((opc, & 0xff00) | (r1) << 4) | (r2)); \
+ s390_emit16(c, ((b) << 12) | (d)); \
+ s390_emit16(c, ((i) << 4) | ((opc) & 0xff)); \
+}
+
+#define S390_RRS(c,opc,r1,r2,m3,b,d) do \
+{ \
+ s390_emit16(c, ((opc, & 0xff00) | (r1) << 4) | (r2)); \
+ s390_emit16(c, ((b) << 12) | (d)); \
+ s390_emit16(c, ((m3) << 12) | ((opc) & 0xff)); \
+}
+
#define S390_SI(c,opc,s1,p1,m2) s390_emit32(c, (opc << 24 | (m2) << 16 | (s1) << 12 | ((p1) & 0xfff)));
#define S390_SIY(c,opc,s1,p1,m2) do \
s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
} while (0)
+#define S390_SSF(c,opc,r3,s1,p1,s2,p2) do \
+{ \
+ s390_emit16(c, (((opc) & 0xff00) << 8) | ((r3) << 4) | \
+ ((opc) & 0xf)); \
+ s390_emit16(c, ((s1) << 12 | ((p1) & 0xfff))); \
+ s390_emit16(c, ((s2) << 12 | ((p2) & 0xfff))); \
+} while (0)
+
#define s390_a(c, r, x, b, d) S390_RX(c, 0x5a, r, x, b, d)
#define s390_adb(c, r, x, b, d) S390_RXE(c, 0xed1a, r, x, b, d)
#define s390_adbr(c, r1, r2) S390_RRE(c, 0xb31a, r1, r2)
#define s390_aebr(c, r1, r2) S390_RRE(c, 0xb30a, r1, r2)
+#define s390_afi(c, r, v) S390_RIL_1(c, 0xc29, r, v);
#define s390_ag(c, r, x, b, d) S390_RXY(c, 0xe308, r, x, b, d)
#define s390_agf(c, r, x, b, d) S390_RXY(c, 0xe318, r, x, b, d)
+#define s390_agfi(c, r, v) S390_RIL_1(c, 0xc28, r, v)
+#define s390_afgr(c, r1, r2) S390_RRE(c, 0xb918, r1, r2)
#define s390_aghi(c, r, v) S390_RI(c, 0xa7b, r, v)
+#define s390_aghik(c, r, v) S390_RIE_1(c, 0xecd9, r, v)
#define s390_agr(c, r1, r2) S390_RRE(c, 0xb908, r1, r2)
+#define s390_agrk(c, r1, r2, r3) S390_RRF_1(c, 0xb9e8, r1, r2, r3)
+#define s390_agsi(c, r, v) S390_SIY(c, 0xeb7a, r v)
+#define s390_ahhhr(c, r1, r2, r3) S390_RRF_1(c, 0xb9c8, r1, r2, r3)
+#define s390_ahhlr(c, r1, r2, r3) S390_RRF_1(c, 0xb9d8, r1, r2, r3)
#define s390_ahi(c, r, v) S390_RI(c, 0xa7a, r, v)
+#define s390_ahik(c, r, v) S390_RIE_1(c, 0xecd8, r, v)
+#define s390_ahy(c, r, x, b, d) S390_RXY(c, 0xe37a, r, b, d)
+#define s390_aih(c, r, v) S390_RIL_1(c, 0xcc8, r, v)
+#define s390_al(c, r, x, b, d) S390_RX(c, 0x5e, r, x, b, d)
+#define s390_alc(c, r, x, b, d) S390_RXY(c, 0xe398, r, x, b, d)
+#define s390_alcg(c, r, x, b, d) S390_RXY(c, 0xe388, r, x, b, d)
#define s390_alcgr(c, r1, r2) S390_RRE(c, 0xb988, r1, r2)
#define s390_alcr(c, r1, r2) S390_RRE(c, 0xb998, r1, r2)
-#define s390_al(c, r, x, b, d) S390_RX(c, 0x5e, r, x, b, d)
+#define s390_alfi(c, r, v) S390_RIL_1(c, 0xc2b, r, v)
#define s390_alg(c, r, x, b, d) S390_RXY(c, 0xe30a, r, x, b, d)
#define s390_algf(c, r, x, b, d) S390_RXY(c, 0xe31a, r, x, b, d)
+#define s390_algfi(c, r, v) S390_RIL_1(c, 0xc2a, r, v)
+#define s390_algfr(c, r1, r2) S390_RRE(c, 0xb91a, r1, r2)
+#define s390_alghsik(c, r, v) S390_RIE_1(c, 0xecd8, r, v)
#define s390_algr(c, r1, r2) S390_RRE(c, 0xb90a, r1, r2)
+#define s390_algsi(c, r, v) S390_SIY(c, 0xeb7e, r, v)
+#define s390_alhhhr(c, r1, r2, r3) S390_RRF_1(c, 0xb9ca, r1, r2, r3)
+#define s390_alhhlr(c, r1, r2, r3) S390_RRF_1(c, 0xb9da, r1, r2, r3)
+#define s390_alhsik(c, r, v) S390_RIE_1(c, 0xecda, r, v)
#define s390_alr(c, r1, r2) S390_RR(c, 0x1e, r1, r2)
+#define s390_alrk(c, r1, r2) S390_RRF(c, 0xb9fa, r1, r2)
+#define s390_alsi(c, r, v) S390_SIY(c, 0xeb6e, r, v)
+#define s390_alsih(c, r, v) S390_RIL_1(c, 0xcca, r, v)
+#define s390_alsihn(c, r, v) S390_RIL_1(c, 0xccb, r, v)
+#define s390_aly(c, r, x, b, d) S390_RXY(c, 0xe35e, r, x, b, d)
#define s390_ar(c, r1, r2) S390_RR(c, 0x1a, r1, r2)
+#define s390_ark(c, r1, r2, r3) S390_RRF_1(c, 0xb9f8, r1, r2, r3)
+#define s390_asi(c, r, v) S390_SIY(c, 0xeb6a, r, v)
+#define s390_ay(c, r, x, b, d) S390_RXY(c, 0xe35a, r, x, b, d)
#define s390_basr(c, r1, r2) S390_RR(c, 0x0d, r1, r2)
#define s390_bctr(c, r1, r2) S390_RR(c, 0x06, r1, r2)
#define s390_bctrg(c, r1, r2) S390_RRE(c, 0xb946, r1, r2)
#define s390_cdsg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb3e, r1, r2, b, d)
#define s390_cdsy(c, r1, r2, b, d) S390_RSY_1(c, 0xeb31, r1, r2, b, d)
#define s390_cebr(c, r1, r2) S390_RRE(c, 0xb309, r1, r2)
+#define s390_cegbr(c, r1, r2) S390_RRE(c, 0xb3a4, r1, r2)
#define s390_cfdbr(c, r1, m, r2) S390_RRF_2(c, 0xb399, r1, m, r2)
+#define s390_cfi(c, r, v) S390_RIL_1(c, 0xc2d, r, v)
#define s390_cgdbr(c, r1, m, r2) S390_RRF_2(c, 0xb3a9, r1, m, r2)
#define s390_cg(c, r, x, b, d) S390_RXY(c, 0xe320, r, x, b, d)
+#define s390_cgfi(c, r, v) S390_RIL_1(c, 0xc2c, r, v)
+#define s390_cgfrl(c, r, v) S390_RIL_1(c, 0xc6c, r, v)
#define s390_cghi(c, r, i) S390_RI(c, 0xa7f, r, i)
+#define s390_cgib(c, r, i, m, b, d) S390_RIS(c, 0xecfc, r, i, m, b, d)
+#define s390_cgij(c, r, i, m, d) S390_RIE_3(c, 0xec7c, r, i, m, d)
+#define s390_cgit(c, r, i, m) S390_RIE_4(c, 0xec70, r, i m);
#define s390_cgr(c, r1, r2) S390_RRE(c, 0xb920, r1, r2)
+#define s390_cgrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xece4, r1, r2, m3, b, d)
+#define s390_cgrj(c, r1, r2, m3, v) S390_RIE_2(c, 0xec64, r1, r2, m3, v)
+#define s390_cgrl(c, r, v) S390_RIL_1(c, 0xc68, r, v)
#define s390_chi(c, r, i) S390_RI(c, 0xa7e, r, i)
+#define s390_cib(c, r, i, m, b, d) S390_RIS(c, 0xecfe, r, i, m, b, d)
+#define s390_cij(c, r, i, m, d) S390_RIE_3(c, 0xec7e, r, i, m, d)
+#define s390_cit(c, r, i, m) S390_RIE_4(c, 0xec72, r, i m);
#define s390_cl(c, r, x, b, d) S390_RX(c, 0x55, r, x, b, d)
#define s390_clg(c, r, x, b, d) S390_RXY(c, 0xe321, r, x, b, d)
+#define s390_clgib(c, r, i, m, b, d) S390_RIS(c, 0xecfd, r, i, m, b, d)
+#define s390_clgij(c, r, i, b) S390_RIE_3(c, 0xec7d, r, i, m, d)
#define s390_clgr(c, r1, r2) S390_RRE(c, 0xb921, r1, r2)
+#define s390_clgrj(c, r1, r2, m, v) S390_RIE_2(c, 0xec65, r1, r2, m, v)
+#define s390_clgrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xece5, r1, r2, m3, b, d)
+#define s390_clib(c, r, i, m, b, d) S390_RIS(c, 0xecff, r, i, m, b, d)
+#define s390_clij(c, r, i, b) S390_RIE_3(c, 0xec7f, r, i, m, d)
#define s390_clr(c, r1, r2) S390_RR(c, 0x15, r1, r2)
+#define s390_clrb(c, r1, r2, m3, b, d) S390_RRS(c, 0xecf7, r1, r2, m3, b, d)
+#define s390_clrj(c, r1, r2, m, v) S390_RIE_2(c, 0xec77, r1, r2, m, v)
#define s390_cr(c, r1, r2) S390_RR(c, 0x19, r1, r2)
+#define s390_crb(c, r1, r2, m3, b, d) S390_RRS(c, 0xecf6, r1, r2, m3, b, d)
+#define s390_crj(c, r1, r2, m3, v) S390_RIE_2(c, 0xec76, r1, r2, m3, v)
+#define s390_crl(c, r, v) S390_RIL_1(c, 0xc6d, r, v)
+#define s390_crt(c, r1, r2, m3) S390_RRF_2(c, 0xb972, r1, r2, m3);
+#define s390_cgrt(c, r1, r2, m3) S390_RRF_2(c, 0xb960, r1, r2, m3);
#define s390_cs(c, r1, r2, b, d) S390_RX(c, 0xba, r1, r2, b, d)
#define s390_csg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb30, r1, r2, b, d)
+#define s390_csst(c, d1, b1, d2, b2, r) S390_SSF(c, 0xc82, b1, d1, b2, d2, r)
#define s390_csy(c, r1, r2, b, d) S390_RSY_1(c, 0xeb14, r1, r2, b, d)
#define s390_ddbr(c, r1, r2) S390_RRE(c, 0xb31d, r1, r2)
#define s390_debr(c, r1, r2) S390_RRE(c, 0xb30d, r1, r2)
#define s390_icm(c, r, m, b, d) S390_RX(c, 0xbf, r, m, b, d)
#define s390_icmy(c, r, x, b, d) S390_RXY(c, 0xeb81, r, x, b, d)
#define s390_icy(c, r, x, b, d) S390_RXY(c, 0xe373, r, x, b, d)
+#define s390_iihf(c, r, v) S390_RIL_1(c, 0xc08, r, v)
+#define s390_iihh(c, r, v) S390_RI(c, 0xa50, r, v)
+#define s390_iihl(c, r, v) S390_RI(c, 0xa51, r, v)
+#define s390_iilf(c, r, v) S390_RIL_1(c, 0xc09, r, v)
+#define s390_iilh(c, r, v) S390_RI(c, 0xa52, r, v)
+#define s390_iill(c, r, v) S390_RI(c, 0xa53, r, v)
#define s390_j(c,d) s390_brc(c, S390_CC_UN, d)
#define s390_jc(c, m, d) s390_brc(c, m, d)
#define s390_jcl(c, m, d) s390_brcl(c, m, d)
#define s390_ldy(c, r, x, b, d) S390_RXY(c, 0xed65, r, x, b, d)
#define s390_ldeb(c, r, x, b, d) S390_RXE(c, 0xed04, r, x, b, d)
#define s390_ldebr(c, r1, r2) S390_RRE(c, 0xb304, r1, r2)
+#define s390_ldgr(c, r1, r2) S390_RRE(c, 0xb3c1, r1, r2)
#define s390_ldr(c, r1, r2) S390_RR(c, 0x28, r1, r2)
#define s390_le(c, f, x, b, d) S390_RX(c, 0x78, f, x, b, d)
#define s390_ledbr(c, r1, r2) S390_RRE(c, 0xb344, r1, r2)
#define s390_ler(c, r1, r2) S390_RR(c, 0x38, r1, r2)
#define s390_ley(c, r, x, b, d) S390_RXY(c, 0xed64, r, x, b, d)
+#define s390_lg(c, r, x, b, d) S390_RXY(c, 0xe304, r, x, b, d)
#define s390_lgb(c, r, x, b, d) S390_RXY(c, 0xe377, r, x, b, d)
#define s390_lgbr(c, r1, r2) S390_RRE(c, 0xb906, r1, r2)
-#define s390_lg(c, r, x, b, d) S390_RXY(c, 0xe304, r, x, b, d)
+#define s390_lgdr(c, r1, r2) S390_RRE(c, 0xb3cd, r1, r2)
#define s390_lgf(c, r, x, b, d) S390_RXY(c, 0xe314, r, x, b, d)
+#define s390_lgfi(c, r, v) S390_RIL_1(c, 0xc01, r, v)
+#define s390_lgfrl(c, r1, d) S390_RIL_1(c, 0xc4c, r1, d)
#define s390_lgfr(c, r1, r2) S390_RRE(c, 0xb914, r1, r2)
#define s390_lgh(c, r, x, b, d) S390_RXY(c, 0xe315, r, x, b, d)
#define s390_lghi(c, r, v) S390_RI(c, 0xa79, r, v)
+#define s390_lghr(c, r1, r2) S390_RRE(c, 0xb907, r1, r2)
#define s390_lgr(c, r1, r2) S390_RRE(c, 0xb904, r1, r2)
+#define s390_lgrl(c, r1, d) S390_RIL_1(c, 0xc48, r1, d)
#define s390_lh(c, r, x, b, d) S390_RX(c, 0x48, r, x, b, d)
#define s390_lhr(c, r1, r2) S390_RRE(c, 0xb927, r1, r2)
#define s390_lhg(c, r, x, b, d) S390_RXY(c, 0xe315, r, x, b, d)
-#define s390_lghr(c, r1, r2) S390_RRE(c, 0xb907, r1, r2)
#define s390_lhi(c, r, v) S390_RI(c, 0xa78, r, v)
#define s390_lhy(c, r, x, b, d) S390_RXY(c, 0xe378, r, x, b, d)
#define s390_llcr(c, r1, r2) S390_RRE(c, 0xb994, r1, r2)
#define s390_llgh(c, r, x, b, d) S390_RXY(c, 0xe391, r, x, b, d)
#define s390_llghr(c, r1, r2) S390_RRE(c, 0xb985, r1, r2)
#define s390_llhr(c, r1, r2) S390_RRE(c, 0xb995, r1, r2)
+#define s390_llihf(c, r, v) S390_RIL_1(c, 0xc0e, r, v)
+#define s390_llihh(c, r, v) S390_RI(c, 0xa5c, r, v)
+#define s390_llihl(c, r, v) S390_RI(c, 0xa5d, r, v)
+#define s390_llilf(c, r, v) S390_RIL_1(c, 0xc0f, r, v)
+#define s390_llilh(c, r, v) S390_RI(c, 0xa5e, r, v)
+#define s390_llill(c, r, v) S390_RI(c, 0xa5f, r, v)
#define s390_lm(c, r1, r2, b, d) S390_RS_1(c, 0x98, r1, r2, b, d)
#define s390_lmg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb04, r1, r2, b, d)
#define s390_lndbr(c, r1, r2) S390_RRE(c, 0xb311, r1, r2)
#define s390_lpgr(c, r1, r2) S390_RRE(c, 0xb900, r1, r2)
#define s390_lpr(c, r1, r2) S390_RR(c, 0x10, r1, r2)
#define s390_lr(c, r1, r2) S390_RR(c, 0x18, r1, r2)
+#define s390_lrl(c, r1, d) S390_RIL_1(c, 0xc4d, r1, d)
#define s390_ltgfr(c, r1, r2) S390_RRE(c, 0xb912, r1, r2)
#define s390_ltgr(c, r1, r2) S390_RRE(c, 0xb902, r1, r2)
#define s390_ltr(c, r1, r2) S390_RR(c, 0x12, r1, r2)
#define s390_m(c, r, x, b, d) S390_RX(c, 0x5c, r, x, b, d)
#define s390_mdbr(c, r1, r2) S390_RRE(c, 0xb31c, r1, r2)
#define s390_meebr(c, r1, r2) S390_RRE(c, 0xb317, r1, r2)
+#define s390_mfy(c, r, x, b, d) S390_RXY(c, 0xe35c, r, x, b, d)
#define s390_mlgr(c, r1, r2) S390_RRE(c, 0xb986, r1, r2)
#define s390_mlr(c, r1, r2) S390_RRE(c, 0xb996, r1, r2)
#define s390_mr(c, r1, r2) S390_RR(c, 0x1c, r1, r2)
#define s390_ms(c, r, x, b, d) S390_RX(c, 0x71, r, x, b, d)
+#define s390_msi(c, r, v) S390_RIL_1(c, 0xc21, r, v)
#define s390_msgfr(c, r1, r2) S390_RRE(c, 0xb91c, r1, r2)
+#define s390_msgi(c, r, v) S390_RIL_1(c, 0xc20, r, v)
#define s390_msgr(c, r1, r2) S390_RRE(c, 0xb90c, r1, r2)
#define s390_msr(c, r1, r2) S390_RRE(c, 0xb252, r1, r2)
#define s390_mvc(c, l, b1, d1, b2, d2) S390_SS_1(c, 0xd2, l, b1, d1, b2, d2)
#define s390_mvcl(c, r1, r2) S390_RR(c, 0x0e, r1, r2)
#define s390_mvcle(c, r1, r3, d2, b2) S390_RS_1(c, 0xa8, r1, r3, d2, b2)
#define s390_n(c, r, x, b, d) S390_RX(c, 0x54, r, x, b, d)
+#define s390_nc(c, l, b1, d1, b2, d2) S390_SS_1(c, 0xd4, l, b1, d1, b2, d2)
#define s390_ng(c, r, x, b, d) S390_RXY(c, 0xe380, r, x, b, d)
#define s390_ngr(c, r1, r2) S390_RRE(c, 0xb980, r1, r2)
+#define s390_ngrk(c, r1, r2, r3) S390_RRF_1(c, 0xb9e4, r1, r2, r3)
+#define s390_ni(c, b, d, v) S390_SI(c, 0x94, b, d, v)
+#define s390_nihf(c, r, v) S390_RIL_1(c, 0xc0a, r, v)
+#define s390_nihh(c, r, v) S390_RI(c, 0xa54, r, v)
+#define s390_nihl(c, r, v) S390_RI(c, 0xa55, r, v)
+#define s390_nilf(c, r, v) S390_RIL_1(c, 0xc0b, r, v)
#define s390_nilh(c, r, v) S390_RI(c, 0xa56, r, v)
#define s390_nill(c, r, v) S390_RI(c, 0xa57, r, v)
+#define s390_niy(c, b, d, v) S390_SIY(c, 0xeb54, b, d, v)
#define s390_nop(c) S390_RR(c, 0x07, 0x0, 0)
#define s390_nr(c, r1, r2) S390_RR(c, 0x14, r1, r2)
+#define s390_nrk(c, r1, r2) S390_RRF_1(c, 0xb9f4, r1, r2)
+#define s390_ny(c, r, x, b, d) S390_RRY(c, 0xe354, r1, r2)
#define s390_o(c, r, x, b, d) S390_RX(c, 0x56, r, x, b, d)
+#define s390_oihf(c, r, v) S390_RIL_1(c, 0xc0c, r, v)
+#define s390_oihh(c, r, v) S390_RI(c, 0xa58, r, v)
+#define s390_oihl(c, r, v) S390_RI(c, 0xa59, r, v)
+#define s390_oilf(c, r, v) S390_RIL_1(c, 0xc0d, r, v)
+#define s390_oilh(c, r, v) S390_RI(c, 0xa5a, r, v)
+#define s390_oill(c, r, v) S390_RI(c, 0xa5b` r, v)
+#define s390_oiy(c, b, d, v) S390_SIY(c, 0xeb56 b, d, v)
#define s390_og(c, r, x, b, d) S390_RXY(c, 0xe381, r, x, b, d)
#define s390_ogr(c, r1, r2) S390_RRE(c, 0xb981, r1, r2)
#define s390_or(c, r1, r2) S390_RR(c, 0x16, r1, r2)
#define s390_sg(c, r, x, b, d) S390_RXY(c, 0xe309, r, x, b, d)
#define s390_sgf(c, r, x, b, d) S390_RXY(c, 0xe319, r, x, b, d)
#define s390_sgr(c, r1, r2) S390_RRE(c, 0xb909, r1, r2)
+#define s390_sl(c, r, x, b, d) S390_RX(c, 0x5f, r, x, b, d)
#define s390_sla(c, r, b, d) S390_RS_3(c, 0x8b, r, b, d)
#define s390_slag(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0b, r1, r2, b, d)
#define s390_slbg(c, r, x, b, d) S390_RXY(c, 0xe389, r, x, b, d)
#define s390_slbgr(c, r1, r2) S390_RRE(c, 0xb989, r1, r2)
#define s390_slbr(c, r1, r2) S390_RRE(c, 0xb999, r1, r2)
-#define s390_sl(c, r, x, b, d) S390_RX(c, 0x5f, r, x, b, d)
#define s390_slda(c, r, b, d) S390_RS_3(c, 0x8f, r, b, d)
#define s390_sldl(c, r, b, d) S390_RS_3(c, 0x8d, r, b, d)
+#define s390_slfi(c, r, v) S390_RIL_1(c, 0xc25, r, v)
#define s390_slg(c, r, x, b, d) S390_RXY(c, 0xe30b, r, x, b, d)
#define s390_slgf(c, r, x, b, d) S390_RXY(c, 0xe31b, r, x, b, d)
+#define s390_slgfr(c, r1, r2) S390_RRE(c, 0xb91b, r1, r2)
+#define s390_slgfi(c, r, v) S390_RIL_1(c, 0xc24, r, v)
#define s390_slgr(c, r1, r2) S390_RRE(c, 0xb90b, r1, r2)
#define s390_sll(c, r, b, d) S390_RS_3(c, 0x89, r, b, d)
#define s390_sllg(c, r1, r2, b, d) S390_RSY_1(c, 0xeb0d, r1, r2, b, d)
#define s390_tcdb(c, r, x, b, d) S390_RXE(c, 0xed11, r, x, b, d)
#define s390_tceb(c, r, x, b, d) S390_RXE(c, 0xed10, r, x, b, d)
#define s390_x(c, r, x, b, d) S390_RX(c, 0x57, r, x, b, d)
+#define s390_xihf(c, r, v) S390_RIL_1(c, 0xc06, r, v)
+#define s390_xilf(c, r, v) S390_RIL_1(c, 0xc07, r, v)
#define s390_xg(c, r, x, b, d) S390_RXY(c, 0xe382, r, x, b, d)
#define s390_xgr(c, r1, r2) S390_RRE(c, 0xb982, r1, r2)
#define s390_xr(c, r1, r2) S390_RR(c, 0x17, r1, r2)
+#define s390_xy(c, r, x, b, d) S390_RXY(c, 0xe357, r, x, b, d)
#endif
#include <stdio.h>
#include <math.h>
#include "util.h"
+#include "mono/utils/mono-compiler.h"
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
}
#ifdef FTRUNCATE_DOESNT_EXTEND
- /* I haven't bothered to write the configure.in stuff for this
+ /* I haven't bothered to write the configure.ac stuff for this
* because I don't know if any platform needs it. I'm leaving
* this code just in case though
*/
#include <sys/stat.h>
#include <unistd.h>
-
-/* Disclaimers */
-
-#if defined(__GNUC__)
-#ifndef HAVE_GETRESUID
- #warning getresuid not supported. WindowsImpersonationContext wont work
-#endif
-#ifndef HAVE_SETRESUID
- #warning setresuid not supported. WindowsImpersonationContext wont work
-#endif
-#endif
-
-
gboolean
ImpersonateLoggedOnUser (gpointer handle)
{
# mono-config.c uses MONO_CFG_DIR
#
# This won't result in many more false positives than AC_DEFINEing them
-# in configure.in.
+# in configure.ac.
#
assembly.lo mono-config.lo: Makefile
null_sources = \
console-null.c
+null_gc_sources = \
+ null-gc.c
+
common_sources = \
$(platform_sources) \
assembly.c \
monitor.h \
nacl-stub.c \
normalization-tables.h \
- null-gc.c \
number-formatter.h \
object-internals.h \
opcodes.c \
verify.c \
verify-internals.h \
wrapper-types.h \
- reflection-internals.h
+ reflection-internals.h \
+ file-mmap-posix.c \
+ file-mmap-windows.c \
+ file-mmap.h
+
# These source files have compile time dependencies on GC code
gc_dependent_sources = \
sgen-qsort.c \
sgen-qsort.h
-libmonoruntime_la_SOURCES = $(common_sources) $(gc_dependent_sources) $(boehm_sources)
+libmonoruntime_la_SOURCES = $(common_sources) $(gc_dependent_sources) $(null_gc_sources) $(boehm_sources)
libmonoruntime_la_CFLAGS = $(BOEHM_DEFINES)
libmonoruntimesgen_la_SOURCES = $(common_sources) $(gc_dependent_sources) $(sgen_sources)
static void
register_test_toggleref_callback (void);
+#define BOEHM_GC_BIT_FINALIZER_AWARE 1
+static MonoGCFinalizerCallbacks fin_callbacks;
+
static void
mono_gc_warning (char *msg, GC_word arg)
{
tid = mono_thread_info_get_tid (p);
- mono_threads_add_joinable_thread ((gpointer)tid);
+ if (p->runtime_thread)
+ mono_threads_add_joinable_thread ((gpointer)tid);
}
gboolean
mono_gc_pthread_exit (void *retval)
{
pthread_exit (retval);
+ g_assert_not_reached ();
}
#endif
guint
mono_gc_get_vtable_bits (MonoClass *class)
{
+ if (fin_callbacks.is_class_finalization_aware) {
+ if (fin_callbacks.is_class_finalization_aware (class))
+ return BOEHM_GC_BIT_FINALIZER_AWARE;
+ }
return 0;
}
mono_gc_toggleref_register_callback (test_toggleref_callback);
}
+static gboolean
+is_finalization_aware (MonoObject *obj)
+{
+ MonoVTable *vt = obj->vtable;
+ return (vt->gc_bits & BOEHM_GC_BIT_FINALIZER_AWARE) == BOEHM_GC_BIT_FINALIZER_AWARE;
+}
+
+static void
+fin_notifier (MonoObject *obj)
+{
+ if (is_finalization_aware (obj))
+ fin_callbacks.object_queued_for_finalization (obj);
+}
+
+void
+mono_gc_register_finalizer_callbacks (MonoGCFinalizerCallbacks *callbacks)
+{
+ if (callbacks->version != MONO_GC_FINALIZER_EXTENSION_VERSION)
+ g_error ("Invalid finalizer callback version. Expected %d but got %d\n", MONO_GC_FINALIZER_EXTENSION_VERSION, callbacks->version);
+
+ fin_callbacks = *callbacks;
+
+ GC_set_finalizer_notify_proc ((void (*) (GC_PTR))fin_notifier);
+}
+
#endif /* no Boehm GC */
typedef struct {
guint64 new_object_count;
- gulong initialized_class_count;
- gulong generic_vtable_count;
- gulong used_class_count;
- gulong method_count;
- gulong class_vtable_size;
- gulong class_static_data_size;
- gulong generic_instance_count;
- gulong generic_class_count;
- gulong inflated_method_count;
- gulong inflated_method_count_2;
- gulong inflated_type_count;
- gulong generics_metadata_size;
- gulong delegate_creations;
- gulong imt_tables_size;
- gulong imt_number_of_tables;
- gulong imt_number_of_methods;
- gulong imt_used_slots;
- gulong imt_slots_with_collisions;
- gulong imt_max_collisions_in_slot;
- gulong imt_method_count_when_max_collisions;
- gulong imt_thunks_size;
- gulong jit_info_table_insert_count;
- gulong jit_info_table_remove_count;
- gulong jit_info_table_lookup_count;
- gulong generics_sharable_methods;
- gulong generics_unsharable_methods;
- gulong generics_shared_methods;
- gulong gsharedvt_methods;
- gulong minor_gc_count;
- gulong major_gc_count;
- gulong minor_gc_time_usecs;
- gulong major_gc_time_usecs;
+ size_t initialized_class_count;
+ size_t generic_vtable_count;
+ size_t used_class_count;
+ size_t method_count;
+ size_t class_vtable_size;
+ size_t class_static_data_size;
+ size_t generic_instance_count;
+ size_t generic_class_count;
+ size_t inflated_method_count;
+ size_t inflated_method_count_2;
+ size_t inflated_type_count;
+ size_t generics_metadata_size;
+ size_t delegate_creations;
+ size_t imt_tables_size;
+ size_t imt_number_of_tables;
+ size_t imt_number_of_methods;
+ size_t imt_used_slots;
+ size_t imt_slots_with_collisions;
+ size_t imt_max_collisions_in_slot;
+ size_t imt_method_count_when_max_collisions;
+ size_t imt_thunks_size;
+ size_t jit_info_table_insert_count;
+ size_t jit_info_table_remove_count;
+ size_t jit_info_table_lookup_count;
+ size_t generics_sharable_methods;
+ size_t generics_unsharable_methods;
+ size_t generics_shared_methods;
+ size_t gsharedvt_methods;
+ size_t minor_gc_count;
+ size_t major_gc_count;
+ size_t minor_gc_time_usecs;
+ size_t major_gc_time_usecs;
gboolean enabled;
} MonoStats;
guint32 layout = class->flags & TYPE_ATTRIBUTE_LAYOUT_MASK;
guint32 pass, passes, real_size;
gboolean gc_aware_layout = FALSE;
+ gboolean has_static_fields = FALSE;
MonoClassField *field;
/*
break;
}
+ has_static_fields = TRUE;
+
size = mono_type_size (field->type, &align);
field->offset = class->sizes.class_size;
/*align is always non-zero here*/
field->offset &= ~(align - 1);
class->sizes.class_size = field->offset + size;
}
+
+ if (has_static_fields && class->sizes.class_size == 0)
+ /* Simplify code which depends on class_size != 0 if the class has static fields */
+ class->sizes.class_size = 8;
}
static MonoMethod*
{
IMAGE_DOS_HEADER* DosHeader;
IMAGE_NT_HEADERS32* NtHeaders32;
- IMAGE_NT_HEADERS64* NtHeaders64;
IMAGE_DATA_DIRECTORY* CliHeaderDir;
+#ifdef _WIN64
+ IMAGE_NT_HEADERS64* NtHeaders64;
MonoCLIHeader* CliHeader;
DWORD SizeOfHeaders;
+#endif
DWORD* Address;
DWORD OldProtect;
HANDLE MapHandle;
IMAGE_DOS_HEADER* DosHeader;
IMAGE_NT_HEADERS32* NtHeaders32;
+#ifdef _WIN64
IMAGE_NT_HEADERS64* NtHeaders64;
+#endif
HMODULE ModuleHandle;
FileHandle = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
goto UnmapView;
}
+#ifdef _WIN64
ValidImage:
+#endif
UnmapViewOfFile(DosHeader);
CloseHandle(MapHandle);
--- /dev/null
+/*
+ * file-mmap-posix.c: File mmap internal calls
+ *
+ * Author:
+ * Rodrigo Kumpera
+ *
+ * Copyright 2014 Xamarin Inc (http://www.xamarin.com)
+ */
+
+#include <config.h>
+
+#ifndef TARGET_WIN32
+
+#include <glib.h>
+#include <string.h>
+#include <errno.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+
+#include <fcntl.h>
+
+
+#include <mono/metadata/object.h>
+#include <mono/metadata/file-io.h>
+#include <mono/metadata/file-mmap.h>
+#include <mono/utils/atomic.h>
+#include <mono/utils/mono-memory-model.h>
+#include <mono/utils/mono-mmap.h>
+
+enum {
+ MMAP_KIND_FILE = 1,
+ MMAP_KIND_MEMORY = 2
+};
+
+typedef struct {
+ int kind;
+ int ref_count;
+ gint64 capacity;
+ char *name;
+} Handle;
+
+typedef struct {
+ Handle handle;
+ int fd;
+} FileHandle;
+
+typedef struct {
+ Handle handle;
+ void *address;
+ size_t length;
+} MemoryHandle;
+
+typedef struct {
+ void *address;
+ void *free_handle;
+ int kind;
+ size_t length;
+} MmapHandle;
+
+enum {
+ BAD_CAPACITY_FOR_FILE_BACKED = 1,
+ CAPACITY_SMALLER_THAN_FILE_SIZE,
+ FILE_NOT_FOUND,
+ FILE_ALREADY_EXISTS,
+ PATH_TOO_LONG,
+ COULD_NOT_OPEN,
+ CAPACITY_MUST_BE_POSITIVE,
+ INVALID_FILE_MODE,
+ COULD_NOT_MAP_MEMORY
+};
+
+enum {
+ FILE_MODE_CREATE_NEW = 1,
+ FILE_MODE_CREATE = 2,
+ FILE_MODE_OPEN = 3,
+ FILE_MODE_OPEN_OR_CREATE = 4,
+ FILE_MODE_TRUNCATE = 5,
+ FILE_MODE_APPEND = 6,
+};
+
+enum {
+ MMAP_FILE_ACCESS_READ_WRITE = 0,
+ MMAP_FILE_ACCESS_READ = 1,
+ MMAP_FILE_ACCESS_WRITE = 2,
+ MMAP_FILE_ACCESS_COPY_ON_WRITE = 3,
+ MMAP_FILE_ACCESS_READ_EXECUTE = 4,
+ MMAP_FILE_ACCESS_READ_WRITE_EXECUTE = 5,
+};
+
+
+static int mmap_init_state;
+static mono_mutex_t named_regions_mutex;
+static GHashTable *named_regions;
+
+
+static gint64
+align_up_to_page_size (gint64 size)
+{
+ gint64 page_size = mono_pagesize ();
+ return (size + page_size - 1) & ~(page_size - 1);
+}
+
+static gint64
+align_down_to_page_size (gint64 size)
+{
+ gint64 page_size = mono_pagesize ();
+ return size & ~(page_size - 1);
+}
+
+static void
+file_mmap_init (void)
+{
+retry:
+ switch (mmap_init_state) {
+ case 0:
+ if (InterlockedCompareExchange (&mmap_init_state, 1, 0) != 0)
+ goto retry;
+ named_regions = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
+ mono_mutex_init (&named_regions_mutex);
+
+ mono_atomic_store_release (&mmap_init_state, 2);
+ break;
+
+ case 1:
+ do {
+ g_usleep (1000); /* Been init'd by other threads, this is very rare. */
+ } while (mmap_init_state != 2);
+ break;
+ case 2:
+ break;
+ default:
+ g_error ("Invalid init state %d", mmap_init_state);
+ }
+}
+
+static void
+named_regions_lock (void)
+{
+ file_mmap_init ();
+ mono_mutex_lock (&named_regions_mutex);
+}
+
+static void
+named_regions_unlock (void)
+{
+ mono_mutex_unlock (&named_regions_mutex);
+}
+
+
+static int
+file_mode_to_unix (int mode)
+{
+ switch (mode) {
+ case FILE_MODE_CREATE_NEW:
+ return O_CREAT | O_EXCL;
+ case FILE_MODE_CREATE:
+ return O_CREAT | O_TRUNC;
+ case FILE_MODE_OPEN:
+ return 0;
+ case FILE_MODE_OPEN_OR_CREATE:
+ return O_CREAT;
+ case FILE_MODE_TRUNCATE:
+ return O_TRUNC;
+ case FILE_MODE_APPEND:
+ return O_APPEND;
+ default:
+ g_error ("unknown FileMode %d", mode);
+ }
+}
+
+static int
+access_mode_to_unix (int access)
+{
+ switch (access) {
+ case MMAP_FILE_ACCESS_READ_WRITE:
+ case MMAP_FILE_ACCESS_COPY_ON_WRITE:
+ case MMAP_FILE_ACCESS_READ_WRITE_EXECUTE:
+ return O_RDWR;
+ case MMAP_FILE_ACCESS_READ:
+ case MMAP_FILE_ACCESS_READ_EXECUTE:
+ return O_RDONLY;
+ case MMAP_FILE_ACCESS_WRITE:
+ return O_WRONLY;
+ default:
+ g_error ("unknown MemoryMappedFileAccess %d", access);
+ }
+}
+
+static int
+acess_to_mmap_flags (int access)
+{
+ switch (access) {
+ case MMAP_FILE_ACCESS_READ_WRITE:
+ return MONO_MMAP_WRITE | MONO_MMAP_READ | MONO_MMAP_SHARED;
+
+ case MMAP_FILE_ACCESS_WRITE:
+ return MONO_MMAP_WRITE | MONO_MMAP_SHARED;
+
+ case MMAP_FILE_ACCESS_COPY_ON_WRITE:
+ return MONO_MMAP_WRITE | MONO_MMAP_READ | MONO_MMAP_PRIVATE;
+
+ case MMAP_FILE_ACCESS_READ_EXECUTE:
+ return MONO_MMAP_EXEC | MONO_MMAP_PRIVATE | MONO_MMAP_SHARED;
+
+ case MMAP_FILE_ACCESS_READ_WRITE_EXECUTE:
+ return MONO_MMAP_WRITE | MONO_MMAP_READ | MONO_MMAP_EXEC | MONO_MMAP_SHARED;
+
+ case MMAP_FILE_ACCESS_READ:
+ return MONO_MMAP_READ | MONO_MMAP_SHARED;
+ default:
+ g_error ("unknown MemoryMappedFileAccess %d", access);
+ }
+}
+
+/*
+XXX implement options
+*/
+static void*
+open_file_map (MonoString *path, int input_fd, int mode, gint64 *capacity, int access, int options, int *error)
+{
+ struct stat buf;
+ char *c_path = path ? mono_string_to_utf8 (path) : NULL;
+ FileHandle *handle = NULL;
+ int result, fd;
+
+ if (path)
+ result = stat (c_path, &buf);
+ else
+ result = fstat (input_fd, &buf);
+
+ if (mode == FILE_MODE_TRUNCATE || mode == FILE_MODE_APPEND || mode == FILE_MODE_OPEN) {
+ if (result == -1) { //XXX translate errno?
+ *error = FILE_NOT_FOUND;
+ goto done;
+ }
+ }
+
+ if (mode == FILE_MODE_CREATE_NEW && result == 0) {
+ *error = FILE_ALREADY_EXISTS;
+ goto done;
+ }
+
+ if (result == 0) {
+ if (*capacity == 0) {
+ /**
+ * Special files such as FIFOs, sockets, and devices can have a size of 0. Specifying a capacity for these
+ * also makes little sense, so don't do the check if th file is one of these.
+ */
+ if (buf.st_size == 0 && (buf.st_mode & (S_IFCHR | S_IFBLK | S_IFIFO | S_IFSOCK)) == 0) {
+ *error = CAPACITY_SMALLER_THAN_FILE_SIZE;
+ goto done;
+ }
+ *capacity = buf.st_size;
+ } else if (*capacity < buf.st_size) {
+ *error = CAPACITY_SMALLER_THAN_FILE_SIZE;
+ goto done;
+ }
+ } else {
+ if (mode == FILE_MODE_CREATE_NEW && *capacity == 0) {
+ *error = CAPACITY_SMALLER_THAN_FILE_SIZE;
+ goto done;
+ }
+ }
+
+#ifndef PLATFORM_ANDROID
+ if (path) //FIXME use io portability?
+ fd = open (c_path, file_mode_to_unix (mode) | access_mode_to_unix (access), DEFFILEMODE);
+ else
+ fd = dup (input_fd);
+#else
+ // FIXME: No DEFFILEMODE
+ fd = -1;
+ g_assert_not_reached ();
+#endif
+
+ if (fd == -1) { //XXX translate errno?
+ *error = COULD_NOT_OPEN;
+ goto done;
+ }
+
+ *capacity = align_up_to_page_size ((size_t)*capacity);
+
+ if (*capacity > buf.st_size) {
+ int unused G_GNUC_UNUSED = ftruncate (fd, (off_t)*capacity);
+ }
+
+ handle = g_new0 (FileHandle, 1);
+ handle->handle.kind = MMAP_KIND_FILE;
+ handle->handle.ref_count = 1;
+ handle->handle.capacity = *capacity;
+ handle->fd = fd;
+
+done:
+ g_free (c_path);
+ return (void*)handle;
+}
+
+static void*
+open_memory_map (MonoString *mapName, int mode, gint64 *capacity, int access, int options, int *error)
+{
+ char *c_mapName;
+ MemoryHandle *handle;
+ if (*capacity <= 1) {
+ *error = CAPACITY_MUST_BE_POSITIVE;
+ return NULL;
+ }
+
+ if (!(mode == FILE_MODE_CREATE_NEW || mode == FILE_MODE_OPEN_OR_CREATE || mode == FILE_MODE_OPEN)) {
+ *error = INVALID_FILE_MODE;
+ return NULL;
+ }
+
+ c_mapName = mono_string_to_utf8 (mapName);
+
+ named_regions_lock ();
+ handle = (MemoryHandle*)g_hash_table_lookup (named_regions, c_mapName);
+ if (handle) {
+ if (mode == FILE_MODE_CREATE_NEW)
+ *error = FILE_ALREADY_EXISTS;
+
+ handle->handle.ref_count++;
+ //XXX should we ftruncate if the file is smaller than capacity?
+ } else {
+ if (mode == FILE_MODE_OPEN)
+ *error = FILE_NOT_FOUND;
+
+ *capacity = align_up_to_page_size (*capacity);
+
+ handle = g_new0 (MemoryHandle, 1);
+ handle->handle.kind = MMAP_KIND_MEMORY;
+ handle->handle.ref_count = 1;
+ handle->handle.capacity = *capacity;
+ handle->handle.name = g_strdup (c_mapName);
+
+ //FIXME compute RWX from access
+ handle->address = mono_valloc (NULL, (size_t)*capacity, MONO_MMAP_READ | MONO_MMAP_WRITE | MONO_MMAP_PRIVATE | MONO_MMAP_ANON);
+ handle->length = (size_t)*capacity;
+ g_hash_table_insert (named_regions, handle->handle.name, handle);
+ }
+
+ named_regions_unlock ();
+
+ g_free (c_mapName);
+ return handle;
+}
+
+
+void *
+mono_mmap_open_file (MonoString *path, int mode, MonoString *mapName, gint64 *capacity, int access, int options, int *error)
+{
+ g_assert (path || mapName);
+
+ if (!mapName)
+ return open_file_map (path, -1, mode, capacity, access, options, error);
+
+ if (path) {
+ FileHandle *file_handle;
+ char *c_mapName = mono_string_to_utf8 (mapName);
+
+ named_regions_lock ();
+ file_handle = (FileHandle*)g_hash_table_lookup (named_regions, c_mapName);
+ if (file_handle) {
+ *error = FILE_ALREADY_EXISTS;
+ file_handle = NULL;
+ } else {
+ file_handle = open_file_map (path, -1, mode, capacity, access, options, error);
+ if (file_handle) {
+ file_handle->handle.name = g_strdup (c_mapName);
+ g_hash_table_insert (named_regions, file_handle->handle.name, file_handle);
+ }
+ }
+ named_regions_unlock ();
+
+ g_free (c_mapName);
+ return file_handle;
+ }
+
+ return open_memory_map (mapName, mode, capacity, access, options, error);
+}
+
+void *
+mono_mmap_open_handle (void *handle, MonoString *mapName, gint64 *capacity, int access, int options, int *error)
+{
+ FileHandle *file_handle;
+ char *c_mapName = mono_string_to_utf8 (mapName);
+
+ named_regions_lock ();
+ file_handle = (FileHandle*)g_hash_table_lookup (named_regions, c_mapName);
+ if (file_handle) {
+ *error = FILE_ALREADY_EXISTS;
+ file_handle = NULL;
+ } else {
+ //XXX we're exploiting wapi HANDLE == FD equivalence. THIS IS FRAGILE, create a _wapi_handle_to_fd call
+ file_handle = open_file_map (NULL, GPOINTER_TO_INT (handle), FILE_MODE_OPEN, capacity, access, options, error);
+ file_handle->handle.name = g_strdup (c_mapName);
+ g_hash_table_insert (named_regions, file_handle->handle.name, file_handle);
+ }
+ named_regions_unlock ();
+
+ g_free (c_mapName);
+ return file_handle;
+}
+
+void
+mono_mmap_close (void *mmap_handle)
+{
+ Handle *handle = mmap_handle;
+
+ named_regions_lock ();
+ --handle->ref_count;
+ if (handle->ref_count == 0) {
+ if (handle->name)
+ g_hash_table_remove (named_regions, handle->name);
+
+ g_free (handle->name);
+ if (handle->kind == MMAP_KIND_MEMORY)
+ mono_vfree (((MemoryHandle*)handle)->address, ((MemoryHandle*)handle)->length);
+ else
+ close (((FileHandle*)handle)->fd);
+ g_free (handle);
+ }
+ named_regions_unlock ();
+}
+
+void
+mono_mmap_configure_inheritability (void *mmap_handle, gboolean inheritability)
+{
+ FileHandle *h = mmap_handle;
+ int fd, flags;
+
+ if (h->handle.kind != MMAP_KIND_FILE)
+ return;
+
+ fd = h->fd;
+ flags = fcntl (fd, F_GETFD, 0);
+ if (inheritability)
+ flags &= ~FD_CLOEXEC;
+ else
+ flags |= FD_CLOEXEC;
+ fcntl (fd, F_SETFD, flags);
+}
+
+void
+mono_mmap_flush (void *mmap_handle)
+{
+ MmapHandle *h = mmap_handle;
+
+ if (h)
+ msync (h->address, h->length, MS_SYNC);
+}
+
+int
+mono_mmap_map (void *handle, gint64 offset, gint64 *size, int access, void **mmap_handle, void **base_address)
+{
+ gint64 mmap_offset = 0;
+ Handle *h = handle;
+ MmapHandle res = { 0 };
+ if (h->kind == MMAP_KIND_FILE) {
+ FileHandle *fh = (FileHandle*)h;
+ size_t eff_size = *size;
+ struct stat buf = { 0 };
+ fstat (fh->fd, &buf); //FIXME error handling
+
+ if (eff_size == 0 || eff_size > buf.st_size)
+ eff_size = buf.st_size;
+ *size = eff_size;
+
+ mmap_offset = align_down_to_page_size (offset);
+ eff_size += (offset - mmap_offset);
+ //FIXME translate some interesting errno values
+ res.address = mono_file_map ((size_t)eff_size, acess_to_mmap_flags (access), fh->fd, mmap_offset, &res.free_handle);
+ res.length = eff_size;
+ res.kind = MMAP_KIND_FILE;
+
+ } else {
+ MemoryHandle *mh = (MemoryHandle*)h;
+ size_t eff_size = *size;
+
+ if (!eff_size)
+ eff_size = *size = mh->length;
+ mmap_offset = (size_t)mmap_offset;
+ res.address = (char*)mh->address + offset;
+ res.length = (size_t)size;
+ res.kind = MMAP_KIND_MEMORY;
+ }
+
+ if (res.address) {
+ *mmap_handle = g_memdup (&res, sizeof (MmapHandle));
+ *base_address = (char*)res.address + (offset - mmap_offset);
+ return 0;
+ }
+
+ *mmap_handle = NULL;
+ *base_address = NULL;
+ return COULD_NOT_MAP_MEMORY;
+}
+
+gboolean
+mono_mmap_unmap (void *mmap_handle)
+{
+ int res = 0;
+ MmapHandle *h = mmap_handle;
+
+ if (h->kind == MMAP_KIND_FILE)
+ res = mono_file_unmap (h->address, h->free_handle);
+
+ g_free (h);
+ return res == 0;
+}
+
+#endif
--- /dev/null
+/*
+ * file-mmap-posix.c: File mmap internal calls
+ *
+ * Author:
+ * Rodrigo Kumpera
+ *
+ * Copyright 2014 Xamarin Inc (http://www.xamarin.com)
+ */
+
+#include <config.h>
+
+#ifdef TARGET_WIN32
+
+#include <glib.h>
+#include <string.h>
+#include <errno.h>
+
+
+#include <mono/metadata/object.h>
+#include <mono/metadata/file-mmap.h>
+
+void *
+mono_mmap_open_file (MonoString *path, int mode, MonoString *mapName, gint64 *capacity, int access, int options, int *error)
+{
+ g_error ("No windows backend");
+ return NULL;
+}
+
+void *
+mono_mmap_open_handle (void *handle, MonoString *mapName, gint64 *capacity, int access, int options, int *error)
+{
+ g_error ("No windows backend");
+ return NULL;
+}
+
+void
+mono_mmap_close (void *mmap_handle)
+{
+ g_error ("No windows backend");
+}
+
+void
+mono_mmap_configure_inheritability (void *mmap_handle, gboolean inheritability)
+{
+ g_error ("No windows backend");
+}
+
+void
+mono_mmap_flush (void *mmap_handle)
+{
+ g_error ("No windows backend");
+}
+
+
+
+int
+mono_mmap_map (void *handle, gint64 offset, gint64 *size, int access, void **mmap_handle, void **base_address)
+{
+ g_error ("No windows backend");
+ return 0;
+}
+
+gboolean
+mono_mmap_unmap (void *mmap_handle)
+{
+ g_error ("No windows backend");
+ return TRUE;
+}
+
+#endif
--- /dev/null
+/*
+ * file-mmap.h: Managed mmap wrappers.
+ *
+ * Authors:
+ * Rodrigo Kumpera
+ *
+ * Copyright 2014 Xamarin Inc (http://www.xamarin.com)
+ */
+
+#ifndef _MONO_METADATA_FILE_MMAP_H_
+#define _MONO_METADATA_FILE_MMAP_H_
+
+#include <config.h>
+#include <glib.h>
+
+#include <mono/metadata/object-internals.h>
+#include <mono/io-layer/io-layer.h>
+#include <mono/utils/mono-compiler.h>
+
+extern void mono_mmap_close (void *mmap_handle) MONO_INTERNAL;
+
+extern void mono_mmap_configure_inheritability (void *mmap_handle, gboolean inheritability) MONO_INTERNAL;
+
+extern void mono_mmap_flush (void *mmap_handle) MONO_INTERNAL;
+
+extern void *mono_mmap_open_file (MonoString *string, int mode, MonoString *mapName, gint64 *capacity, int access, int options, int *error) MONO_INTERNAL;
+
+extern void *mono_mmap_open_handle (void *handle, MonoString *mapName, gint64 *capacity, int access, int options, int *error) MONO_INTERNAL;
+
+extern int mono_mmap_map (void *handle, gint64 offset, gint64 *size, int access, void **mmap_handle, void **base_address) MONO_INTERNAL;
+
+extern gboolean mono_mmap_unmap (void *base_address) MONO_INTERNAL;
+
+#endif /* _MONO_METADATA_FILE_MMAP_H_ */
gboolean should_be_deleted;
};
+enum {
+ MONO_GC_FINALIZER_EXTENSION_VERSION = 1,
+};
+
+typedef struct {
+ int version;
+ gboolean (*is_class_finalization_aware) (MonoClass *class);
+ void (*object_queued_for_finalization) (MonoObject *object);
+} MonoGCFinalizerCallbacks;
+
+void mono_gc_register_finalizer_callbacks (MonoGCFinalizerCallbacks *callbacks);
+
+
#ifdef HOST_WIN32
BOOL APIENTRY mono_gc_dllmain (HMODULE module_handle, DWORD reason, LPVOID reserved) MONO_INTERNAL;
#endif
ICALL(INOW_2, "GetInotifyInstance", ves_icall_System_IO_InotifyWatcher_GetInotifyInstance)
ICALL(INOW_3, "RemoveWatch", ves_icall_System_IO_InotifyWatcher_RemoveWatch)
-#if defined (TARGET_IOS) || defined (TARGET_ANDROID)
ICALL_TYPE(MMAPIMPL, "System.IO.MemoryMappedFiles.MemoryMapImpl", MMAPIMPL_1)
-ICALL(MMAPIMPL_1, "mono_filesize_from_fd", mono_filesize_from_fd)
-ICALL(MMAPIMPL_2, "mono_filesize_from_path", mono_filesize_from_path)
-#endif
-
+ICALL(MMAPIMPL_1, "CloseMapping", mono_mmap_close)
+ICALL(MMAPIMPL_2, "ConfigureHandleInheritability", mono_mmap_configure_inheritability)
+ICALL(MMAPIMPL_3, "Flush", mono_mmap_flush)
+ICALL(MMAPIMPL_4, "MapInternal", mono_mmap_map)
+ICALL(MMAPIMPL_5, "OpenFileInternal", mono_mmap_open_file)
+ICALL(MMAPIMPL_6, "OpenHandleInternal", mono_mmap_open_handle)
+ICALL(MMAPIMPL_7, "Unmap", mono_mmap_unmap)
ICALL_TYPE(MONOIO, "System.IO.MonoIO", MONOIO_1)
ICALL(MONOIO_1, "Close(intptr,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_Close)
#include <mono/metadata/mono-ptr-array.h>
#include <mono/metadata/verify-internals.h>
#include <mono/metadata/runtime.h>
+#include <mono/metadata/file-mmap.h>
#include <mono/io-layer/io-layer.h>
#include <mono/utils/strtod.h>
#include <mono/utils/monobitset.h>
static MonoReflectionType *
type_from_name (const char *str, MonoBoolean ignoreCase)
{
+ MonoMethod *m, *dest;
+
MonoType *type = NULL;
MonoAssembly *assembly = NULL;
MonoTypeNameParse info;
return NULL;
}
- if (info.assembly.name) {
- assembly = mono_assembly_load (&info.assembly, NULL, NULL);
- } else {
- MonoMethod *m = mono_method_get_last_managed ();
- MonoMethod *dest = m;
- mono_stack_walk_no_il (get_caller_no_reflection, &dest);
- if (!dest)
- dest = m;
+ /*
+ * We must compute the calling assembly as type loading must happen under a metadata context.
+ * For example. The main assembly is a.exe and Type.GetType is called from dir/b.dll. Without
+ * the metadata context (basedir currently) set to dir/b.dll we won't be able to load a dir/c.dll.
+ */
+ m = mono_method_get_last_managed ();
+ dest = m;
- /*
- * FIXME: mono_method_get_last_managed() sometimes returns NULL, thus
- * causing ves_icall_System_Reflection_Assembly_GetCallingAssembly()
- * to crash. This only seems to happen in some strange remoting
- * scenarios and I was unable to figure out what's happening there.
- * Dec 10, 2005 - Martin.
- */
+ mono_stack_walk_no_il (get_caller_no_reflection, &dest);
+ if (!dest)
+ dest = m;
- if (dest) {
- assembly = dest->klass->image->assembly;
- type_resolve = TRUE;
- } else {
- g_warning (G_STRLOC);
- }
+ /*
+ * FIXME: mono_method_get_last_managed() sometimes returns NULL, thus
+ * causing ves_icall_System_Reflection_Assembly_GetCallingAssembly()
+ * to crash. This only seems to happen in some strange remoting
+ * scenarios and I was unable to figure out what's happening there.
+ * Dec 10, 2005 - Martin.
+ */
+
+ if (dest) {
+ assembly = dest->klass->image->assembly;
+ type_resolve = TRUE;
+ } else {
+ g_warning (G_STRLOC);
}
+ if (info.assembly.name)
+ assembly = mono_assembly_load (&info.assembly, assembly ? assembly->basedir : NULL, NULL);
+
+
if (assembly) {
/* When loading from the current assembly, AppDomain.TypeResolve will not be called yet */
type = mono_reflection_get_type (assembly->image, &info, ignoreCase, &type_resolve);
ICALL_EXPORT void
ves_icall_System_Environment_InternalSetEnvironmentVariable (MonoString *name, MonoString *value)
{
- MonoError error;
#ifdef HOST_WIN32
-
gunichar2 *utf16_name, *utf16_value;
#else
gchar *utf8_name, *utf8_value;
+ MonoError error;
#endif
MONO_ARCH_SAVE_REGS;
ves_icall_System_Environment_BroadcastSettingChange (void)
{
#ifdef HOST_WIN32
- SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, NULL, L"Environment", SMTO_ABORTIFHUNG, 2000, 0);
+ SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)NULL, (LPARAM)L"Environment", SMTO_ABORTIFHUNG, 2000, 0);
#endif
}
g_assert (marshal_native_to_managed);
}
- mtype = mono_reflection_type_from_name (spec->data.custom_data.custom_name, m->image);
+ if (spec->data.custom_data.image)
+ mtype = mono_reflection_type_from_name (spec->data.custom_data.custom_name, spec->data.custom_data.image);
+ else
+ mtype = mono_reflection_type_from_name (spec->data.custom_data.custom_name, m->image);
g_assert (mtype != NULL);
mklass = mono_class_from_mono_type (mtype);
g_assert (mklass != NULL);
mono_metadata_type_equal_full (MonoType *t1, MonoType *t2, gboolean signature_only) MONO_INTERNAL;
MonoMarshalSpec *
-mono_metadata_parse_marshal_spec_full (MonoImage *image, const char *ptr) MONO_INTERNAL;
+mono_metadata_parse_marshal_spec_full (MonoImage *image, MonoImage *parent_image, const char *ptr) MONO_INTERNAL;
guint mono_metadata_generic_inst_hash (gconstpointer data) MONO_INTERNAL;
gboolean mono_metadata_generic_inst_equal (gconstpointer ka, gconstpointer kb) MONO_INTERNAL;
MonoMethod *mono_get_method_constrained_with_method (MonoImage *image, MonoMethod *method, MonoClass *constrained_class, MonoGenericContext *context) MONO_INTERNAL;
+void mono_type_set_alignment (MonoTypeEnum type, int align) MONO_INTERNAL;
+
#endif /* __MONO_METADATA_INTERNALS_H__ */
#define abi__alignof__(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
+static int i8_align;
+
+/*
+ * mono_type_set_alignment:
+ *
+ * Set the alignment used by runtime to layout fields etc. of type TYPE to ALIGN.
+ * This should only be used in AOT mode since the resulting layout will not match the
+ * host abi layout.
+ */
+void
+mono_type_set_alignment (MonoTypeEnum type, int align)
+{
+ /* Support only a few types whose alignment is abi dependent */
+ switch (type) {
+ case MONO_TYPE_I8:
+ i8_align = align;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
/*
* mono_type_size:
* @t: the type to return the size of
return 4;
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- *align = abi__alignof__(gint64);
+ if (i8_align)
+ *align = i8_align;
+ else
+ *align = abi__alignof__(gint64);
return 8;
case MONO_TYPE_R8:
*align = abi__alignof__(double);
return sizeof (float);
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- *align = abi__alignof__(gint64);
+ if (i8_align)
+ *align = i8_align;
+ else
+ *align = abi__alignof__(gint64);
return sizeof (gint64);
case MONO_TYPE_R8:
*align = abi__alignof__(double);
const char *p;
if ((p = mono_metadata_get_marshal_info (meta, index, TRUE))) {
- *marshal_spec = mono_metadata_parse_marshal_spec_full (alloc_from_image ? meta : NULL, p);
+ *marshal_spec = mono_metadata_parse_marshal_spec_full (alloc_from_image ? meta : NULL, meta, p);
}
}
MonoMarshalSpec *
mono_metadata_parse_marshal_spec (MonoImage *image, const char *ptr)
{
- return mono_metadata_parse_marshal_spec_full (NULL, ptr);
+ return mono_metadata_parse_marshal_spec_full (NULL, image, ptr);
}
+/*
+ * If IMAGE is non-null, memory will be allocated from its mempool, otherwise it will be allocated using malloc.
+ * PARENT_IMAGE is the image containing the marshal spec.
+ */
MonoMarshalSpec *
-mono_metadata_parse_marshal_spec_full (MonoImage *image, const char *ptr)
+mono_metadata_parse_marshal_spec_full (MonoImage *image, MonoImage *parent_image, const char *ptr)
{
MonoMarshalSpec *res;
int len;
/* read cookie string */
len = mono_metadata_decode_value (ptr, &ptr);
res->data.custom_data.cookie = mono_image_strndup (image, ptr, len);
+ res->data.custom_data.image = parent_image;
}
if (res->native == MONO_NATIVE_SAFEARRAY) {
struct {
char *custom_name;
char *cookie;
+ MonoImage *image;
} custom_data;
struct {
MonoMarshalVariant elem_type;
void
mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value)
{
- return mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value);
+ mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value);
}
/**
assembly = image->assembly;
if (!assembly) {
/* then we must load the assembly ourselve - see #60439 */
- assembly = mono_assembly_load (&info->assembly, NULL, NULL);
+ assembly = mono_assembly_load (&info->assembly, image->assembly->basedir, NULL);
if (!assembly)
return NULL;
}
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_GC, "Warning: Repeated degraded allocation. Consider increasing nursery-size.");
last_major_gc_warned = stat_major_gcs;
}
- InterlockedExchangeAdd (°raded_mode, size);
+ SGEN_ATOMIC_ADD_P (degraded_mode, size);
sgen_ensure_free_space (size);
} else {
if (sgen_need_major_collection (size))
if (degraded_mode && degraded_mode < DEFAULT_NURSERY_SIZE)
return alloc_degraded (vtable, size, FALSE);
- available_in_tlab = TLAB_REAL_END - TLAB_NEXT;
+ available_in_tlab = (int)(TLAB_REAL_END - TLAB_NEXT);//We'll never have tlabs > 2Gb
if (size > tlab_size || available_in_tlab > SGEN_MAX_NURSERY_WASTE) {
/* Allocate directly from the nursery */
do {
new_next = (char*)p + size;
real_end = TLAB_REAL_END;
- available_in_tlab = real_end - (char*)p;
+ available_in_tlab = (int)(real_end - (char*)p);//We'll never have tlabs > 2Gb
if (G_LIKELY (new_next < real_end)) {
TLAB_NEXT = new_next;
mono_gc_alloc_obj (MonoVTable *vtable, size_t size)
{
void *res;
+ TLAB_ACCESS_INIT;
if (!SGEN_CAN_ALIGN_UP (size))
return NULL;
#ifndef DISABLE_CRITICAL_REGION
- TLAB_ACCESS_INIT;
if (G_UNLIKELY (has_per_allocation_action)) {
static int alloc_count;
mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length)
{
MonoArray *arr;
+ TLAB_ACCESS_INIT;
if (!SGEN_CAN_ALIGN_UP (size))
return NULL;
#ifndef DISABLE_CRITICAL_REGION
- TLAB_ACCESS_INIT;
ENTER_CRITICAL_REGION;
arr = mono_gc_try_alloc_obj_nolock (vtable, size);
if (arr) {
/*This doesn't require fencing since EXIT_CRITICAL_REGION already does it for us*/
- arr->max_length = max_length;
+ arr->max_length = (mono_array_size_t)max_length;
EXIT_CRITICAL_REGION;
return arr;
}
return mono_gc_out_of_memory (size);
}
- arr->max_length = max_length;
+ arr->max_length = (mono_array_size_t)max_length;
UNLOCK_GC;
{
MonoArray *arr;
MonoArrayBounds *bounds;
+ TLAB_ACCESS_INIT;
if (!SGEN_CAN_ALIGN_UP (size))
return NULL;
#ifndef DISABLE_CRITICAL_REGION
- TLAB_ACCESS_INIT;
ENTER_CRITICAL_REGION;
arr = mono_gc_try_alloc_obj_nolock (vtable, size);
if (arr) {
/*This doesn't require fencing since EXIT_CRITICAL_REGION already does it for us*/
- arr->max_length = max_length;
+ arr->max_length = (mono_array_size_t)max_length;
bounds = (MonoArrayBounds*)((char*)arr + size - bounds_size);
arr->bounds = bounds;
return mono_gc_out_of_memory (size);
}
- arr->max_length = max_length;
+ arr->max_length = (mono_array_size_t)max_length;
bounds = (MonoArrayBounds*)((char*)arr + size - bounds_size);
arr->bounds = bounds;
mono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len)
{
MonoString *str;
+ TLAB_ACCESS_INIT;
if (!SGEN_CAN_ALIGN_UP (size))
return NULL;
#ifndef DISABLE_CRITICAL_REGION
- TLAB_ACCESS_INIT;
ENTER_CRITICAL_REGION;
str = mono_gc_try_alloc_obj_nolock (vtable, size);
if (str) {
/*The tlab store must be visible before the the vtable store. This could be replaced with a DDS but doing it with IL would be tricky. */
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX);
- mono_mb_emit_op (mb, CEE_MONO_MEMORY_BARRIER, StoreStoreBarrier);
+ mono_mb_emit_op (mb, CEE_MONO_MEMORY_BARRIER, (gpointer)StoreStoreBarrier);
/* *p = vtable; */
mono_mb_emit_ldloc (mb, p_var);
We must make sure both vtable and max_length are globaly visible before returning to managed land.
*/
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX);
- mono_mb_emit_op (mb, CEE_MONO_MEMORY_BARRIER, StoreStoreBarrier);
+ mono_mb_emit_op (mb, CEE_MONO_MEMORY_BARRIER, (gpointer)StoreStoreBarrier);
/* return p */
mono_mb_emit_ldloc (mb, p_var);
#endif
}
- return mask;
+ return mask != 0;
}
void*
mword obj_size = sgen_par_object_get_size (vt, (MonoObject*)obj);
char *obj_end = obj + obj_size;
size_t card_count;
- int extra_idx = 0;
+ size_t extra_idx = 0;
MonoArray *arr = (MonoArray*)obj;
mword desc = (mword)klass->element_class->gc_descr;
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)) {
- int index;
- int idx = (card_data - card_base) + extra_idx;
+ size_t index;
+ 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 *first_elem, *elem;
if (*(ptr) && sgen_ptr_in_nursery ((char*)*(ptr))) { \
if (!sgen_get_remset ()->find_address ((char*)(ptr)) && !sgen_cement_lookup (*(ptr))) { \
SGEN_LOG (0, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.", *(ptr), (char*)(ptr) - (char*)(obj), (obj), ((MonoObject*)(obj))->vtable->klass->name_space, ((MonoObject*)(obj))->vtable->klass->name); \
- binary_protocol_missing_remset ((obj), (gpointer)LOAD_VTABLE ((obj)), (char*)(ptr) - (char*)(obj), *(ptr), (gpointer)LOAD_VTABLE(*(ptr)), object_is_pinned (*(ptr))); \
+ binary_protocol_missing_remset ((obj), (gpointer)LOAD_VTABLE ((obj)), (int) ((char*)(ptr) - (char*)(obj)), *(ptr), (gpointer)LOAD_VTABLE(*(ptr)), object_is_pinned (*(ptr))); \
if (!object_is_pinned (*(ptr))) \
missing_remsets = TRUE; \
} \
if (*(ptr) && !sgen_ptr_in_nursery ((char*)*(ptr)) && !is_major_or_los_object_marked ((char*)*(ptr))) { \
if (!sgen_get_remset ()->find_address_with_cards (start, cards, (char*)(ptr))) { \
SGEN_LOG (0, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.", *(ptr), (char*)(ptr) - (char*)(obj), (obj), ((MonoObject*)(obj))->vtable->klass->name_space, ((MonoObject*)(obj))->vtable->klass->name); \
- binary_protocol_missing_remset ((obj), (gpointer)LOAD_VTABLE ((obj)), (char*)(ptr) - (char*)(obj), *(ptr), (gpointer)LOAD_VTABLE(*(ptr)), object_is_pinned (*(ptr))); \
+ binary_protocol_missing_remset ((obj), (gpointer)LOAD_VTABLE ((obj)), (int) ((char*)(ptr) - (char*)(obj)), *(ptr), (gpointer)LOAD_VTABLE(*(ptr)), object_is_pinned (*(ptr))); \
missing_remsets = TRUE; \
} \
} \
return;
case ROOT_DESC_COMPLEX: {
gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
- int bwords = (*bitmap_data) - 1;
+ int bwords = (int) ((*bitmap_data) - 1);
void **start_run = start_root;
bitmap_data++;
while (bwords-- > 0) {
break;
case ROOT_DESC_COMPLEX: {
gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
- int bwords = (*bitmap_data) - 1;
+ int bwords = (int)((*bitmap_data) - 1);
void **start_run = start_root;
bitmap_data++;
while (bwords-- > 0) {
{
MonoObject *o = (MonoObject*)(obj);
MonoObject *ref = (MonoObject*)*(ptr);
- int offset = (char*)(ptr) - (char*)o;
+ size_t offset = (char*)(ptr) - (char*)o;
if (o->vtable->klass == mono_defaults.thread_class && offset == G_STRUCT_OFFSET (MonoThread, internal_thread))
return TRUE;
{
MonoObject *o = (MonoObject*)(obj);
MonoObject *ref = (MonoObject*)*(ptr);
- int offset = (char*)(ptr) - (char*)o;
+ size_t offset = (char*)(ptr) - (char*)o;
MonoClass *class;
MonoClassField *field;
char *str;
return 0;
}
+/*
static void
dump_processor_state (SgenBridgeProcessor *p)
{
printf ("-------\n");
}
+*/
gboolean
sgen_compare_bridge_processor_results (SgenBridgeProcessor *a, SgenBridgeProcessor *b)
return i;
}
}
- i += complex_descriptors [i];
+ i += (int)complex_descriptors [i];
}
if (complex_descriptors_next + nwords > complex_descriptors_size) {
int new_size = complex_descriptors_size * 2 + nwords;
case DESC_TYPE_COMPLEX: {
gsize *bitmap_data = sgen_get_complex_descriptor (d);
- int bwords = (*bitmap_data) - 1;
+ int bwords = (int)(*bitmap_data) - 1;//Max scalar object size is 1Mb, which means up to 32k descriptor words
int i;
bitmap = g_new0 (gsize, bwords);
/* there are pointers */ \
void **_objptr = (void**)(obj); \
gsize *bitmap_data = sgen_get_complex_descriptor ((desc)); \
- int bwords = (*bitmap_data) - 1; \
+ gsize bwords = (*bitmap_data) - 1; \
void **start_run = _objptr; \
bitmap_data++; \
if (0) { \
#define OBJ_COMPLEX_ARR_FOREACH_PTR(vt,obj) do { \
/* there are pointers */ \
gsize *mbitmap_data = sgen_get_complex_descriptor ((vt)->desc); \
- int mbwords = (*mbitmap_data++) - 1; \
- int el_size = mono_array_element_size (vt->klass); \
+ gsize mbwords = (*mbitmap_data++) - 1; \
+ gsize el_size = mono_array_element_size (vt->klass); \
char *e_start = (char*)(obj) + G_STRUCT_OFFSET (MonoArray, vector); \
char *e_end = e_start + el_size * mono_array_length_fast ((MonoArray*)(obj)); \
if (0) \
while (e_start < e_end) { \
void **_objptr = (void**)e_start; \
gsize *bitmap_data = mbitmap_data; \
- unsigned int bwords = mbwords; \
+ gsize bwords = mbwords; \
while (bwords-- > 0) { \
gsize _bmap = *bitmap_data++; \
void **start_run = _objptr; \
static int no_finalize = 0;
#define DISLINK_OBJECT(l) (REVEAL_POINTER (*(void**)(l)))
-#define DISLINK_TRACK(l) ((~(gulong)(*(void**)(l))) & 1)
+#define DISLINK_TRACK(l) ((~(size_t)(*(void**)(l))) & 1)
/*
* The finalizable hash has the object as the key, the
int gc_debug_level = 0;
FILE* gc_debug_file;
+static MonoGCFinalizerCallbacks fin_callbacks;
+
/*
void
mono_gc_flush_info (void)
#define SCAN_START_SIZE SGEN_SCAN_START_SIZE
static mword pagesize = 4096;
-int degraded_mode = 0;
+size_t degraded_mode = 0;
static mword bytes_pinned_from_failed_allocation = 0;
void
sgen_pin_objects_in_section (GCMemSection *section, ScanCopyContext ctx)
{
- int num_entries = section->pin_queue_num_entries;
+ size_t num_entries = section->pin_queue_num_entries;
if (num_entries) {
void **start = section->pin_queue_start;
- int reduced_to;
+ size_t reduced_to;
reduced_to = pin_objects_from_addresses (section, start, start + num_entries,
section->data, section->next_data, ctx);
section->pin_queue_num_entries = reduced_to;
* Done using a by-the book heap sort. Which has decent and stable performance, is pretty cache efficient.
*/
void
-sgen_sort_addresses (void **array, int size)
+sgen_sort_addresses (void **array, size_t size)
{
- int i;
+ size_t i;
void *tmp;
for (i = 1; i < size; ++i) {
- int child = i;
+ size_t child = i;
while (child > 0) {
- int parent = (child - 1) / 2;
+ size_t parent = (child - 1) / 2;
if (array [parent] >= array [child])
break;
}
for (i = size - 1; i > 0; --i) {
- int end, root;
+ size_t end, root;
tmp = array [i];
array [i] = array [0];
array [0] = tmp;
root = 0;
while (root * 2 + 1 <= end) {
- int child = root * 2 + 1;
+ size_t child = root * 2 + 1;
if (child < end && array [child] < array [child + 1])
++child;
return;
case ROOT_DESC_COMPLEX: {
gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
- int bwords = (*bitmap_data) - 1;
+ gsize bwords = (*bitmap_data) - 1;
void **start_run = start_root;
bitmap_data++;
while (bwords-- > 0) {
return;
case ROOT_DESC_COMPLEX: {
gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
- int bwords = (*bitmap_data) - 1;
+ gsize bwords = (*bitmap_data) - 1;
void **start_run = start_root;
bitmap_data++;
while (bwords-- > 0) {
size_t i;
for (i = 0; i < section->num_scan_start; ++i) {
if (section->scan_starts [i]) {
- guint size = safe_object_get_size ((MonoObject*) section->scan_starts [i]);
+ mword size = safe_object_get_size ((MonoObject*) section->scan_starts [i]);
g_assert (size >= sizeof (MonoObject) && size <= MAX_SMALL_OBJ_SIZE);
}
}
g_assert (j < sizeof (class_name));
class_name [j] = 0;
- fprintf (heap_dump_file, "<object class=\"%s.%s\" size=\"%d\"",
+ fprintf (heap_dump_file, "<object class=\"%s.%s\" size=\"%zd\"",
class->name_space, class_name,
safe_object_get_size (obj));
if (dump_location) {
TV_GETTIME (atv);
time_minor_pinning += TV_ELAPSED (btv, atv);
- SGEN_LOG (2, "Finding pinned pointers: %d in %d usecs", sgen_get_pinned_count (), TV_ELAPSED (btv, atv));
- SGEN_LOG (4, "Start scan with %d pinned objects", sgen_get_pinned_count ());
+ SGEN_LOG (2, "Finding pinned pointers: %zd in %d usecs", sgen_get_pinned_count (), TV_ELAPSED (btv, atv));
+ SGEN_LOG (4, "Start scan with %zd pinned objects", sgen_get_pinned_count ());
MONO_GC_CHECKPOINT_3 (GENERATION_NURSERY);
}
static void
-major_copy_or_mark_from_roots (int *old_next_pin_slot, gboolean finish_up_concurrent_mark, gboolean scan_mod_union)
+major_copy_or_mark_from_roots (size_t *old_next_pin_slot, gboolean finish_up_concurrent_mark, gboolean scan_mod_union)
{
LOSObject *bigobj;
TV_DECLARE (atv);
/* identify possible pointers to the insize of large objects */
SGEN_LOG (6, "Pinning from large objects");
for (bigobj = los_object_list; bigobj; bigobj = bigobj->next) {
- int dummy;
+ size_t dummy;
if (sgen_find_optimized_pin_queue_area (bigobj->data, (char*)bigobj->data + sgen_los_object_size (bigobj), &dummy)) {
binary_protocol_pin (bigobj->data, (gpointer)LOAD_VTABLE (bigobj->data), safe_object_get_size (((MonoObject*)(bigobj->data))));
TV_GETTIME (btv);
time_major_pinning += TV_ELAPSED (atv, btv);
- SGEN_LOG (2, "Finding pinned pointers: %d in %d usecs", sgen_get_pinned_count (), TV_ELAPSED (atv, btv));
- SGEN_LOG (4, "Start scan with %d pinned objects", sgen_get_pinned_count ());
+ SGEN_LOG (2, "Finding pinned pointers: %zd in %d usecs", sgen_get_pinned_count (), TV_ELAPSED (atv, btv));
+ SGEN_LOG (4, "Start scan with %zd pinned objects", sgen_get_pinned_count ());
major_collector.init_to_space ();
}
static void
-major_start_collection (gboolean concurrent, int *old_next_pin_slot)
+major_start_collection (gboolean concurrent, size_t *old_next_pin_slot)
{
MONO_GC_BEGIN (GENERATION_OLD);
binary_protocol_collection_begin (stat_major_gcs, GENERATION_OLD);
}
static void
-major_finish_collection (const char *reason, int old_next_pin_slot, gboolean scan_mod_union)
+major_finish_collection (const char *reason, size_t old_next_pin_slot, gboolean scan_mod_union)
{
LOSObject *bigobj, *prevbo;
TV_DECLARE (atv);
{
TV_DECLARE (all_atv);
TV_DECLARE (all_btv);
- int old_next_pin_slot;
+ size_t old_next_pin_slot;
if (disable_major_collections)
return FALSE;
/* this also sets the proper pointers for the next allocation */
if (generation_to_collect == GENERATION_NURSERY && !sgen_can_alloc_size (requested_size)) {
/* TypeBuilder and MonoMethod are killing mcs with fragmentation */
- SGEN_LOG (1, "nursery collection didn't find enough room for %zd alloc (%d pinned)", requested_size, sgen_get_pinned_count ());
+ SGEN_LOG (1, "nursery collection didn't find enough room for %zd alloc (%zd pinned)", requested_size, sgen_get_pinned_count ());
sgen_dump_pin_queue ();
degraded_mode = 1;
}
return mono_class_has_parent_fast (class, mono_defaults.critical_finalizer_object);
}
+static gboolean
+is_finalization_aware (MonoObject *obj)
+{
+ MonoVTable *vt = ((MonoVTable*)LOAD_VTABLE (obj));
+ return (vt->gc_bits & SGEN_GC_BIT_FINALIZER_AWARE) == SGEN_GC_BIT_FINALIZER_AWARE;
+}
+
void
sgen_queue_finalization_entry (MonoObject *obj)
{
fin_ready_list = entry;
}
+ if (fin_callbacks.object_queued_for_finalization && is_finalization_aware (obj))
+ fin_callbacks.object_queued_for_finalization (obj);
+
#ifdef ENABLE_DTRACE
if (G_UNLIKELY (MONO_GC_FINALIZE_ENQUEUE_ENABLED ())) {
int gen = sgen_ptr_in_nursery (obj) ? GENERATION_NURSERY : GENERATION_OLD;
SGEN_LOG (3, "Skipping non-running thread %p, range: %p-%p, size: %td (state %d)", info, info->stack_start, info->stack_end, (char*)info->stack_end - (char*)info->stack_start, mono_thread_info_run_state (info));
continue;
}
- SGEN_LOG (3, "Scanning thread %p, range: %p-%p, size: %td, pinned=%d", info, info->stack_start, info->stack_end, (char*)info->stack_end - (char*)info->stack_start, sgen_get_pinned_count ());
+ SGEN_LOG (3, "Scanning thread %p, range: %p-%p, size: %td, pinned=%zd", info, info->stack_start, info->stack_end, (char*)info->stack_end - (char*)info->stack_start, sgen_get_pinned_count ());
if (gc_callbacks.thread_mark_func && !conservative_stack_mark) {
UserCopyOrMarkData data = { NULL, queue };
set_user_copy_or_mark_data (&data);
binary_protocol_thread_unregister ((gpointer)tid);
SGEN_LOG (3, "unregister thread %p (%p)", p, (gpointer)tid);
- mono_threads_add_joinable_thread ((gpointer)tid);
+ if (p->info.runtime_thread)
+ mono_threads_add_joinable_thread ((gpointer)tid);
if (gc_callbacks.thread_detach_func) {
gc_callbacks.thread_detach_func (p->runtime_data);
{
mono_thread_info_detach ();
pthread_exit (retval);
+ g_assert_not_reached ();
}
#endif /* USE_PTHREAD_INTERCEPT */
if (val < SGEN_MAX_NURSERY_WASTE) {
sgen_env_var_error (MONO_GC_PARAMS_NAME, "Using default value.",
- "`nursery-size` must be at least %d bytes.\n", SGEN_MAX_NURSERY_WASTE);
+ "`nursery-size` must be at least %d bytes.", SGEN_MAX_NURSERY_WASTE);
continue;
}
sgen_nursery_size = val;
sgen_nursery_bits = 0;
- while (1 << (++ sgen_nursery_bits) != sgen_nursery_size)
+ while (ONE_P << (++ sgen_nursery_bits) != sgen_nursery_size)
;
#else
sgen_nursery_size = val;
mono_mb_emit_ldarg (mb, 0);
mono_mb_emit_icon (mb, DEFAULT_NURSERY_BITS);
mono_mb_emit_byte (mb, CEE_SHR_UN);
- mono_mb_emit_icon (mb, (mword)sgen_get_nursery_start () >> DEFAULT_NURSERY_BITS);
+ mono_mb_emit_ptr (mb, (gpointer)((mword)sgen_get_nursery_start () >> DEFAULT_NURSERY_BITS));
nursery_check_return_labels [0] = mono_mb_emit_branch (mb, CEE_BEQ);
if (!major_collector.is_concurrent) {
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_icon (mb, DEFAULT_NURSERY_BITS);
mono_mb_emit_byte (mb, CEE_SHR_UN);
- mono_mb_emit_icon (mb, (mword)sgen_get_nursery_start () >> DEFAULT_NURSERY_BITS);
+ mono_mb_emit_ptr (mb, (gpointer)((mword)sgen_get_nursery_start () >> DEFAULT_NURSERY_BITS));
nursery_check_return_labels [1] = mono_mb_emit_branch (mb, CEE_BNE_UN);
}
#else
guint
mono_gc_get_vtable_bits (MonoClass *class)
{
+ guint res = 0;
/* FIXME move this to the bridge code */
- if (!sgen_need_bridge_processing ())
- return 0;
- switch (sgen_bridge_class_kind (class)) {
- case GC_BRIDGE_TRANSPARENT_BRIDGE_CLASS:
- case GC_BRIDGE_OPAQUE_BRIDGE_CLASS:
- return SGEN_GC_BIT_BRIDGE_OBJECT;
- case GC_BRIDGE_OPAQUE_CLASS:
- return SGEN_GC_BIT_BRIDGE_OPAQUE_OBJECT;
+ if (sgen_need_bridge_processing ()) {
+ switch (sgen_bridge_class_kind (class)) {
+ case GC_BRIDGE_TRANSPARENT_BRIDGE_CLASS:
+ case GC_BRIDGE_OPAQUE_BRIDGE_CLASS:
+ res = SGEN_GC_BIT_BRIDGE_OBJECT;
+ break;
+ case GC_BRIDGE_OPAQUE_CLASS:
+ res = SGEN_GC_BIT_BRIDGE_OPAQUE_OBJECT;
+ break;
+ }
}
- return 0;
+ if (fin_callbacks.is_class_finalization_aware) {
+ if (fin_callbacks.is_class_finalization_aware (class))
+ res |= SGEN_GC_BIT_FINALIZER_AWARE;
+ }
+ return res;
}
void
return SGEN_TV_ELAPSED (sgen_init_timestamp, timestamp);
}
+void
+mono_gc_register_finalizer_callbacks (MonoGCFinalizerCallbacks *callbacks)
+{
+ if (callbacks->version != MONO_GC_FINALIZER_EXTENSION_VERSION)
+ g_error ("Invalid finalizer callback version. Expected %d but got %d\n", MONO_GC_FINALIZER_EXTENSION_VERSION, callbacks->version);
+
+ fin_callbacks = *callbacks;
+}
+
#endif /* HAVE_SGEN_GC */
char **scan_starts;
/* in major collections indexes in the pin_queue for objects that pin this section */
void **pin_queue_start;
- int pin_queue_num_entries;
+ size_t pin_queue_num_entries;
size_t num_scan_start;
};
#define SGEN_CAN_ALIGN_UP(s) ((s) <= SIZE_MAX - (SGEN_ALLOC_ALIGN - 1))
#define SGEN_ALIGN_UP(s) (((s)+(SGEN_ALLOC_ALIGN-1)) & ~(SGEN_ALLOC_ALIGN-1))
+#if SIZEOF_VOID_P == 4
+#define ONE_P 1
+#else
+#define ONE_P 1ll
+#endif
+
/*
* The link pointer is hidden by negating each bit. We use the lowest
* bit of the link (before negation) to store whether it needs
* resurrection tracking.
*/
-#define HIDE_POINTER(p,t) ((gpointer)(~((gulong)(p)|((t)?1:0))))
-#define REVEAL_POINTER(p) ((gpointer)((~(gulong)(p))&~3L))
+#define HIDE_POINTER(p,t) ((gpointer)(~((size_t)(p)|((t)?1:0))))
+#define REVEAL_POINTER(p) ((gpointer)((~(size_t)(p))&~3L))
#ifdef SGEN_ALIGN_NURSERY
#define SGEN_PTR_IN_NURSERY(p,bits,start,end) (((mword)(p) & ~((1 << (bits)) - 1)) == (mword)(start))
enum {
SGEN_GC_BIT_BRIDGE_OBJECT = 1,
SGEN_GC_BIT_BRIDGE_OPAQUE_OBJECT = 2,
+ SGEN_GC_BIT_FINALIZER_AWARE = 4,
};
/* the runtime can register areas of memory as roots: we keep two lists of roots,
void* sgen_alloc_internal_dynamic (size_t size, int type, gboolean assert_on_failure) MONO_INTERNAL;
void sgen_free_internal_dynamic (void *addr, size_t size, int type) MONO_INTERNAL;
-void** sgen_find_optimized_pin_queue_area (void *start, void *end, int *num) MONO_INTERNAL;
+void** sgen_find_optimized_pin_queue_area (void *start, void *end, size_t *num) MONO_INTERNAL;
void sgen_find_section_pin_queue_start_end (GCMemSection *section) MONO_INTERNAL;
void sgen_pin_objects_in_section (GCMemSection *section, ScanCopyContext ctx) MONO_INTERNAL;
void sgen_pin_stats_register_global_remset (char *obj);
void sgen_pin_stats_print_class_stats (void);
-void sgen_sort_addresses (void **array, int size) MONO_INTERNAL;
+void sgen_sort_addresses (void **array, size_t size) MONO_INTERNAL;
void sgen_add_to_global_remset (gpointer ptr, gpointer obj) MONO_INTERNAL;
int sgen_get_current_collection_generation (void) MONO_INTERNAL;
#define SGEN_TO_SPACE_GRANULE_IN_BYTES (1 << SGEN_TO_SPACE_GRANULE_BITS)
extern char *sgen_space_bitmap MONO_INTERNAL;
-extern int sgen_space_bitmap_size MONO_INTERNAL;
+extern size_t sgen_space_bitmap_size MONO_INTERNAL;
static inline gboolean
sgen_nursery_is_to_space (char *object)
{
- int idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
- int byte = idx / 8;
- int bit = idx & 0x7;
+ size_t idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
+ size_t byte = idx / 8;
+ size_t bit = idx & 0x7;
SGEN_ASSERT (4, sgen_ptr_in_nursery (object), "object %p is not in nursery [%p - %p]", object, sgen_get_nursery_start (), sgen_get_nursery_end ());
SGEN_ASSERT (4, byte < sgen_space_bitmap_size, "byte index %d out of range", byte, sgen_space_bitmap_size);
SgenObjectOperations serial_ops;
SgenObjectOperations parallel_ops;
- void (*prepare_to_space) (char *to_space_bitmap, int space_bitmap_size);
+ void (*prepare_to_space) (char *to_space_bitmap, size_t space_bitmap_size);
void (*clear_fragments) (void);
SgenFragment* (*build_fragments_get_exclude_head) (void);
void (*build_fragments_release_exclude_head) (void);
SgenObjectOperations major_ops;
SgenObjectOperations major_concurrent_ops;
- void* (*alloc_object) (MonoVTable *vtable, int size, gboolean has_references);
- void* (*par_alloc_object) (MonoVTable *vtable, int size, gboolean has_references);
+ void* (*alloc_object) (MonoVTable *vtable, size_t size, gboolean has_references);
+ void* (*par_alloc_object) (MonoVTable *vtable, size_t size, gboolean has_references);
void (*free_pinned_object) (char *obj, size_t size);
void (*iterate_objects) (IterateObjectsFlags flags, IterateObjectCallbackFunc callback, void *data);
void (*free_non_pinned_object) (char *obj, size_t size);
gboolean (*ptr_is_in_non_pinned_space) (char *ptr, char **start);
gboolean (*obj_is_from_pinned_alloc) (char *obj);
void (*report_pinned_memory_usage) (void);
- int (*get_num_major_sections) (void);
+ size_t (*get_num_major_sections) (void);
gboolean (*handle_gc_param) (const char *opt);
void (*print_gc_param_usage) (void);
gboolean (*is_worker_thread) (MonoNativeThreadId thread);
SgenRemeberedSet *sgen_get_remset (void) MONO_INTERNAL;
-static guint /*__attribute__((noinline)) not sure if this hint is a good idea*/
+static mword /*__attribute__((noinline)) not sure if this hint is a good idea*/
slow_object_get_size (MonoVTable *vtable, MonoObject* o)
{
MonoClass *klass = vtable->klass;
* vtable field, is not intact. This is necessary for the parallel
* collector.
*/
-static inline guint
+static inline mword
sgen_par_object_get_size (MonoVTable *vtable, MonoObject* o)
{
mword descr = (mword)vtable->gc_descr;
return slow_object_get_size (vtable, o);
}
-static inline guint
+static inline mword
sgen_safe_object_get_size (MonoObject *obj)
{
char *forwarded;
void sgen_clear_nursery_fragments (void) MONO_INTERNAL;
void sgen_nursery_allocator_prepare_for_pinning (void) MONO_INTERNAL;
void sgen_nursery_allocator_set_nursery_bounds (char *nursery_start, char *nursery_end) MONO_INTERNAL;
-mword sgen_build_nursery_fragments (GCMemSection *nursery_section, void **start, int num_entries, SgenGrayQueue *unpin_queue) MONO_INTERNAL;
+mword sgen_build_nursery_fragments (GCMemSection *nursery_section, void **start, size_t num_entries, SgenGrayQueue *unpin_queue) MONO_INTERNAL;
void sgen_init_nursery_allocator (void) MONO_INTERNAL;
void sgen_nursery_allocator_init_heavy_stats (void) MONO_INTERNAL;
void sgen_alloc_init_heavy_stats (void) MONO_INTERNAL;
extern guint32 collect_before_allocs;
extern guint32 verify_before_allocs;
extern gboolean has_per_allocation_action;
-extern int degraded_mode;
+extern size_t degraded_mode;
extern int default_nursery_size;
extern guint32 tlab_size;
extern NurseryClearPolicy nursery_clear_policy;
static inline void
sgen_set_nursery_scan_start (char *p)
{
- int idx = (p - (char*)nursery_section->data) / SGEN_SCAN_START_SIZE;
+ size_t idx = (p - (char*)nursery_section->data) / SGEN_SCAN_START_SIZE;
char *old = nursery_section->scan_starts [idx];
if (!old || old > p)
nursery_section->scan_starts [idx] = p;
#if defined(__GNUC__)
__asm__ volatile ("" : "=r"(v) : "r"(v));
#elif defined(_MSC_VER)
- __asm {
- mov eax, v;
- and eax, eax;
- };
+ static volatile gpointer ptr;
+ ptr = v;
#else
#error "Implement sgen_dummy_use for your compiler"
#endif
typedef struct _LOSSection LOSSection;
struct _LOSSection {
LOSSection *next;
- int num_free_chunks;
+ size_t num_free_chunks;
unsigned char *free_chunk_map;
};
static void
add_free_chunk (LOSFreeChunks *free_chunks, size_t size)
{
- int num_chunks = size >> LOS_CHUNK_BITS;
+ size_t num_chunks = size >> LOS_CHUNK_BITS;
free_chunks->size = size;
{
LOSFreeChunks *free_chunks = NULL;
LOSSection *section;
- int num_chunks, i, start_index;
+ size_t i, num_chunks, start_index;
+
g_assert ((size & (LOS_CHUNK_SIZE - 1)) == 0);
{
LOSSection *section;
LOSFreeChunks *free_chunks;
- int num_chunks;
+ size_t num_chunks;
size += LOS_CHUNK_SIZE - 1;
size &= ~(LOS_CHUNK_SIZE - 1);
if (num_chunks >= LOS_NUM_FAST_SIZES) {
free_chunks = get_from_size_list (&los_fast_free_lists [0], size);
} else {
- int i;
+ size_t i;
for (i = num_chunks; i < LOS_NUM_FAST_SIZES; ++i) {
free_chunks = get_from_size_list (&los_fast_free_lists [i], size);
if (free_chunks)
free_los_section_memory (LOSObject *obj, size_t size)
{
LOSSection *section = LOS_SECTION_FOR_OBJ (obj);
- int num_chunks, i, start_index;
+ size_t num_chunks, i, start_index;
size += LOS_CHUNK_SIZE - 1;
size &= ~(LOS_CHUNK_SIZE - 1);
struct _MSBlockInfo {
int obj_size;
int obj_size_index;
- int pin_queue_num_entries;
+ size_t pin_queue_num_entries;
unsigned int pinned : 1;
unsigned int has_references : 1;
unsigned int has_pinned : 1; /* means cannot evacuate */
#define MS_BLOCK_FOR_OBJ(o) (((MSBlockHeader*)MS_BLOCK_DATA_FOR_OBJ ((o)))->info)
#endif
-#define MS_BLOCK_OBJ_INDEX(o,b) (((char*)(o) - ((b)->block + MS_BLOCK_SKIP)) / (b)->obj_size)
+/* object index will always be small */
+#define MS_BLOCK_OBJ_INDEX(o,b) ((int)(((char*)(o) - ((b)->block + MS_BLOCK_SKIP)) / (b)->obj_size))
+//casting to int is fine since blocks are 32k
#define MS_CALC_MARK_BIT(w,b,o) do { \
- int i = ((char*)(o) - MS_BLOCK_DATA_FOR_OBJ ((o))) >> SGEN_ALLOC_ALIGN_BITS; \
+ int i = ((int)((char*)(o) - MS_BLOCK_DATA_FOR_OBJ ((o)))) >> SGEN_ALLOC_ALIGN_BITS; \
if (sizeof (mword) == 4) { \
(w) = i >> 5; \
(b) = i & 31; \
} \
} while (0)
-#define MS_MARK_BIT(bl,w,b) ((bl)->mark_words [(w)] & (1L << (b)))
-#define MS_SET_MARK_BIT(bl,w,b) ((bl)->mark_words [(w)] |= (1L << (b)))
+#define MS_MARK_BIT(bl,w,b) ((bl)->mark_words [(w)] & (ONE_P << (b)))
+#define MS_SET_MARK_BIT(bl,w,b) ((bl)->mark_words [(w)] |= (ONE_P << (b)))
#define MS_PAR_SET_MARK_BIT(was_marked,bl,w,b) do { \
mword __old = (bl)->mark_words [(w)]; \
- mword __bitmask = 1L << (b); \
+ mword __bitmask = ONE_P << (b); \
if (__old & __bitmask) { \
was_marked = TRUE; \
break; \
#endif
static gboolean *evacuate_block_obj_sizes;
-static float evacuation_threshold = 0.666;
+static float evacuation_threshold = 0.666f;
#ifdef SGEN_HAVE_CONCURRENT_MARK
-static float concurrent_evacuation_threshold = 0.666;
+static float concurrent_evacuation_threshold = 0.666f;
static gboolean want_evacuation = FALSE;
#endif
#else
/* non-allocated block free-list */
static void *empty_blocks = NULL;
-static int num_empty_blocks = 0;
+static size_t num_empty_blocks = 0;
#endif
#define FOREACH_BLOCK(bl) for ((bl) = all_blocks; (bl); (bl) = (bl)->next) {
#define END_FOREACH_BLOCK }
-static int num_major_sections = 0;
+static size_t num_major_sections = 0;
/* one free block list for each block object size */
static MSBlockInfo **free_block_lists [MS_BLOCK_TYPE_MAX];
sweep_block (MSBlockInfo *block, gboolean during_major_collection);
static int
-ms_find_block_obj_size_index (int size)
+ms_find_block_obj_size_index (size_t size)
{
int i;
SGEN_ASSERT (9, size <= SGEN_MAX_SMALL_OBJ_SIZE, "size %d is bigger than max small object size %d", size, SGEN_MAX_SMALL_OBJ_SIZE);
p += MS_BLOCK_SIZE;
}
- SGEN_ATOMIC_ADD (num_empty_blocks, alloc_num);
+ SGEN_ATOMIC_ADD_P (num_empty_blocks, alloc_num);
stat_major_blocks_alloced += alloc_num;
#if SIZEOF_VOID_P != 8
next = *(void**)block;
} while (SGEN_CAS_PTR (&empty_blocks, next, empty) != empty);
- SGEN_ATOMIC_ADD (num_empty_blocks, -1);
+ SGEN_ATOMIC_ADD_P (num_empty_blocks, -1);
*(void**)block = NULL;
*(void**)block = empty;
} while (SGEN_CAS_PTR (&empty_blocks, block, empty) != empty);
- SGEN_ATOMIC_ADD (num_empty_blocks, 1);
+ SGEN_ATOMIC_ADD_P (num_empty_blocks, 1);
}
#endif
{
#ifndef FIXED_HEAP
void *p;
- int i = 0;
+ size_t i = 0;
for (p = empty_blocks; p; p = *(void**)p)
++i;
g_assert (i == num_empty_blocks);
}
static void*
-major_par_alloc_object (MonoVTable *vtable, int size, gboolean has_references)
+major_par_alloc_object (MonoVTable *vtable, size_t size, gboolean has_references)
{
return alloc_obj_par (vtable, size, FALSE, has_references);
}
#endif
static void*
-alloc_obj (MonoVTable *vtable, int size, gboolean pinned, gboolean has_references)
+alloc_obj (MonoVTable *vtable, size_t size, gboolean pinned, gboolean has_references)
{
int size_index = MS_BLOCK_OBJ_SIZE_INDEX (size);
MSBlockInfo **free_blocks = FREE_BLOCKS (pinned, has_references);
}
static void*
-major_alloc_object (MonoVTable *vtable, int size, gboolean has_references)
+major_alloc_object (MonoVTable *vtable, size_t size, gboolean has_references)
{
return alloc_obj (vtable, size, FALSE, has_references);
}
major_alloc_degraded (MonoVTable *vtable, size_t size)
{
void *obj;
- int old_num_sections;
+ size_t old_num_sections;
old_num_sections = num_major_sections;
int last_size = 0;
do {
- int target_count = ceil (MS_BLOCK_FREE / target_size);
+ int target_count = (int)ceil (MS_BLOCK_FREE / target_size);
int size = MIN ((MS_BLOCK_FREE / target_count) & ~(SGEN_ALLOC_ALIGN - 1), SGEN_MAX_SMALL_OBJ_SIZE);
if (size != last_size) {
}
/* only valid during minor collections */
-static int old_num_major_sections;
+static mword old_num_major_sections;
static void
major_start_nursery_collection (void)
major_have_computer_minor_collection_allowance (void)
{
#ifndef FIXED_HEAP
- int section_reserve = sgen_get_minor_collection_allowance () / MS_BLOCK_SIZE;
+ size_t section_reserve = sgen_get_minor_collection_allowance () / MS_BLOCK_SIZE;
g_assert (have_swept);
return size;
}
-static int
+static size_t
get_num_major_sections (void)
{
return num_major_sections;
fprintf (stderr, "evacuation-threshold must be an integer in the range 0-100.\n");
exit (1);
}
- evacuation_threshold = (float)percentage / 100.0;
+ evacuation_threshold = (float)percentage / 100.0f;
return TRUE;
} else if (!strcmp (opt, "lazy-sweep")) {
lazy_sweep = TRUE;
base = sgen_card_table_align_pointer (obj);
while (obj < end) {
- int card_offset;
+ size_t card_offset;
if (!block->swept)
sweep_block (block, FALSE);
card_data_end = card_data + CARDS_PER_BLOCK;
for (card_data = initial_skip_card (card_data); card_data < card_data_end; ++card_data) { //card_data = skip_card (card_data + 1, card_data_end)) {
- int index;
- int idx = card_data - card_base;
+ size_t index;
+ size_t idx = card_data - card_base;
char *start = (char*)(block_start + idx * CARD_SIZE_IN_BYTES);
char *end = start + CARD_SIZE_IN_BYTES;
char *first_obj, *obj;
/* use this to tune when to do a major/minor collection */
static mword memory_pressure = 0;
static mword minor_collection_allowance;
-static int minor_collection_sections_alloced = 0;
+static mword minor_collection_sections_alloced = 0;
-static int last_major_num_sections = 0;
-static int last_los_memory_usage = 0;
+static mword last_major_num_sections = 0;
+static mword last_los_memory_usage = 0;
static gboolean need_calculate_minor_collection_allowance;
-static int last_collection_old_num_major_sections;
+static mword last_collection_old_num_major_sections;
static mword last_collection_los_memory_usage = 0;
static mword last_collection_old_los_memory_usage;
static mword last_collection_los_memory_alloced;
static void
sgen_memgov_try_calculate_minor_collection_allowance (gboolean overwrite)
{
- int num_major_sections, num_major_sections_saved;
+ size_t num_major_sections, num_major_sections_saved;
mword los_memory_saved, new_major, new_heap_size, save_target, allowance_target;
if (overwrite)
log_timming (GGTimingInfo *info)
{
//unsigned long stw_time, unsigned long bridge_time, gboolean is_overflow
- int num_major_sections = major_collector.get_num_major_sections ();
+ mword num_major_sections = major_collector.get_num_major_sections ();
char full_timing_buff [1024];
full_timing_buff [0] = '\0';
}
void
-sgen_register_major_sections_alloced (int num_sections)
+sgen_register_major_sections_alloced (size_t num_sections)
{
minor_collection_sections_alloced += num_sections;
}
g_assert (!(flags & ~SGEN_ALLOC_HEAP));
mono_vfree (addr, size);
- SGEN_ATOMIC_ADD_P (total_alloc, -size);
+ SGEN_ATOMIC_ADD_P (total_alloc, -(gssize)size);
if (flags & SGEN_ALLOC_HEAP)
MONO_GC_HEAP_FREE ((mword)addr, size);
}
void
sgen_memgov_release_space (mword size, int space)
{
- SGEN_ATOMIC_ADD_P (allocated_heap, -size);
+ SGEN_ATOMIC_ADD_P (allocated_heap, -(gssize)size);
}
gboolean
void sgen_memgov_collection_start (int generation) MONO_INTERNAL;
void sgen_memgov_collection_end (int generation, GGTimingInfo* info, int info_count) MONO_INTERNAL;
-void sgen_register_major_sections_alloced (int num_sections) MONO_INTERNAL;
+void sgen_register_major_sections_alloced (size_t num_sections) MONO_INTERNAL;
mword sgen_get_minor_collection_allowance (void) MONO_INTERNAL;
gboolean sgen_need_major_collection (mword space_needed) MONO_INTERNAL;
return da->array.size;
}
+#ifdef NEW_XREFS
static void
dyn_array_int_empty (DynIntArray *da)
{
dyn_array_empty (&da->array);
}
+#endif
static void
dyn_array_int_add (DynIntArray *da, int x)
return ((int*)da->array.data)[x];
}
+#ifdef NEW_XREFS
static void
dyn_array_int_set (DynIntArray *da, int idx, int val)
{
((int*)da->array.data)[idx] = val;
}
-
-static void
-dyn_array_int_ensure_capacity (DynIntArray *da, int capacity)
-{
- dyn_array_ensure_capacity (&da->array, capacity, sizeof (int));
-}
+#endif
static void
dyn_array_int_ensure_independent (DynIntArray *da)
static DynIntArray merge_array;
+#ifdef NEW_XREFS
static gboolean
dyn_array_int_contains (DynIntArray *da, int x)
{
return TRUE;
return FALSE;
}
+#endif
static void
enable_accounting (void)
{
+ SgenHashTable table = SGEN_HASH_TABLE_INIT (INTERNAL_MEM_BRIDGE_HASH_TABLE, INTERNAL_MEM_BRIDGE_HASH_TABLE_ENTRY, sizeof (HashEntryWithAccounting), mono_aligned_addr_hash, NULL);
bridge_accounting_enabled = TRUE;
- hash_table = (SgenHashTable)SGEN_HASH_TABLE_INIT (INTERNAL_MEM_BRIDGE_HASH_TABLE, INTERNAL_MEM_BRIDGE_HASH_TABLE_ENTRY, sizeof (HashEntryWithAccounting), mono_aligned_addr_hash, NULL);
+ hash_table = table;
}
static MonoGCBridgeObjectKind
MonoObject *obj;
HashEntry *entry;
- int prefix_len = strlen (dump_prefix);
- char filename [prefix_len + 64];
+ size_t prefix_len = strlen (dump_prefix);
+ char *filename = alloca(prefix_len + 64);
FILE *file;
int edge_id = 0;
#endif
char *sgen_space_bitmap MONO_INTERNAL;
-int sgen_space_bitmap_size MONO_INTERNAL;
+size_t sgen_space_bitmap_size MONO_INTERNAL;
#ifdef HEAVY_STATISTICS
/*frag->next read must happen before the first CAS*/
mono_memory_write_barrier ();
- /*Fail if the next done is removed concurrently and its CAS wins */
+ /*Fail if the next node is removed concurrently and its CAS wins */
if (InterlockedCompareExchangePointer ((volatile gpointer*)&frag->next, mask (next, 1), next) != next) {
continue;
}
mono_memory_write_barrier ();
/* Fail if the previous node was deleted and its CAS wins */
- if (InterlockedCompareExchangePointer ((volatile gpointer*)prev_ptr, next, frag) != frag) {
+ if (InterlockedCompareExchangePointer ((volatile gpointer*)prev_ptr, unmask (next), frag) != frag) {
prev_ptr = find_previous_pointer_fragment (allocator, frag);
continue;
}
for (frag = unmask (allocator->alloc_head); unmask (frag); frag = unmask (frag->next)) {
HEAVY_STAT (InterlockedIncrement (&stat_alloc_iterations));
- if (size <= (frag->fragment_end - frag->fragment_next)) {
+ if (size <= (size_t)(frag->fragment_end - frag->fragment_next)) {
void *p = par_alloc_from_fragment (allocator, frag, size);
if (!p) {
HEAVY_STAT (InterlockedIncrement (&stat_alloc_retries));
#endif
for (frag = unmask (allocator->alloc_head); frag; frag = unmask (frag->next)) {
- int frag_size = frag->fragment_end - frag->fragment_next;
+ size_t frag_size = frag->fragment_end - frag->fragment_next;
HEAVY_STAT (InterlockedIncrement (&stat_alloc_range_iterations));
if (min_frag) {
void *p;
- int frag_size;
+ size_t frag_size;
frag_size = min_frag->fragment_end - min_frag->fragment_next;
if (frag_size < minimum_size)
/* Mark this as not a real object */
o->obj.synchronisation = GINT_TO_POINTER (-1);
o->bounds = NULL;
- o->max_length = size - sizeof (MonoArray);
+ o->max_length = (mono_array_size_t)(size - sizeof (MonoArray));
sgen_set_nursery_scan_start (start);
g_assert (start + sgen_safe_object_get_size ((MonoObject*)o) == end);
}
}
mword
-sgen_build_nursery_fragments (GCMemSection *nursery_section, void **start, int num_entries, SgenGrayQueue *unpin_queue)
+sgen_build_nursery_fragments (GCMemSection *nursery_section, void **start, size_t num_entries, SgenGrayQueue *unpin_queue)
{
char *frag_start, *frag_end;
size_t frag_size;
- int i = 0;
+ size_t i = 0;
SgenFragment *frags_ranges;
#ifdef NALLOC_DEBUG
sgen_minor_collector.build_fragments_finish (&mutator_allocator);
if (!unmask (mutator_allocator.alloc_head)) {
- SGEN_LOG (1, "Nursery fully pinned (%d)", num_entries);
+ SGEN_LOG (1, "Nursery fully pinned (%zd)", num_entries);
for (i = 0; i < num_entries; ++i) {
- SGEN_LOG (3, "Bastard pinning obj %p (%s), size: %d", start [i], sgen_safe_name (start [i]), sgen_safe_object_get_size (start [i]));
+ SGEN_LOG (3, "Bastard pinning obj %p (%s), size: %zd", start [i], sgen_safe_name (start [i]), sgen_safe_object_get_size (start [i]));
}
}
return fragment_total;
size = SGEN_ALIGN_UP (size);
for (frag = unmask (mutator_allocator.alloc_head); frag; frag = unmask (frag->next)) {
- if ((frag->fragment_end - frag->fragment_next) >= size)
+ if ((size_t)(frag->fragment_end - frag->fragment_next) >= size)
return TRUE;
}
return FALSE;
sgen_nursery_start = start;
sgen_nursery_end = end;
- sgen_space_bitmap_size = (end - start) / (SGEN_TO_SPACE_GRANULE_IN_BYTES * 8);
+ /*
+ * This will not divide evenly for tiny nurseries (<4kb), so we make sure to be on
+ * the right side of things and round up. We could just do a MIN(1,x) instead,
+ * since the nursery size must be a power of 2.
+ */
+ sgen_space_bitmap_size = (end - start + SGEN_TO_SPACE_GRANULE_IN_BYTES * 8 - 1) / (SGEN_TO_SPACE_GRANULE_IN_BYTES * 8);
sgen_space_bitmap = g_malloc0 (sgen_space_bitmap_size);
/* Setup the single first large fragment */
static void
enable_accounting (void)
{
+ SgenHashTable table = SGEN_HASH_TABLE_INIT (INTERNAL_MEM_BRIDGE_HASH_TABLE, INTERNAL_MEM_BRIDGE_HASH_TABLE_ENTRY, sizeof (HashEntryWithAccounting), mono_aligned_addr_hash, NULL);
bridge_accounting_enabled = TRUE;
- hash_table = (SgenHashTable)SGEN_HASH_TABLE_INIT (INTERNAL_MEM_BRIDGE_HASH_TABLE, INTERNAL_MEM_BRIDGE_HASH_TABLE_ENTRY, sizeof (HashEntryWithAccounting), mono_aligned_addr_hash, NULL);
+ hash_table = table;
}
static MonoGCBridgeObjectKind
#include "metadata/sgen-protocol.h"
static void** pin_queue;
-static int pin_queue_size = 0;
-static int next_pin_slot = 0;
-static int last_num_pinned = 0;
+static size_t pin_queue_size = 0;
+static size_t next_pin_slot = 0;
+static size_t last_num_pinned = 0;
#define PIN_HASH_SIZE 1024
static void *pin_hash_filter [PIN_HASH_SIZE];
static void
realloc_pin_queue (void)
{
- int new_size = pin_queue_size? pin_queue_size + pin_queue_size/2: 1024;
+ size_t new_size = pin_queue_size? pin_queue_size + pin_queue_size/2: 1024;
void **new_pin = sgen_alloc_internal_dynamic (sizeof (void*) * new_size, INTERNAL_MEM_PIN_QUEUE, TRUE);
memcpy (new_pin, pin_queue, sizeof (void*) * next_pin_slot);
sgen_free_internal_dynamic (pin_queue, sizeof (void*) * pin_queue_size, INTERNAL_MEM_PIN_QUEUE);
pin_queue = new_pin;
pin_queue_size = new_size;
- SGEN_LOG (4, "Reallocated pin queue to size: %d", new_size);
+ SGEN_LOG (4, "Reallocated pin queue to size: %zd", new_size);
}
void
pin_queue [next_pin_slot++] = ptr;
}
-static int
+static size_t
optimized_pin_queue_search (void *addr)
{
- int first = 0, last = next_pin_slot;
+ size_t first = 0, last = next_pin_slot;
while (first < last) {
- int middle = first + ((last - first) >> 1);
+ size_t middle = first + ((last - first) >> 1);
if (addr <= pin_queue [middle])
last = middle;
else
}
void**
-sgen_find_optimized_pin_queue_area (void *start, void *end, int *num)
+sgen_find_optimized_pin_queue_area (void *start, void *end, size_t *num)
{
- int first, last;
+ size_t first, last;
first = optimized_pin_queue_search (start);
last = optimized_pin_queue_search (end);
*num = last - first;
{
SGEN_LOG (6, "Pinning from section %p (%p-%p)", section, section->data, section->end_data);
section->pin_queue_start = sgen_find_optimized_pin_queue_area (section->data, section->end_data, §ion->pin_queue_num_entries);
- SGEN_LOG (6, "Found %d pinning addresses in section %p", section->pin_queue_num_entries, section);
+ SGEN_LOG (6, "Found %zd pinning addresses in section %p", section->pin_queue_num_entries, section);
}
/*This will setup the given section for the while pin queue. */
}
void
-sgen_pin_queue_clear_discarded_entries (GCMemSection *section, int max_pin_slot)
+sgen_pin_queue_clear_discarded_entries (GCMemSection *section, size_t max_pin_slot)
{
void **start = section->pin_queue_start + section->pin_queue_num_entries;
void **end = pin_queue + max_pin_slot;
/* reduce the info in the pin queue, removing duplicate pointers and sorting them */
void
-sgen_optimize_pin_queue (int start_slot)
+sgen_optimize_pin_queue (size_t start_slot)
{
void **start, **cur, **end;
/* sort and uniq pin_queue: we just sort and we let the rest discard multiple values */
/* it may be better to keep ranges of pinned memory instead of individually pinning objects */
- SGEN_LOG (5, "Sorting pin queue, size: %d", next_pin_slot);
+ SGEN_LOG (5, "Sorting pin queue, size: %zd", next_pin_slot);
if ((next_pin_slot - start_slot) > 1)
sgen_sort_addresses (pin_queue + start_slot, next_pin_slot - start_slot);
start = cur = pin_queue + start_slot;
start++;
};
next_pin_slot = start - pin_queue;
- SGEN_LOG (5, "Pin queue reduced to size: %d", next_pin_slot);
+ SGEN_LOG (5, "Pin queue reduced to size: %zd", next_pin_slot);
}
-int
+size_t
sgen_get_pinned_count (void)
{
return next_pin_slot;
int i;
for (i = 0; i < last_num_pinned; ++i) {
- SGEN_LOG (3, "Bastard pinning obj %p (%s), size: %d", pin_queue [i], sgen_safe_name (pin_queue [i]), sgen_safe_object_get_size (pin_queue [i]));
+ SGEN_LOG (3, "Bastard pinning obj %p (%s), size: %zd", pin_queue [i], sgen_safe_name (pin_queue [i]), sgen_safe_object_get_size (pin_queue [i]));
}
}
vt->klass->name_space, vt->klass->name);
}
binary_protocol_cement (obj, (gpointer)SGEN_LOAD_VTABLE (obj),
- sgen_safe_object_get_size ((MonoObject*)obj));
+ (int)sgen_safe_object_get_size ((MonoObject*)obj));
}
return FALSE;
};
void sgen_pin_stage_ptr (void *ptr) MONO_INTERNAL;
-void sgen_optimize_pin_queue (int start_slot) MONO_INTERNAL;
+void sgen_optimize_pin_queue (size_t start_slot) MONO_INTERNAL;
void sgen_init_pinning (void) MONO_INTERNAL;
void sgen_finish_pinning (void) MONO_INTERNAL;
-void sgen_pin_queue_clear_discarded_entries (GCMemSection *section, int max_pin_slot) MONO_INTERNAL;
-int sgen_get_pinned_count (void) MONO_INTERNAL;
+void sgen_pin_queue_clear_discarded_entries (GCMemSection *section, size_t max_pin_slot) MONO_INTERNAL;
+size_t sgen_get_pinned_count (void) MONO_INTERNAL;
void sgen_pinning_setup_section (GCMemSection *section) MONO_INTERNAL;
void sgen_pinning_trim_queue_to_section (GCMemSection *section) MONO_INTERNAL;
}
static void
-prepare_to_space (char *to_space_bitmap, int space_bitmap_size)
+prepare_to_space (char *to_space_bitmap, size_t space_bitmap_size)
{
}
static char *region_age;
-static int region_age_size;
+static size_t region_age_size;
static AgeAllocationBuffer age_alloc_buffers [MAX_AGE];
/* The collector allocs from here. */
static inline int
get_object_age (char *object)
{
- int idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
+ size_t idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
return region_age [idx];
}
static inline void
set_object_age (char *object, int age)
{
- int idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
+ size_t idx = (object - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
region_age [idx] = age;
}
set_age_in_range (char *start, char *end, int age)
{
char *region_start;
- int region_idx, length;
+ size_t region_idx, length;
region_idx = (start - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
region_start = ®ion_age [region_idx];
length = (end - start) >> SGEN_TO_SPACE_GRANULE_BITS;
static inline void
mark_bit (char *space_bitmap, char *pos)
{
- int idx = (pos - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
- int byte = idx / 8;
+ size_t idx = (pos - sgen_nursery_start) >> SGEN_TO_SPACE_GRANULE_BITS;
+ size_t byte = idx / 8;
int bit = idx & 0x7;
g_assert (byte < sgen_space_bitmap_size);
}
static void
-prepare_to_space (char *to_space_bitmap, int space_bitmap_size)
+prepare_to_space (char *to_space_bitmap, size_t space_bitmap_size)
{
SgenFragment **previous, *frag;
/* private */
-static void
-dyn_array_init (DynArray *da)
-{
- da->size = 0;
- da->capacity = 0;
- da->data = NULL;
-}
-
static void
dyn_array_uninit (DynArray *da, int elem_size)
{
/* ptr */
-static void
-dyn_array_ptr_init (DynPtrArray *da)
-{
- dyn_array_init (&da->array);
-}
-
static void
dyn_array_ptr_uninit (DynPtrArray *da)
{
static void
free_color_buckets (void)
{
- color_data_count = 0;
-
ColorBucket *cur, *tmp;
+ color_data_count = 0;
+
for (cur = root_color_bucket; cur; cur = tmp) {
ColorData *cd;
for (cd = &cur->data [0]; cd < cur->next_data; ++cd) {
return fwd ? fwd : obj;
}
+#ifdef DUMP_GRAPH
static const char*
safe_name_bridge (MonoObject *obj)
{
entry = create_data (obj);
return entry;
}
-
+#endif
//----------
typedef struct {
static int
mix_hash (size_t hash)
{
- return ((hash * 215497) >> 16) ^ (hash * 1823231) + hash;
+ return (int)(((hash * 215497) >> 16) ^ ((hash * 1823231) + hash));
}
static void
num_colors_with_bridges = 0;
}
+#ifdef DUMP_GRAPH
static void
dump_color_table (const char *why, gboolean do_index)
{
}
}
+#endif
static gint64
step_timer (gint64 *timer)
}
}
-static mono_bool
-is_bridge_object_alive (MonoObject *obj, void *data)
-{
- SgenHashTable *table = data;
- unsigned char *value = sgen_hash_table_lookup (table, obj);
- if (!value)
- return TRUE;
- return *value;
-}
-
static void
processing_build_callback_data (int generation)
{
MonoNativeThreadId tid;
guint32 create_flags;
+ /*
+ * Join joinable threads to prevent running out of threads since the finalizer
+ * thread might be blocked/backlogged.
+ */
+ mono_threads_join_threads ();
+
mono_threads_lock ();
if (shutting_down) {
g_free (start_info);
continue;
/* Re-calculate ms according to the time passed */
- diff_ms = (mono_100ns_ticks () - start) / 10000;
+ diff_ms = (gint32)((mono_100ns_ticks () - start) / 10000);
if (diff_ms >= ms) {
ret = WAIT_TIMEOUT;
break;
/* Do this WaitSleepJoin check before creating objects */
mono_thread_current_check_pending_interrupt ();
- numhandles = mono_array_length(mono_handles);
+ /* We fail in managed if the array has more than 64 elements */
+ numhandles = (guint32)mono_array_length(mono_handles);
handles = g_new0(HANDLE, numhandles);
for(i = 0; i < numhandles; i++) {
gint32 ves_icall_System_Threading_WaitHandle_WaitAny_internal(MonoArray *mono_handles, gint32 ms, gboolean exitContext)
{
HANDLE handles [MAXIMUM_WAIT_OBJECTS];
- guint32 numhandles;
+ uintptr_t numhandles;
guint32 ret;
guint32 i;
MonoObject *waitHandle;
}
#ifdef HOST_WIN32
- QueueUserAPC ((PAPCFUNC)interruption_request_apc, thread->handle, NULL);
+ QueueUserAPC ((PAPCFUNC)interruption_request_apc, thread->handle, (ULONG_PTR)NULL);
#else
/*
* This will cause waits to be broken.
return NULL;
}
+#if SIZEOF_VOID_P == 4
+#define ONE_P 1
+#else
+#define ONE_P 1ll
+#endif
+
static void
update_tls_reference_bitmap (guint32 offset, uintptr_t *bitmap, int numbits)
{
offset /= sizeof (gpointer);
/* offset is now the bitmap offset */
for (i = 0; i < numbits; ++i) {
- if (bitmap [i / sizeof (uintptr_t)] & (1L << (i & (sizeof (uintptr_t) * 8 -1))))
- rb [(offset + i) / (sizeof (uintptr_t) * 8)] |= (1L << ((offset + i) & (sizeof (uintptr_t) * 8 -1)));
+ if (bitmap [i / sizeof (uintptr_t)] & (ONE_P << (i & (sizeof (uintptr_t) * 8 -1))))
+ rb [(offset + i) / (sizeof (uintptr_t) * 8)] |= (ONE_P << ((offset + i) & (sizeof (uintptr_t) * 8 -1)));
}
}
or similar */
/* Our implementation of this function ignores the func argument */
#ifdef HOST_WIN32
- QueueUserAPC ((PAPCFUNC)dummy_apc, thread->handle, NULL);
+ QueueUserAPC ((PAPCFUNC)dummy_apc, thread->handle, (ULONG_PTR)NULL);
#else
wapi_self_interrupt ();
#endif
mono_thread_info_setup_async_call (info, self_interrupt_thread, NULL);
mono_thread_info_finish_suspend_and_resume (info);
} else {
- gpointer interrupt_handle;
/*
* This will cause waits to be broken.
* It will also prevent the thread from entering a wait, so if the thread returns
* make it return.
*/
#ifndef HOST_WIN32
+ gpointer interrupt_handle;
interrupt_handle = wapi_prepare_interrupt_thread (thread->handle);
#endif
mono_thread_info_finish_suspend_and_resume (info);
if (running_managed && !protected_wrapper) {
transition_to_suspended (thread, info);
} else {
+#ifndef HOST_WIN32
gpointer interrupt_handle;
+#endif
if (InterlockedCompareExchange (&thread->interruption_requested, 1, 0) == 0)
InterlockedIncrement (&thread_interruption_requested);
#ifdef ENABLE_VERIFIER_STATS
-#define MEM_ALLOC(amt) do { allocated_memory += (amt); working_set += (amt); } while (0)
-#define MEM_FREE(amt) do { working_set -= (amt); } while (0)
+#define _MEM_ALLOC(amt) do { allocated_memory += (amt); working_set += (amt); } while (0)
+#define _MEM_FREE(amt) do { working_set -= (amt); } while (0)
static int allocated_memory;
static int working_set;
#else
-#define MEM_ALLOC(amt) do {} while (0)
-#define MEM_FREE(amt) do { } while (0)
+#define _MEM_ALLOC(amt) do {} while (0)
+#define _MEM_FREE(amt) do { } while (0)
#define finish_collect_stats()
#define init_verifier_stats()
mono_type_create_fnptr_from_mono_method (VerifyContext *ctx, MonoMethod *method)
{
MonoType *res = g_new0 (MonoType, 1);
- MEM_ALLOC (sizeof (MonoType));
+ _MEM_ALLOC (sizeof (MonoType));
//FIXME use mono_method_get_signature_full
res->data.method = mono_method_signature (method);
g_assert (new_size >= required);
tmp = g_new0 (ILStackDesc, new_size);
- MEM_ALLOC (sizeof (ILStackDesc) * new_size);
+ _MEM_ALLOC (sizeof (ILStackDesc) * new_size);
if (stack->stack) {
if (stack->size)
memcpy (tmp, stack->stack, stack->size * sizeof (ILStackDesc));
g_free (stack->stack);
- MEM_FREE (sizeof (ILStackDesc) * stack->max_size);
+ _MEM_FREE (sizeof (ILStackDesc) * stack->max_size);
}
stack->stack = tmp;
if (constrained && virtual) {
if (!stack_slot_is_managed_pointer (value))
CODE_NOT_VERIFIABLE (ctx, g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", ctx->ip_offset));
- if (!mono_metadata_type_equal_full (mono_type_get_type_byval (value->type), ctx->constrained_type, TRUE))
+ if (!mono_metadata_type_equal_full (mono_type_get_type_byval (value->type), mono_type_get_underlying_type (ctx->constrained_type), TRUE))
CODE_NOT_VERIFIABLE (ctx, g_strdup_printf ("Object not compatible with constrained type at 0x%04x", ctx->ip_offset));
copy.stype |= BOXED_MASK;
+ copy.type = ctx->constrained_type;
} else {
if (stack_slot_is_managed_pointer (value) && !mono_class_from_mono_type (value->type)->valuetype)
CODE_NOT_VERIFIABLE (ctx, g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", ctx->ip_offset));
ctx.code = g_new (ILCodeDesc, ctx.header->code_size);
ctx.code_size = ctx.header->code_size;
- MEM_ALLOC (sizeof (ILCodeDesc) * ctx.header->code_size);
+ _MEM_ALLOC (sizeof (ILCodeDesc) * ctx.header->code_size);
memset(ctx.code, 0, sizeof (ILCodeDesc) * ctx.header->code_size);
ctx.num_locals = ctx.header->num_locals;
ctx.locals = g_memdup (ctx.header->locals, sizeof (MonoType*) * ctx.header->num_locals);
- MEM_ALLOC (sizeof (MonoType*) * ctx.header->num_locals);
+ _MEM_ALLOC (sizeof (MonoType*) * ctx.header->num_locals);
if (ctx.num_locals > 0 && !ctx.header->init_locals)
CODE_NOT_VERIFIABLE (&ctx, g_strdup_printf ("Method with locals variable but without init locals set"));
ctx.params = g_new (MonoType*, ctx.max_args);
- MEM_ALLOC (sizeof (MonoType*) * ctx.max_args);
+ _MEM_ALLOC (sizeof (MonoType*) * ctx.max_args);
if (ctx.signature->hasthis)
ctx.params [0] = method->klass->valuetype ? &method->klass->this_arg : &method->klass->byval_arg;
while (ip < end && ctx.valid) {
int op_size;
- ip_offset = ip - code_start;
+ ip_offset = (guint) (ip - code_start);
{
const unsigned char *ip_copy = ip;
int op;
}
}
- ctx.ip_offset = ip_offset = ip - code_start;
+ ctx.ip_offset = ip_offset = (guint) (ip - code_start);
/*We need to check against fallthrou in and out of protected blocks.
* For fallout we check the once a protected block ends, if the start flag is not set.
fprintf (acfg->fp, " .no_dead_strip %s\n", symbol);
for (i = 0; i < acfg->nmethods; ++i) {
+#ifdef MONO_ARCH_AOT_SUPPORTED
int call_size;
-#ifdef MONO_ARCH_AOT_SUPPORTED
if (acfg->cfgs [i])
arch_emit_direct_call (acfg, acfg->cfgs [i]->asm_symbol, FALSE, acfg->thumb_mixed && acfg->cfgs [i]->compile_llvm, NULL, &call_size);
else
method = cfg->orig_method;
if (acfg->aot_opts.full_aot && cfg->orig_method->klass->valuetype) {
+#ifdef MONO_ARCH_AOT_SUPPORTED
int call_size;
+#endif
index = get_method_index (acfg, method);
sprintf (symbol, "ut_%d", index);
method = mono_get_method (image, token, NULL);
if (method) {
char *name = mono_method_full_name (method, TRUE);
- printf ("LAST AOT METHOD: %s.\n", name);
+ g_print ("LAST AOT METHOD: %s.\n", name);
g_free (name);
} else {
- printf ("LAST AOT METHOD: %p %d\n", code, method_index);
+ g_print ("LAST AOT METHOD: %p %d\n", code, method_index);
}
}
}
return pass_bytes (0, 1, 2, 3, 4, 5, 6);
}
- static int pass_sbytes (sbyte a, sbyte b, sbyte c, sbyte d, sbyte e, sbyte f, sbyte g) {
- return (int)(a + b + c + d + e + f + g);
+ static int pass_sbytes (sbyte a, sbyte b, sbyte c, sbyte d, sbyte e, sbyte f, sbyte g, sbyte h1, sbyte h2, sbyte h3, sbyte h4) {
+ return (int)(a + b + c + d + e + f + g + h1 + h2 + h3 + h4);
}
- public static int test_21_sparc_sbyte_argument_passing () {
- return pass_sbytes (0, 1, 2, 3, 4, 5, 6);
+ public static int test_55_sparc_sbyte_argument_passing () {
+ return pass_sbytes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
}
static int pass_shorts (short a, short b, short c, short d, short e, short f, short g) {
jump_table: dest:i len:8
-atomic_cas_i4: src1:b src2:i src3:i dest:i len:30
+atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
atomic_add_new_i4: src1:b src2:i dest:i len:20
atomic_add_new_i8: src1:b src2:i dest:i len:20
-atomic_cas_i4: src1:b src2:i src3:i dest:i len:30
-atomic_cas_i8: src1:b src2:i src3:i dest:i len:30
+atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
+atomic_cas_i8: src1:b src2:i src3:i dest:i len:38
float_conv_to_i4: dest:i src1:f len:50
float_conv_to_i8: dest:l src1:f len:50
float_conv_to_i: dest:i src1:f len:52
-float_conv_to_r4: dest:f src1:f len:4
-float_conv_to_u1: dest:i src1:f len:66
-float_conv_to_u2: dest:i src1:f len:66
-float_conv_to_u4: dest:i src1:f len:66
-float_conv_to_u8: dest:i src1:f len:66
+float_conv_to_r4: dest:f src1:f len:8
+float_conv_to_u1: dest:i src1:f len:72
+float_conv_to_u2: dest:i src1:f len:72
+float_conv_to_u4: dest:i src1:f len:72
+float_conv_to_u8: dest:i src1:f len:72
float_conv_to_u: dest:i src1:f len:36
float_div: dest:f src1:f src2:f len:6
float_div_un: dest:f src1:f src2:f len:6
fmove: dest:f src1:f len:4
i8const: dest:i len:20
icompare: src1:i src2:i len:4
-icompare_imm: src1:i len:14
+icompare_imm: src1:i len:18
iconst: dest:i len:40
-
-
jmp: len:46
label: len:0
lcall: dest:o len:22 clob:c
lcall_membase: dest:o src1:b len:12 clob:c
lcall_reg: dest:o src1:i len:8 clob:c
lcompare: src1:i src2:i len:4
-load_membase: dest:i src1:b len:26
+load_membase: dest:i src1:b len:30
loadi1_membase: dest:i src1:b len:40
-loadi2_membase: dest:i src1:b len:26
-loadi4_membase: dest:i src1:b len:26
-loadi8_membase: dest:i src1:b len:26
+loadi2_membase: dest:i src1:b len:30
+loadi4_membase: dest:i src1:b len:30
+loadi8_membase: dest:i src1:b len:30
loadr4_membase: dest:f src1:b len:28
loadr8_membase: dest:f src1:b len:28
-loadu1_membase: dest:i src1:b len:26
-loadu2_membase: dest:i src1:b len:26
+loadu1_membase: dest:i src1:b len:30
+loadu2_membase: dest:i src1:b len:30
loadu4_mem: dest:i len:8
-loadu4_membase: dest:i src1:b len:26
+loadu4_membase: dest:i src1:b len:30
localloc: dest:i src1:i len:106
memory_barrier: len: 10
move: dest:i src1:i len:4
s390_setf4ret: dest:f src1:f len:4
sbb: dest:i src1:i src2:i len:6
sbb_imm: dest:i src1:i len:14
-seq_point: len:36
+seq_point: len:54
sext_i4: dest:i src1:i len:4
zext_i4: dest:i src1:i len:4
shl_imm: dest:i src1:i len:10
iconst: dest:i len:5
r4const: dest:f len:15
r8const: dest:f len:16
-store_membase_imm: dest:b len:10
+store_membase_imm: dest:b len:11
store_membase_reg: dest:b src1:i len:7
storei1_membase_imm: dest:b len:10
storei1_membase_reg: dest:b src1:y len:7
#ifdef HOST_WIN32
#ifdef _MSC_VER
#include <winsock2.h>
+#include <process.h>
#endif
#include <ws2tcpip.h>
#ifdef __GNUC__
MOD_KIND_STEP = 10,
MOD_KIND_ASSEMBLY_ONLY = 11,
MOD_KIND_SOURCE_FILE_ONLY = 12,
- MOD_KIND_TYPE_NAME_ONLY = 13
+ MOD_KIND_TYPE_NAME_ONLY = 13,
+ MOD_KIND_NONE = 14
} ModifierKind;
typedef enum {
static FILE *log_file;
/* Assemblies whose assembly load event has no been sent yet */
+/* Protected by the dbg lock */
static GPtrArray *pending_assembly_loads;
/* Whenever the debugger thread has exited */
static ReplyPacket reply_packets [128];
int nreply_packets;
+#define dbg_lock() EnterCriticalSection (&debug_mutex)
+#define dbg_unlock() LeaveCriticalSection (&debug_mutex)
+static CRITICAL_SECTION debug_mutex;
+
static void transport_init (void);
static void transport_connect (const char *address);
static gboolean transport_handshake (void);
void
mono_debugger_agent_init (void)
{
+ InitializeCriticalSection (&debug_mutex);
+
if (!agent_config.enabled)
return;
/* Maps objid -> ObjRef */
static GHashTable *objrefs;
+static GHashTable *obj_to_objref;
+/* Protected by the dbg lock */
+static MonoGHashTable *suspended_objs;
static void
free_objref (gpointer value)
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_GC_REGISTER_ROOT_FIXED (suspended_objs);
}
static void
objrefs = NULL;
}
-static GHashTable *obj_to_objref;
-static MonoGHashTable *suspended_objs;
-
/*
* Return an ObjRef for OBJ.
*/
if (obj == NULL)
return 0;
- mono_loader_lock ();
-
- if (!obj_to_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_GC_REGISTER_ROOT_FIXED (suspended_objs);
- }
-
if (suspend_count) {
/*
* Have to keep object refs created during suspensions alive for the duration of the suspension, so GCs during invokes don't collect them.
*/
+ dbg_lock ();
mono_g_hash_table_insert (suspended_objs, obj, NULL);
+ dbg_unlock ();
}
+
+ mono_loader_lock ();
/* FIXME: The tables can grow indefinitely */
static void
clear_suspended_objs (void)
{
- mono_loader_lock ();
+ dbg_lock ();
mono_g_hash_table_foreach_remove (suspended_objs, true_pred, NULL);
- mono_loader_unlock ();
+ dbg_unlock ();
}
static inline int
} AgentDomainInfo;
/* Maps id -> Id */
+/* Protected by the dbg lock */
static GPtrArray *ids [ID_NUM];
static void
domain_jit_info (domain)->agent_info = NULL;
/* Clear ids referencing structures in the domain */
+ dbg_lock ();
for (i = 0; i < ID_NUM; ++i) {
if (ids [i]) {
for (j = 0; j < ids [i]->len; ++j) {
}
}
}
+ dbg_unlock ();
mono_loader_lock ();
g_hash_table_remove (domains, domain);
return id->id;
}
+ dbg_lock ();
+
id = g_new0 (Id, 1);
/* Reserve id 0 */
id->id = ids [type]->len + 1;
id->data.val = val;
g_hash_table_insert (info->val_to_id [type], val, id);
+ g_ptr_array_add (ids [type], id);
- mono_domain_unlock (domain);
+ dbg_unlock ();
- g_ptr_array_add (ids [type], id);
+ mono_domain_unlock (domain);
mono_loader_unlock ();
return NULL;
// FIXME: error handling
- mono_loader_lock ();
+ dbg_lock ();
g_assert (id > 0 && id <= ids [type]->len);
res = g_ptr_array_index (ids [type], GPOINTER_TO_INT (id - 1));
- mono_loader_unlock ();
+ dbg_unlock ();
if (res->domain == NULL) {
DEBUG (0, fprintf (log_file, "ERR_UNLOADED, id=%d, type=%d.\n", id, type));
MonoInternalThread *thread = key;
DebuggerTlsData *tls = value;
gsize tid = thread->tid;
+#ifndef HOST_WIN32
int res;
+#endif
if (GetCurrentThreadId () == tid || tls->terminated)
return;
/* This is _not_ equivalent to ves_icall_System_Threading_Thread_Abort () */
#ifdef HOST_WIN32
- QueueUserAPC (notify_thread_apc, thread->handle, NULL);
+ QueueUserAPC (notify_thread_apc, thread->handle, (ULONG_PTR)NULL);
#else
if (mono_thread_info_new_interrupt_enabled ()) {
MonoThreadInfo *info;
static void
suspend_current (void)
{
+#ifndef HOST_WIN32
int err;
+#endif
DebuggerTlsData *tls;
g_assert (debugger_thread_id != GetCurrentThreadId ());
assembly_load (MonoProfiler *prof, MonoAssembly *assembly, int result)
{
/* Sent later in jit_end () */
- mono_loader_lock ();
+ dbg_lock ();
g_ptr_array_add (pending_assembly_loads, assembly);
- mono_loader_unlock ();
+ dbg_unlock ();
}
static void
MonoAssembly *assembly = NULL;
// FIXME: Maybe store this in TLS so the thread of the event is correct ?
- mono_loader_lock ();
+ dbg_lock ();
if (pending_assembly_loads->len > 0) {
assembly = g_ptr_array_index (pending_assembly_loads, 0);
g_ptr_array_remove_index (pending_assembly_loads, 0);
}
- mono_loader_unlock ();
+ dbg_unlock ();
if (assembly) {
process_profiler_event (EVENT_KIND_ASSEMBLY_LOAD, assembly);
g_ptr_array_add (bp->children, inst);
+ mono_loader_unlock ();
+
+ dbg_lock ();
count = GPOINTER_TO_INT (g_hash_table_lookup (bp_locs, inst->ip));
g_hash_table_insert (bp_locs, inst->ip, GINT_TO_POINTER (count + 1));
- mono_loader_unlock ();
+ dbg_unlock ();
if (sp->native_offset == SEQ_POINT_NATIVE_OFFSET_DEAD_CODE) {
DEBUG (1, fprintf (log_file, "[dbg] Attempting to insert seq point at dead IL offset %d, ignoring.\n", (int)bp->il_offset));
#endif
}
- DEBUG(1, fprintf (log_file, "[dbg] Inserted breakpoint at %s:0x%x.\n", mono_method_full_name (jinfo_get_method (ji), TRUE), (int)sp->il_offset));
+ DEBUG(1, fprintf (log_file, "[dbg] Inserted breakpoint at %s:0x%x [%p](%d).\n", mono_method_full_name (jinfo_get_method (ji), TRUE), (int)sp->il_offset, inst->ip, count));
}
static void
MonoJitInfo *ji = inst->ji;
guint8 *ip = inst->ip;
- mono_loader_lock ();
+ dbg_lock ();
count = GPOINTER_TO_INT (g_hash_table_lookup (bp_locs, ip));
g_hash_table_insert (bp_locs, ip, GINT_TO_POINTER (count - 1));
- mono_loader_unlock ();
+ dbg_unlock ();
g_assert (count > 0);
if (count == 1 && inst->native_offset != SEQ_POINT_NATIVE_OFFSET_DEAD_CODE) {
mono_arch_clear_breakpoint (ji, ip);
+ DEBUG(1, fprintf (log_file, "[dbg] Clear breakpoint at %s [%p].\n", mono_method_full_name (jinfo_get_method (ji), TRUE), ip));
}
#else
NOT_IMPLEMENTED;
ss_req = NULL;
}
+static void
+ss_clear_for_assembly (SingleStepReq *req, MonoAssembly *assembly)
+{
+ GSList *l;
+ gboolean found = TRUE;
+
+ while (found) {
+ found = FALSE;
+ for (l = ss_req->bps; l; l = l->next) {
+ if (breakpoint_matches_assembly (l->data, assembly)) {
+ clear_breakpoint (l->data);
+ ss_req->bps = g_slist_delete_link (ss_req->bps, l);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+}
+
/*
* Called from metadata by the icall for System.Diagnostics.Debugger:Log ().
*/
mono_loader_unlock ();
}
-static gboolean
-event_req_matches_assembly (EventRequest *req, MonoAssembly *assembly)
+static void
+clear_assembly_from_modifier (EventRequest *req, Modifier *m, MonoAssembly *assembly)
{
- if (req->event_kind == EVENT_KIND_BREAKPOINT)
- return breakpoint_matches_assembly (req->info, assembly);
- else {
- int i, j;
+ int i;
- for (i = 0; i < req->nmodifiers; ++i) {
- Modifier *m = &req->modifiers [i];
+ if (m->kind == MOD_KIND_EXCEPTION_ONLY && m->data.exc_class && m->data.exc_class->image->assembly == assembly)
+ m->kind = MOD_KIND_NONE;
+ if (m->kind == MOD_KIND_ASSEMBLY_ONLY && m->data.assemblies) {
+ int count = 0, match_count = 0, pos;
+ MonoAssembly **newassemblies;
- if (m->kind == MOD_KIND_EXCEPTION_ONLY && m->data.exc_class && m->data.exc_class->image->assembly == assembly)
- return TRUE;
- if (m->kind == MOD_KIND_ASSEMBLY_ONLY && m->data.assemblies) {
- for (j = 0; m->data.assemblies [j]; ++j)
- if (m->data.assemblies [j] == assembly)
- return TRUE;
- }
+ for (i = 0; m->data.assemblies [i]; ++i) {
+ count ++;
+ if (m->data.assemblies [i] == assembly)
+ match_count ++;
+ }
+
+ if (match_count) {
+ newassemblies = g_new0 (MonoAssembly*, count - match_count);
+
+ pos = 0;
+ for (i = 0; i < count; ++i)
+ if (m->data.assemblies [i] != assembly)
+ newassemblies [pos ++] = m->data.assemblies [i];
+ g_assert (pos == count - match_count);
+ g_free (m->data.assemblies);
+ m->data.assemblies = newassemblies;
}
}
+}
- return FALSE;
+static void
+clear_assembly_from_modifiers (EventRequest *req, MonoAssembly *assembly)
+{
+ int i;
+
+ for (i = 0; i < req->nmodifiers; ++i) {
+ Modifier *m = &req->modifiers [i];
+
+ clear_assembly_from_modifier (req, m, assembly);
+ }
}
/*
for (i = 0; i < event_requests->len; ++i) {
EventRequest *req = g_ptr_array_index (event_requests, i);
- if (event_req_matches_assembly (req, assembly)) {
+ clear_assembly_from_modifiers (req, assembly);
+
+ if (req->event_kind == EVENT_KIND_BREAKPOINT && breakpoint_matches_assembly (req->info, assembly)) {
clear_event_request (req->id, req->event_kind);
found = TRUE;
break;
}
+
+ if (req->event_kind == EVENT_KIND_STEP)
+ ss_clear_for_assembly (req->info, assembly);
}
}
mono_loader_unlock ();
#ifdef HOST_WIN32
BOOL APIENTRY DllMain (HMODULE module_handle, DWORD reason, LPVOID reserved)
{
- int dummy;
if (!mono_gc_dllmain (module_handle, reason, reserved))
return FALSE;
#include <glib.h>
#include <signal.h>
#include <string.h>
+
#ifdef HAVE_UCONTEXT_H
#include <ucontext.h>
#endif
LPTOP_LEVEL_EXCEPTION_FILTER mono_old_win_toplevel_exception_filter;
void *mono_win_vectored_exception_handle;
-extern gboolean mono_win_chained_exception_needs_run;
#define W32_SEH_HANDLE_EX(_ex) \
if (_ex##_handler) _ex##_handler(0, ep, sctx)
CONTEXT* ctx;
MonoContext* sctx;
LONG res;
+ MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
- mono_win_chained_exception_needs_run = FALSE;
+ /* If the thread is not managed by the runtime return early */
+ if (!jit_tls)
+ return EXCEPTION_CONTINUE_SEARCH;
+
+ jit_tls->mono_win_chained_exception_needs_run = FALSE;
res = EXCEPTION_CONTINUE_EXECUTION;
er = ep->ExceptionRecord;
W32_SEH_HANDLE_EX(fpe);
break;
default:
+ jit_tls->mono_win_chained_exception_needs_run = TRUE;
break;
}
- if (mono_win_chained_exception_needs_run) {
+ if (jit_tls->mono_win_chained_exception_needs_run) {
/* Don't copy context back if we chained exception
* as the handler may have modfied the EXCEPTION_POINTERS
* directly. We don't pass sigcontext to chained handlers.
}
static void
-altstack_handle_and_restore (void *sigctx, gpointer obj, gboolean stack_ovf)
+altstack_handle_and_restore (MonoContext *ctx, gpointer obj, gboolean stack_ovf)
{
MonoContext mctx;
- mono_arch_sigctx_to_monoctx (sigctx, &mctx);
+ mctx = *ctx;
mono_handle_exception (&mctx, obj);
if (stack_ovf)
{
#if defined(MONO_ARCH_USE_SIGACTION)
MonoException *exc = NULL;
- ucontext_t *ctx = (ucontext_t*)sigctx;
MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), (gpointer)UCONTEXT_REG_RIP (sigctx), NULL);
gpointer *sp;
int frame_size;
- ucontext_t *copied_ctx;
+ MonoContext *copied_ctx;
if (stack_ovf)
exc = mono_domain_get ()->stack_overflow_ex;
* return ip
* 128 is the size of the red zone
*/
- frame_size = sizeof (ucontext_t) + sizeof (gpointer) * 4 + 128;
-#ifdef __APPLE__
- frame_size += sizeof (*ctx->uc_mcontext);
-#endif
+ frame_size = sizeof (MonoContext) + sizeof (gpointer) * 4 + 128;
frame_size += 15;
frame_size &= ~15;
sp = (gpointer)(UCONTEXT_REG_RSP (sigctx) & ~15);
sp = (gpointer)((char*)sp - frame_size);
- copied_ctx = (ucontext_t*)(sp + 4);
+ copied_ctx = (MonoContext*)(sp + 4);
/* the arguments must be aligned */
sp [-1] = (gpointer)UCONTEXT_REG_RIP (sigctx);
- /* may need to adjust pointers in the new struct copy, depending on the OS */
- memcpy (copied_ctx, ctx, sizeof (ucontext_t));
-#ifdef __APPLE__
- {
- guint8 * copied_mcontext = (guint8*)copied_ctx + sizeof (ucontext_t);
- /* uc_mcontext is a pointer, so make a copy which is stored after the ctx */
- memcpy (copied_mcontext, ctx->uc_mcontext, sizeof (*ctx->uc_mcontext));
- copied_ctx->uc_mcontext = (void*)copied_mcontext;
- }
-#endif
+ mono_sigctx_to_monoctx (sigctx, copied_ctx);
/* at the return form the signal handler execution starts in altstack_handle_and_restore() */
UCONTEXT_REG_RIP (sigctx) = (unsigned long)altstack_handle_and_restore;
UCONTEXT_REG_RSP (sigctx) = (unsigned long)(sp - 1);
LPTOP_LEVEL_EXCEPTION_FILTER mono_old_win_toplevel_exception_filter;
gpointer mono_win_vectored_exception_handle;
-extern gboolean mono_win_chained_exception_needs_run;
extern int (*gUnhandledExceptionHandler)(EXCEPTION_POINTERS*);
#ifndef PROCESS_CALLBACK_FILTER_ENABLED
CONTEXT* ctx;
struct sigcontext* sctx;
LONG res;
+ MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
+
+ /* If the thread is not managed by the runtime return early */
+ if (!jit_tls)
+ return EXCEPTION_CONTINUE_SEARCH;
- mono_win_chained_exception_needs_run = FALSE;
+ jit_tls->mono_win_chained_exception_needs_run = FALSE;
res = EXCEPTION_CONTINUE_EXECUTION;
er = ep->ExceptionRecord;
W32_SEH_HANDLE_EX(fpe);
break;
default:
+ jit_tls->mono_win_chained_exception_needs_run = TRUE;
break;
}
- if (mono_win_chained_exception_needs_run) {
+ if (jit_tls->mono_win_chained_exception_needs_run) {
/* Don't copy context back if we chained exception
* as the handler may have modfied the EXCEPTION_POINTERS
* directly. We don't pass sigcontext to chained handlers.
*lmf = (gpointer)(((gsize)(*lmf)->previous_lmf) & ~3);
}
+#ifndef MONO_X86_NO_PUSHES
/* Pop arguments off the stack */
if (ji->has_arch_eh_info) {
int stack_size;
#endif
}
}
+#endif
return TRUE;
} else if (*lmf) {
GPtrArray *array = g_ptr_array_new ();
GString *buffer = g_string_new ("");
const char *p;
- int i;
+ unsigned i;
gboolean in_quotes = FALSE;
char quote_char = '\0';
/* Set method field */
method_ins = emit_get_rgctx_method (cfg, context_used, method, MONO_RGCTX_INFO_METHOD);
MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, method), method_ins->dreg);
- if (cfg->gen_write_barriers) {
- dreg = alloc_preg (cfg);
- EMIT_NEW_BIALU_IMM (cfg, ptr, OP_PADD_IMM, dreg, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, method));
- emit_write_barrier (cfg, ptr, method_ins);
- }
/*
* To avoid looking up the compiled code belonging to the target method
* in mono_delegate_trampoline (), we allocate a per-domain memory slot to
EMIT_NEW_ARGLOAD (cfg, call->args [i], i);
mono_arch_emit_call (cfg, call);
+ cfg->param_area = MAX(cfg->param_area, call->stack_usage);
MONO_ADD_INS (bblock, (MonoInst*)call);
} else {
for (i = 0; i < num_args; ++i)
void
mono_arch_cpu_init (void)
{
-#if defined(__APPLE__)
+#ifdef TARGET_IOS
i8_align = 4;
#else
i8_align = __alignof__ (gint64);
#endif
+
+#ifdef MONO_CROSS_COMPILE
+ /* Need to set the alignment of i8 since it can different on the target */
+#ifdef TARGET_ANDROID
+ /* linux gnueabi */
+ mono_type_set_alignment (MONO_TYPE_I8, 8);
+#endif
+#endif
}
static gpointer
ARM_CMP_REG_IMM (code, tmpreg, 0, 0);
buf [2] = code;
ARM_B_COND (code, ARMCOND_NE, 0);
- arm_patch (buf [2], buf [1]);
+ arm_patch (buf [2], buf [0]);
arm_patch (buf [1], code);
break;
case OP_ATOMIC_ADD_NEW_I4:
* reproduceable results for benchmarks */
#define MONO_ARCH_CODE_ALIGNMENT 32
+/* Argument marshallings for calls between gsharedvt and normal code */
+typedef enum {
+ GSHAREDVT_ARG_NONE = 0,
+ GSHAREDVT_ARG_BYVAL_TO_BYREF = 1,
+ GSHAREDVT_ARG_BYREF_TO_BYVAL = 2,
+ GSHAREDVT_ARG_BYREF_TO_BYVAL_I1 = 3,
+ GSHAREDVT_ARG_BYREF_TO_BYVAL_I2 = 4,
+ GSHAREDVT_ARG_BYREF_TO_BYVAL_U1 = 5,
+ GSHAREDVT_ARG_BYREF_TO_BYVAL_U2 = 6
+} GSharedVtArgMarshal;
+
/* Return value marshalling for calls between gsharedvt and normal code */
typedef enum {
GSHAREDVT_RET_NONE = 0,
if (k != j)
sreg_masks [k] &= ~ (regmask (dest_sreg));
}
+ /* See below */
+ dreg_mask &= ~ (regmask (dest_sreg));
} else {
val = rs->vassign [sreg];
if (val == -1) {
sreg_masks [k] &= ~ (regmask (dest_sreg));
}
/*
- * Prevent the dreg from being allocate to dest_sreg
+ * Prevent the dreg from being allocated to dest_sreg
* too, since it could force sreg1 to be allocated to
* the same reg on x86.
*/
MonoContext ctx;
#endif
GString* text = g_string_new (0);
- char *name, *wapi_desc;
+ char *name;
+#ifndef HOST_WIN32
+ char *wapi_desc;
+#endif
GError *error = NULL;
if (thread->name) {
if (tls->tid != GetCurrentThreadId ()) {
/* Happens on osx because threads are not suspended using signals */
+#ifndef TARGET_WIN32
gboolean res;
+#endif
g_assert (tls->info);
#ifdef TARGET_WIN32
#elif defined(TARGET_X86)
/* The offset is computed from the sp at the start of the call sequence */
g_assert (cfg->frame_reg == X86_EBP);
+#ifdef MONO_X86_NO_PUSHES
+ return (- cfg->arch.sp_fp_offset + sp_offset);
+#else
return (- cfg->arch.sp_fp_offset - sp_offset);
+#endif
#else
NOT_IMPLEMENTED;
return -1;
#ifdef TARGET_AMD64
min_offset = MIN (min_offset, -cfg->arch.sp_fp_offset);
#elif defined(TARGET_X86)
+#ifdef MONO_X86_NO_PUSHES
+ min_offset = MIN (min_offset, -cfg->arch.sp_fp_offset);
+#else
min_offset = MIN (min_offset, - (cfg->arch.sp_fp_offset + cfg->arch.param_area_size));
+#endif
#elif defined(TARGET_ARM)
// FIXME:
#elif defined(TARGET_s390X)
static LLVMTypeRef
type_to_llvm_type (EmitContext *ctx, MonoType *t)
{
+ t = mini_replace_type (t);
+
if (t->byref)
return LLVMPointerType (LLVMInt8Type (), 0);
switch (t->type) {
int i, j, pindex, vret_arg_pindex = 0;
int *pindexes;
gboolean vretaddr = FALSE;
+ MonoType *rtype;
if (sinfo)
memset (sinfo, 0, sizeof (LLVMSigInfo));
- ret_type = type_to_llvm_type (ctx, sig->ret);
+ rtype = mini_replace_type (sig->ret);
+ ret_type = type_to_llvm_type (ctx, rtype);
CHECK_FAILURE (ctx);
if (cinfo && cinfo->ret.storage == LLVMArgVtypeInReg) {
} else {
g_assert_not_reached ();
}
- } else if (cinfo && mini_type_is_vtype (ctx->cfg, sig->ret)) {
+ } else if (cinfo && mini_type_is_vtype (ctx->cfg, rtype)) {
g_assert (cinfo->ret.storage == LLVMArgVtypeRetAddr);
vretaddr = TRUE;
ret_type = LLVMVoidType ();
case OP_ATOMIC_ADD_NEW_I8: {
guint8 *loop = code, *branch;
g_assert (ins->inst_offset == 0);
+ ppc_sync (code);
if (ins->opcode == OP_ATOMIC_ADD_NEW_I4)
ppc_lwarx (code, ppc_r0, 0, ins->inst_basereg);
else
branch = code;
ppc_bc (code, PPC_BR_FALSE, PPC_BR_EQ, 0);
ppc_patch (branch, loop);
+ ppc_sync (code);
ppc_mr (code, ins->dreg, ppc_r0);
break;
}
guint8 *start, *not_equal, *lost_reservation;
start = code;
+ ppc_sync (code);
if (ins->opcode == OP_ATOMIC_CAS_I4)
ppc_lwarx (code, ppc_r0, 0, location);
#ifdef __mono_ppc64__
ppc_patch (lost_reservation, start);
ppc_patch (not_equal, code);
+ ppc_sync (code);
ppc_mr (code, ins->dreg, ppc_r0);
break;
}
#define EMIT_COND_SYSTEM_EXCEPTION(cond,exc_name) \
do { \
mono_add_patch_info (cfg, code - cfg->native_code, \
- MONO_PATCH_INFO_EXC, exc_name); \
+ MONO_PATCH_INFO_EXC, exc_name); \
s390_jcl (code, cond, 0); \
} while (0);
#define S390_TRACE_STACK_SIZE (5*sizeof(gpointer)+4*sizeof(gdouble))
#define BREAKPOINT_SIZE sizeof(breakpoint_t)
-#define S390X_NOP_SIZE sizeof(I_Format)
+#define S390X_NOP_SIZE sizeof(RR_Format)
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#include "mini.h"
#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include "mini-s390x.h"
#include "cpu-s390x.h"
+#include "support-s390x.h"
#include "jit-icalls.h"
#include "ir-emit.h"
#include "trace.h"
int mono_exc_esp_offset = 0;
-static int indent_level = 0;
+__thread int indent_level = 0;
static gint appdomain_tls_offset = -1,
lmf_tls_offset = -1,
facilityList_t facs;
-#if 0
-
-extern __thread MonoDomain *tls_appdomain;
-extern __thread MonoThread *tls_current_object;
-extern __thread gpointer mono_lmf_addr;
-
-#endif
-
/*
* The code generated for sequence points reads from this location,
* which is made read-only when single stepping is enabled.
breakpoint_t breakpointCode;
+static CRITICAL_SECTION mini_arch_mutex;
+
/*====================== End of Global Variables ===================*/
/*------------------------------------------------------------------*/
if (diff < 0)
indent_level += diff;
v = indent_level;
- printf("[%3d] ",v);
+ printf("%p [%3d] ",pthread_self(),v);
while (v-- > 0) {
printf (". ");
}
{
guint8 *code;
-#if 0
- /*
- * When we do an architectural level set at z9 or better
- * we can use the STFLE instruction to show us
- * what hardware facilities are available
- */
- int lFacility = sizeof(facs) % 8;
-
- memset((char *) &facs, 0, sizeof(facs));
-
- __asm__ (" lgfr 0,%1\n"
- " stfle %0\n"
- : "=m" (facs) : "r" (lFacility) : "0", "cc");
-#endif
+ InitializeCriticalSection (&mini_arch_mutex);
ss_trigger_page = mono_valloc (NULL, mono_pagesize (), MONO_MMAP_READ);
bp_trigger_page = mono_valloc (NULL, mono_pagesize (), MONO_MMAP_READ);
void
mono_arch_cleanup (void)
{
+ if (ss_trigger_page)
+ mono_vfree (ss_trigger_page, mono_pagesize ());
+ if (bp_trigger_page)
+ mono_vfree (bp_trigger_page, mono_pagesize ());
+ DeleteCriticalSection (&mini_arch_mutex);
}
/*========================= End of Function ========================*/
if (cfg->method->save_lmf)
parmOffset -= sizeof(MonoLMF);
fpOffset = parmOffset + (5*sizeof(gpointer));
- if ((!mono_hwcap_s390x_has_ld) && (fpOffset > 4096)) {
- s390_lgr (code, s390_r12, STK_BASE);
- baseReg = s390_r12;
- while (fpOffset > 4096) {
- s390_aghi (code, baseReg, 4096);
- fpOffset -= 4096;
- parmOffset -= 4096;
- }
- } else {
- baseReg = STK_BASE;
- }
+ baseReg = STK_BASE;
s390_stmg (code, s390_r2, s390_r6, STK_BASE, parmOffset);
- if (mono_hwcap_s390x_has_ld) {
- s390_stdy (code, s390_f0, 0, STK_BASE, fpOffset);
- s390_stdy (code, s390_f2, 0, STK_BASE, fpOffset+sizeof(gdouble));
- s390_stdy (code, s390_f4, 0, STK_BASE, fpOffset+2*sizeof(gdouble));
- s390_stdy (code, s390_f6, 0, STK_BASE, fpOffset+3*sizeof(gdouble));
- } else {
- s390_std (code, s390_f0, 0, baseReg, fpOffset);
- s390_std (code, s390_f2, 0, baseReg, fpOffset+sizeof(gdouble));
- s390_std (code, s390_f4, 0, baseReg, fpOffset+2*sizeof(gdouble));
- s390_std (code, s390_f6, 0, baseReg, fpOffset+3*sizeof(gdouble));
- }
- s390_basr (code, s390_r13, 0);
- s390_j (code, 10);
- s390_llong(code, cfg->method);
- s390_llong(code, func);
- s390_lg (code, s390_r2, 0, s390_r13, 4);
- if (mono_hwcap_s390x_has_ld)
- s390_lay (code, s390_r3, 0, STK_BASE, parmOffset);
- else
- s390_la (code, s390_r3, 0, baseReg, parmOffset);
+ s390_stdy (code, s390_f0, 0, STK_BASE, fpOffset);
+ s390_stdy (code, s390_f2, 0, STK_BASE, fpOffset+sizeof(gdouble));
+ s390_stdy (code, s390_f4, 0, STK_BASE, fpOffset+2*sizeof(gdouble));
+ s390_stdy (code, s390_f6, 0, STK_BASE, fpOffset+3*sizeof(gdouble));
+ S390_SET (code, s390_r1, func);
+ S390_SET (code, s390_r2, cfg->method);
+ s390_lay (code, s390_r3, 0, STK_BASE, parmOffset);
s390_lgr (code, s390_r4, STK_BASE);
s390_aghi (code, s390_r4, cfg->stack_usage);
- s390_lg (code, s390_r1, 0, s390_r13, 12);
s390_basr (code, s390_r14, s390_r1);
- if (mono_hwcap_s390x_has_ld) {
- s390_ldy (code, s390_f6, 0, STK_BASE, fpOffset+3*sizeof(gdouble));
- s390_ldy (code, s390_f4, 0, STK_BASE, fpOffset+2*sizeof(gdouble));
- s390_ldy (code, s390_f2, 0, STK_BASE, fpOffset+sizeof(gdouble));
- s390_ldy (code, s390_f0, 0, STK_BASE, fpOffset);
- } else {
- s390_ld (code, s390_f6, 0, baseReg, fpOffset+3*sizeof(gdouble));
- s390_ld (code, s390_f4, 0, baseReg, fpOffset+2*sizeof(gdouble));
- s390_ld (code, s390_f2, 0, baseReg, fpOffset+sizeof(gdouble));
- s390_ld (code, s390_f0, 0, baseReg, fpOffset);
- }
+ s390_ldy (code, s390_f6, 0, STK_BASE, fpOffset+3*sizeof(gdouble));
+ s390_ldy (code, s390_f4, 0, STK_BASE, fpOffset+2*sizeof(gdouble));
+ s390_ldy (code, s390_f2, 0, STK_BASE, fpOffset+sizeof(gdouble));
+ s390_ldy (code, s390_f0, 0, STK_BASE, fpOffset);
s390_lmg (code, s390_r2, s390_r6, STK_BASE, parmOffset);
return code;
break;
}
- s390_basr (code, s390_r13, 0);
- s390_j (code, 10);
- s390_llong(code, cfg->method);
- s390_llong(code, func);
- s390_lg (code, s390_r2, 0, s390_r13, 4);
- s390_lg (code, s390_r1, 0, s390_r13, 12);
+ S390_SET (code, s390_r1, func);
+ S390_SET (code, s390_r2, cfg->method);
s390_basr (code, s390_r14, s390_r1);
switch (save_mode) {
}
} else {
short *o[1];
- s390_basr (code, s390_r13, 0);
- s390_j (code, 10);
- s390_llong (code, 0x41e0000000000000llu);
- s390_llong (code, 0x41f0000000000000llu);
+ S390_SET (code, s390_r13, 0x41e0000000000000llu);
+ s390_ldgr (code, s390_f14, s390_r13);
s390_ldr (code, s390_f15, sreg);
- s390_cdb (code, s390_f15, 0, s390_r13, 4);
+ s390_cdbr (code, s390_f15, s390_f14);
s390_jl (code, 0); CODEPTR (code, o[0]);
- s390_sdb (code, s390_f15, 0, s390_r13, 12);
+ S390_SET (code, s390_r13, 0x41f0000000000000llu);
+ s390_ldgr (code, s390_f14, s390_r13);
+ s390_sdbr (code, s390_f15, s390_f14);
s390_cfdbr (code, dreg, 7, s390_f15);
s390_j (code, 4);
PTRSLOT (code, o[0]);
}
break;
case OP_STOREI4_MEMBASE_IMM: {
- if (s390_is_imm16(ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_lg (code, s390_r0, 0, s390_r13, 4);
- }
+ s390_lgfi (code, s390_r0, ins->inst_imm);
S390_LONG (code, sty, st, s390_r0, 0,
ins->inst_destbasereg, ins->inst_offset);
}
break;
case OP_STORE_MEMBASE_IMM:
case OP_STOREI8_MEMBASE_IMM: {
- if (s390_is_imm16(ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_lg (code, s390_r0, 0, s390_r13, 4);
- }
+ S390_SET (code, s390_r0, ins->inst_imm);
S390_LONG (code, stg, stg, s390_r0, 0,
ins->inst_destbasereg, ins->inst_offset);
}
}
break;
case OP_LCONV_TO_I1: {
-#if 0
s390_lgbr (code, ins->dreg, ins->sreg1);
-#else
- s390_sllg (code, ins->dreg, ins->sreg1, 0, 56);
- s390_srag (code, ins->dreg, ins->dreg, 0, 56);
-#endif
}
break;
case OP_LCONV_TO_I2: {
-#if 0
s390_lghr (code, ins->dreg, ins->sreg1);
-#else
- s390_sllg (code, ins->dreg, ins->sreg1, 0, 48);
- s390_srag (code, ins->dreg, ins->dreg, 0, 48);
-#endif
}
break;
case OP_LCONV_TO_U1: {
-#if 0
- s390_llghr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lgr (code, ins->dreg, ins->sreg1);
- s390_lghi (code, s390_r0, 0xff);
- s390_ngr (code, ins->dreg, s390_r0);
-#endif
+ s390_llgcr (code, ins->dreg, ins->sreg1);
}
break;
case OP_LCONV_TO_U2: {
-#if 0
s390_llghr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lgr (code, ins->dreg, ins->sreg1);
- s390_lghi (code, s390_r0, -1);
- s390_srlg (code, s390_r0, s390_r0, 0, 48);
- s390_ngr (code, ins->dreg, s390_r0);
-#endif
}
break;
case OP_ICONV_TO_I1: {
-#if 0
- s390_lbr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lr (code, ins->dreg, ins->sreg1);
- s390_sll (code, ins->dreg, 0, 24);
- s390_sra (code, ins->dreg, 0, 24);
-
-#endif
+ s390_lgbr (code, ins->dreg, ins->sreg1);
}
break;
case OP_ICONV_TO_I2: {
-#if 0
- s390_lhr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lr (code, ins->dreg, ins->sreg1);
- s390_sll (code, ins->dreg, 0, 16);
- s390_sra (code, ins->dreg, 0, 16);
-#endif
+ s390_lghr (code, ins->dreg, ins->sreg1);
}
break;
case OP_ICONV_TO_U1: {
-#if 0
- s390_llcr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lr (code, ins->dreg, ins->sreg1);
- s390_lhi (code, s390_r0, 0xff);
- s390_nr (code, ins->dreg, s390_r0);
-#endif
+ s390_llgcr (code, ins->dreg, ins->sreg1);
}
break;
case OP_ICONV_TO_U2: {
-#if 0
- s390_llhr (code, ins->dreg, ins->sreg1);
-#else
- if (ins->dreg != ins->sreg1)
- s390_lr (code, ins->dreg, ins->sreg1);
- s390_lhi (code, s390_r0, -1);
- s390_srl (code, s390_r0, 0, 16);
- s390_nr (code, ins->dreg, s390_r0);
-#endif
+ s390_llghr (code, ins->dreg, ins->sreg1);
}
break;
case OP_COMPARE:
break;
case OP_COMPARE_IMM:
case OP_LCOMPARE_IMM: {
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- if (is_unsigned (ins->next))
- s390_clgr (code, ins->sreg1, s390_r0);
- else
- s390_cgr (code, ins->sreg1, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- if (is_unsigned (ins->next))
- s390_clg (code, ins->sreg1, 0, s390_r13, 4);
- else
- s390_cg (code, ins->sreg1, 0, s390_r13, 4);
- }
+ S390_SET (code, s390_r0, ins->inst_imm);
+ if (is_unsigned (ins->next))
+ s390_clgr (code, ins->sreg1, s390_r0);
+ else
+ s390_cgr (code, ins->sreg1, s390_r0);
}
break;
case OP_ICOMPARE_IMM: {
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- if (is_unsigned (ins->next))
- s390_clr (code, ins->sreg1, s390_r0);
- else
- s390_cr (code, ins->sreg1, s390_r0);
- }
- else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- if (is_unsigned (ins->next))
- s390_cl (code, ins->sreg1, 0, s390_r13, 4);
- else
- s390_c (code, ins->sreg1, 0, s390_r13, 4);
- }
+ S390_SET (code, s390_r0, ins->inst_imm);
+ if (is_unsigned (ins->next))
+ s390_clr (code, ins->sreg1, s390_r0);
+ else
+ s390_cr (code, ins->sreg1, s390_r0);
}
break;
case OP_BREAK: {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_ABS,
mono_break);
- s390_llong (code, mono_break);
- s390_lg (code, s390_r14, 0, s390_r13, 4);
- s390_basr (code, s390_r14, s390_r14);
+ S390_CALL_TEMPLATE (code, s390_r14);
}
break;
case OP_ADDCC: {
}
if (s390_is_imm16 (ins->inst_imm)) {
s390_aghi (code, ins->dreg, ins->inst_imm);
+ } else if (s390_is_imm32 (ins->inst_imm)) {
+ s390_agfi (code, ins->dreg, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_ag (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_agr (code, ins->dreg, s390_r0);
}
}
break;
s390_lghi (code, s390_r0, ins->inst_imm);
s390_alcgr (code, ins->dreg, s390_r0);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong (code, ins->inst_imm);
- s390_lg (code, s390_r13, 0, s390_r13, 4);
- s390_alcgr (code, ins->dreg, s390_r13);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_alcgr (code, ins->dreg, s390_r0);
}
}
break;
s390_lgr (code, ins->dreg, ins->sreg1);
}
if (s390_is_imm16 (-ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_slgr (code, ins->dreg, s390_r0);
+ s390_aghi (code, ins->dreg, -ins->inst_imm);
+ } else if (s390_is_imm32 (-ins->inst_imm)) {
+ s390_slgfi (code, ins->dreg, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_slg (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_slgr (code, ins->dreg, s390_r0);
}
}
break;
s390_lgr (code, ins->dreg, ins->sreg1);
}
if (s390_is_imm16 (-ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_slgr (code, ins->dreg, s390_r0);
+ s390_aghi (code, ins->dreg, -ins->inst_imm);
+ } else if (s390_is_imm32 (-ins->inst_imm)) {
+ s390_slgfi (code, ins->dreg, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_slg (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_slgr (code, ins->dreg, s390_r0);
}
}
break;
s390_lghi (code, s390_r0, ins->inst_imm);
s390_slbgr (code, ins->dreg, s390_r0);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_slbg (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_slbgr(code, ins->dreg, s390_r0);
}
}
break;
if (ins->dreg != ins->sreg1) {
s390_lgr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_ngr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_ng (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK (code, s390_r0, ins->inst_imm);
+ s390_ngr (code, ins->dreg, s390_r0);
}
break;
case OP_LDIV: {
if (ins->dreg != ins->sreg1) {
s390_lgr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_ogr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_og (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK(code, s390_r0, ins->inst_imm);
+ s390_ogr (code, ins->dreg, s390_r0);
}
break;
case OP_LXOR: {
if (ins->dreg != ins->sreg1) {
s390_lgr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_xgr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_xg (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK (code, s390_r0, ins->inst_imm);
+ s390_xgr (code, ins->dreg, s390_r0);
}
break;
case OP_LSHL: {
}
if (s390_is_imm16 (ins->inst_imm)) {
s390_lghi (code, s390_r13, ins->inst_imm);
+ } else if (s390_is_imm32 (ins->inst_imm)) {
+ s390_lgfi (code, s390_r13, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_lg (code, s390_r13, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->inst_imm);
}
s390_msgr (code, ins->dreg, s390_r13);
}
s390_lgfr (code, ins->dreg, ins->sreg1);
}
if (s390_is_imm16 (ins->inst_imm)) {
- s390_aghi(code, ins->dreg, ins->inst_imm);
+ s390_aghi (code, ins->dreg, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_agf (code, ins->dreg, 0, s390_r13, 4);
+ s390_afi (code, ins->dreg, ins->inst_imm);
}
}
break;
s390_lghi (code, s390_r0, ins->inst_imm);
s390_alcgr (code, ins->dreg, s390_r0);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_lgf (code, s390_r13, 0, s390_r13, 4);
- s390_alcgr (code, ins->dreg, s390_r13);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_alcgr (code, ins->dreg, s390_r0);
}
}
break;
if (s390_is_imm16 (-ins->inst_imm)) {
s390_aghi (code, ins->dreg, -ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_sgf (code, ins->dreg, 0, s390_r13, 4);
+ s390_agfi (code, ins->dreg, -ins->inst_imm);
}
}
break;
case OP_ISBB_IMM: {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_slgf (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, ins->inst_imm);
+ s390_slgfr (code, ins->dreg, s390_r0);
}
break;
case OP_ISUB_OVF:
if (ins->dreg != ins->sreg1) {
s390_lgfr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_ngr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_ng (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK (code, s390_r0, ins->inst_imm);
+ s390_ngr (code, ins->dreg, s390_r0);
}
break;
case OP_IDIV: {
case OP_IDIV_IMM: {
if (s390_is_imm16 (ins->inst_imm)) {
s390_lghi (code, s390_r13, ins->inst_imm);
- s390_lgfr (code, s390_r0, ins->sreg1);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_lgfr (code, s390_r0, ins->sreg1);
- s390_lgf (code, s390_r13, 0, s390_r13, 4);
+ s390_lgfi (code, s390_r13, ins->inst_imm);
}
+ s390_lgfr (code, s390_r0, ins->sreg1);
s390_srda (code, s390_r0, 0, 32);
s390_dr (code, s390_r0, ins->sreg2);
s390_lgfr (code, ins->dreg, s390_r1);
case OP_IREM_IMM: {
if (s390_is_imm16 (ins->inst_imm)) {
s390_lghi (code, s390_r13, ins->inst_imm);
- s390_lgfr (code, s390_r0, ins->sreg1);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_lgfr (code, s390_r0, ins->sreg1);
- s390_lgf (code, s390_r13, 0, s390_r13, 4);
+ s390_lgfi (code, s390_r13, ins->inst_imm);
}
+ s390_lgfr (code, s390_r0, ins->sreg1);
s390_srda (code, s390_r0, 0, 32);
s390_dr (code, s390_r0, ins->sreg2);
s390_lgfr (code, ins->dreg, s390_r0);
if (ins->dreg != ins->sreg1) {
s390_lgfr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_ogr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_og (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK (code, s390_r0, ins->inst_imm);
+ s390_ogr (code, ins->dreg, s390_r0);
}
break;
case OP_IXOR: {
if (ins->dreg != ins->sreg1) {
s390_lgfr (code, ins->dreg, ins->sreg1);
}
- if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r0, ins->inst_imm);
- s390_xgr (code, ins->dreg, s390_r0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_xg (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET_MASK (code, s390_r0, ins->inst_imm);
+ s390_xgr (code, ins->dreg, s390_r0);
}
break;
case OP_ISHL: {
s390_lgfr (code, ins->dreg, ins->sreg1);
}
if (s390_is_imm16 (ins->inst_imm)) {
- s390_lghi (code, s390_r13, ins->inst_imm);
+ s390_lghi (code, s390_r0, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 4);
- s390_word (code, ins->inst_imm);
- s390_lgf (code, s390_r13, 0, s390_r13, 4);
+ s390_lgfi (code, s390_r0, ins->inst_imm);
}
- s390_msr (code, ins->dreg, s390_r13);
+ s390_msr (code, ins->dreg, s390_r0);
}
break;
case OP_IMUL_OVF: {
break;
case OP_ICONST:
case OP_I8CONST: {
- if (s390_is_imm16(ins->inst_c0)) {
- s390_lghi (code, ins->dreg, ins->inst_c0);
- } else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_c0);
- s390_lg (code, ins->dreg, 0, s390_r13, 4);
- }
+ S390_SET (code, ins->dreg, ins->inst_c0);
}
break;
case OP_AOTCONST: {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
mono_add_patch_info (cfg, code - cfg->native_code,
(MonoJumpInfoType)ins->inst_i1, ins->inst_p0);
- s390_llong(code, 0);
- s390_lg (code,ins->dreg, 0, s390_r13, 4);
+ S390_LOAD_TEMPLATE (code, ins->dreg);
}
break;
case OP_JUMP_TABLE: {
mono_add_patch_info (cfg, code - cfg->native_code,
(MonoJumpInfoType)ins->inst_i1, ins->inst_p0);
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong (code, 0);
- s390_lg (code, ins->dreg, 0, s390_r13, 4);
+ S390_LOAD_TEMPLATE (code, ins->dreg);
}
break;
case OP_MOVE:
s390_llgfr (code, ins->dreg, ins->sreg1);
break;
case OP_LCONV_TO_OVF_U4:
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, 4294967295);
- s390_clg (code, ins->sreg1, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, 4294967295);
+ s390_clgr (code, ins->sreg1, s390_r0);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_GT, "OverflowException");
s390_ltgr (code, ins->sreg1, ins->sreg1);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_LT, "OverflowException");
s390_llgfr(code, ins->dreg, ins->sreg1);
break;
case OP_LCONV_TO_OVF_I4_UN:
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, 2147483647);
- s390_cg (code, ins->sreg1, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, 2147483647);
+ s390_cgr (code, ins->sreg1, s390_r0);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_GT, "OverflowException");
s390_ltgr (code, ins->sreg1, ins->sreg1);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_LT, "OverflowException");
s390_lgfr (code, ins->dreg, ins->sreg1);
break;
- case OP_FMOVE:
- case OP_FCONV_TO_R4: {
+ case OP_FMOVE: {
if (ins->dreg != ins->sreg1) {
s390_ldr (code, ins->dreg, ins->sreg1);
}
}
break;
+ case OP_FCONV_TO_R4: {
+ s390_ledbr (code, ins->dreg, ins->sreg1);
+ s390_ldebr (code, ins->dreg, ins->dreg);
+ }
+ break;
case OP_S390_SETF4RET: {
s390_ledbr (code, ins->dreg, ins->sreg1);
}
case OP_TLS_GET: {
if (s390_is_imm16 (ins->inst_offset)) {
s390_lghi (code, s390_r13, ins->inst_offset);
+ } else if (s390_is_imm32 (ins->inst_offset)) {
+ s390_lgfi (code, s390_r13, ins->inst_offset);
} else {
- s390_bras (code, s390_r13, 0);
- s390_j (code, 4);
- s390_llong(code, ins->inst_offset);
- s390_lg (code, s390_r13, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->inst_offset);
}
s390_ear (code, s390_r1, 0);
s390_sllg(code, s390_r1, s390_r1, 0, 32);
case OP_ARGLIST: {
int offset = cfg->sig_cookie + cfg->stack_usage;
- if (s390_is_imm16 (offset))
+ if (s390_is_imm16 (offset)) {
s390_lghi (code, s390_r0, offset);
- else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, offset);
- s390_lg (code, s390_r0, 0, s390_r13, 0);
+ } else if (s390_is_imm32 (offset)) {
+ s390_lgfi (code, s390_r0, offset);
+ } else {
+ S390_SET (code, s390_r0, offset);
}
s390_agr (code, s390_r0, cfg->frame_reg);
s390_stg (code, s390_r0, 0, ins->sreg1, 0);
}
break;
case OP_FCALL: {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, code-cfg->native_code,
mono_add_patch_info (cfg, code-cfg->native_code,
MONO_PATCH_INFO_ABS,
call->fptr);
- s390_llong(code, 0);
- s390_lg (code, s390_r14, 0, s390_r13, 4);
- s390_basr (code, s390_r14, s390_r14);
+ S390_CALL_TEMPLATE (code, s390_r14);
if (call->signature->ret->type == MONO_TYPE_R4)
s390_ldebr (code, s390_f0, s390_f0);
}
case OP_VCALL2:
case OP_VOIDCALL:
case OP_CALL: {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, code-cfg->native_code,
mono_add_patch_info (cfg, code-cfg->native_code,
MONO_PATCH_INFO_ABS,
call->fptr);
- s390_llong(code, 0);
- s390_lg (code, s390_r14, 0, s390_r13, 4);
- s390_basr (code, s390_r14, s390_r14);
+ S390_CALL_TEMPLATE (code, s390_r14);
}
break;
case OP_FCALL_REG: {
int lmfOffset = cfg->stack_usage - sizeof(MonoLMF);
s390_lgr (code, s390_r13, cfg->frame_reg);
- if (s390_is_imm16(lmfOffset))
+ if (s390_is_imm16(lmfOffset)) {
s390_aghi (code, s390_r13, lmfOffset);
- else {
- s390_basr (code, s390_r14, 0);
- s390_j (code, 4);
- s390_word (code, lmfOffset);
- s390_agf (code, s390_r13, 0, s390_r14, 4);
+ } else if (s390_is_imm32(lmfOffset)) {
+ s390_agfi (code, s390_r13, lmfOffset);
+ } else {
+ S390_SET (code, s390_r13, lmfOffset);
}
s390_lgr (code, s390_r14, STK_BASE);
s390_sgr (code, s390_r14, s390_r1);
break;
case OP_THROW: {
s390_lgr (code, s390_r2, ins->sreg1);
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
mono_add_patch_info (cfg, code-cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
(gpointer) "mono_arch_throw_exception");
- s390_llong(code, 0);
- s390_lg (code, s390_r14, 0, s390_r13, 4);
- s390_basr (code, s390_r14, s390_r14);
+ S390_CALL_TEMPLATE(code, s390_r14);
}
break;
case OP_RETHROW: {
s390_lgr (code, s390_r2, ins->sreg1);
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
mono_add_patch_info (cfg, code-cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
(gpointer) "mono_arch_rethrow_exception");
- s390_llong(code, 0);
- s390_lg (code, s390_r14, 0, s390_r13, 4);
- s390_basr (code, s390_r14, s390_r14);
+ S390_CALL_TEMPLATE(code, s390_r14);
}
break;
case OP_START_HANDLER: {
*/
for (i = 0; i < (BREAKPOINT_SIZE / S390X_NOP_SIZE); ++i)
s390_nop (code);
+
+ /*
+ * Add an additional nop so skipping the bp doesn't cause the ip to point
+ * to another IL offset.
+ */
+ s390_nop (code);
+
break;
}
if (*((double *) ins->inst_p0) == 0) {
s390_lzdr (code, ins->dreg);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong (code, ins->inst_p0);
- s390_lg (code, s390_r13, 0, s390_r13, 4);
- s390_ld (code, ins->dreg, 0, s390_r13, 0);
+ S390_SET (code, s390_r13, ins->inst_p0);
+ s390_ld (code, ins->dreg, 0, s390_r13, 0);
}
}
break;
if (*((float *) ins->inst_p0) == 0) {
s390_lzdr (code, ins->dreg);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_p0);
- s390_lg (code, s390_r13, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->inst_p0);
s390_ldeb (code, ins->dreg, 0, s390_r13, 0);
}
}
case OP_ICONV_TO_R_UN: {
s390_cdfbr (code, ins->dreg, ins->sreg1);
s390_ltr (code, ins->sreg1, ins->sreg1);
- s390_jnl (code, 12);
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_word (code, 0x41f00000);
- s390_word (code, 0);
- s390_adb (code, ins->dreg, 0, s390_r13, 4);
+ s390_jnl (code, 8);
+ S390_SET (code, s390_r13, 0x41f0000000000000llu);
+ s390_ldgr (code, s390_f15, s390_r13);
+ s390_adbr (code, ins->dreg, s390_f15);
}
break;
case OP_LCONV_TO_R_UN: {
s390_cdgbr (code, ins->dreg, ins->sreg1);
s390_ltgr (code, ins->sreg1, ins->sreg1);
- s390_jnl (code, 12);
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_word (code, 0x41f00000);
- s390_word (code, 0);
- s390_adb (code, ins->dreg, 0, s390_r13, 4);
+ s390_jnl (code, 8);
+ S390_SET (code, s390_r13, 0x41f0000000000000llu);
+ s390_ldgr (code, s390_f15, s390_r13);
+ s390_adbr (code, ins->dreg, s390_f15);
}
break;
case OP_LCONV_TO_R4:
case OP_ICONV_TO_R4: {
- s390_cdgbr (code, ins->dreg, ins->sreg1);
+ s390_cegbr (code, ins->dreg, ins->sreg1);
+ s390_ldebr (code, ins->dreg, ins->dreg);
}
break;
case OP_LCONV_TO_R8:
if (ins->inst_offset > 0) {
if (s390_is_imm16 (ins->inst_offset)) {
s390_aghi (code, s390_r0, ins->inst_offset);
+ } else if (s390_is_imm32 (ins->inst_offset)) {
+ s390_agfi (code, s390_r0, ins->inst_offset);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_offset);
- s390_ag (code, s390_r0, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->inst_offset);
+ s390_agr (code, s390_r0, s390_r13);
}
}
s390_lgr (code, s390_r12, ins->sreg1);
if (ins->inst_imm > 0) {
if (s390_is_imm16 (ins->inst_imm)) {
s390_aghi (code, s390_r12, ins->inst_imm);
+ } else if (s390_is_imm32 (ins->inst_imm)) {
+ s390_agfi (code, s390_r12, ins->inst_imm);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->inst_imm);
- s390_ag (code, s390_r12, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->inst_imm);
+ s390_agr (code, s390_r12, s390_r13);
}
}
if (s390_is_imm16 (ins->backend.size)) {
s390_lghi (code, s390_r1, ins->backend.size);
+ } else if (s390_is_imm32 (ins->inst_offset)) {
+ s390_agfi (code, s390_r1, ins->backend.size);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, ins->backend.size);
- s390_lg (code, s390_r1, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, ins->backend.size);
+ s390_agr (code, s390_r1, s390_r13);
}
s390_lgr (code, s390_r13, s390_r1);
s390_mvcle(code, s390_r0, s390_r12, 0, 0);
s390_lgr (code, ins->dreg, ins->sreg1);
if (s390_is_imm16 (cfg->stack_offset)) {
s390_aghi (code, ins->dreg, cfg->stack_offset);
+ } else if (s390_is_imm32 (cfg->stack_offset)) {
+ s390_agfi (code, ins->dreg, cfg->stack_offset);
} else {
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
- s390_llong(code, cfg->stack_offset);
- s390_ag (code, ins->dreg, 0, s390_r13, 4);
+ S390_SET (code, s390_r13, cfg->stack_offset);
+ s390_agr (code, ins->dreg, s390_r13);
}
}
break;
switch (patch_info->type) {
case MONO_PATCH_INFO_IP:
- case MONO_PATCH_INFO_EXC_NAME:
case MONO_PATCH_INFO_LDSTR:
case MONO_PATCH_INFO_TYPE_FROM_HANDLE:
case MONO_PATCH_INFO_LDTOKEN:
case MONO_PATCH_INFO_EXC:
- case MONO_PATCH_INFO_ABS:
+ s390_patch_addr (ip, (guint64) target);
+ continue;
case MONO_PATCH_INFO_METHOD:
- case MONO_PATCH_INFO_RGCTX_FETCH:
case MONO_PATCH_INFO_INTERNAL_METHOD:
- case MONO_PATCH_INFO_CLASS_INIT:
case MONO_PATCH_INFO_JIT_ICALL_ADDR:
+ case MONO_PATCH_INFO_CLASS_INIT:
case MONO_PATCH_INFO_GENERIC_CLASS_INIT:
- s390_patch_addr (ip, (guint64) target);
+ case MONO_PATCH_INFO_RGCTX_FETCH:
+ case MONO_PATCH_INFO_ABS: {
+ S390_EMIT_CALL (ip, target);
continue;
+ }
case MONO_PATCH_INFO_SWITCH:
/*----------------------------------*/
/* ip points at the basr r13,0/j +4 */
/* instruction the vtable value */
/* follows this (i.e. ip+6) */
/*----------------------------------*/
- *((gconstpointer *)(ip+6)) = target;
+ S390_EMIT_LOAD (ip, target);
continue;
case MONO_PATCH_INFO_METHODCONST:
case MONO_PATCH_INFO_CLASS:
case MONO_PATCH_INFO_IMAGE:
case MONO_PATCH_INFO_FIELD:
case MONO_PATCH_INFO_IID:
+ case MONO_PATCH_INFO_EXC_NAME:
target = S390_RELATIVE(target, ip);
s390_patch_rel (ip, (guint64) target);
continue;
s390_lgr (code, s390_r11, STK_BASE);
if (s390_is_imm16 (alloc_size)) {
s390_aghi (code, STK_BASE, -alloc_size);
- } else {
+ } else if (s390_is_imm32 (alloc_size)) {
+ s390_agfi (code, STK_BASE, -alloc_size);
+ } else {
int stackSize = alloc_size;
- while (stackSize > 32767) {
- s390_aghi (code, STK_BASE, -32767);
- stackSize -= 32767;
+ while (stackSize > INT_MAX) {
+ s390_agfi (code, STK_BASE, -INT_MAX);
+ stackSize -= INT_MAX;
}
- s390_aghi (code, STK_BASE, -stackSize);
+ s390_agfi (code, STK_BASE, -stackSize);
}
s390_stg (code, s390_r11, 0, STK_BASE, 0);
/* On return from this call r2 have the address of the &lmf */
/*---------------------------------------------------------------*/
if (lmf_addr_tls_offset == -1) {
- s390_basr(code, s390_r14, 0);
- s390_j (code, 6);
mono_add_patch_info (cfg, code - cfg->native_code,
MONO_PATCH_INFO_INTERNAL_METHOD,
(gpointer)"mono_get_lmf_addr");
- s390_llong(code, 0);
- s390_lg (code, s390_r1, 0, s390_r14, 4);
- s390_basr (code, s390_r14, s390_r1);
+ S390_CALL_TEMPLATE(code, s390_r1);
} else {
/*-------------------------------------------------------*/
/* Get LMF by getting value from thread level storage */
/*---------------------------------------------------------------*/
/* save method info */
/*---------------------------------------------------------------*/
- s390_basr (code, s390_r1, 0);
- s390_j (code, 6);
- s390_llong (code, method);
- s390_lg (code, s390_r1, 0, s390_r1, 4);
+ S390_SET (code, s390_r1, method);
s390_stg (code, s390_r1, 0, s390_r13,
G_STRUCT_OFFSET(MonoLMF, method));
/*---------------------------------------------*/
/* Patch the parameter passed to the handler */
/*---------------------------------------------*/
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
-// s390_llong(code, patch_info->data.target);
- s390_llong(code, exc_class->type_token);
+ S390_SET (code, s390_r2, exc_class->type_token);
/*---------------------------------------------*/
/* Load return address & parameter register */
/*---------------------------------------------*/
s390_larl (code, s390_r14, (guint64)S390_RELATIVE((patch_info->ip.i +
cfg->native_code + 8), code));
- s390_lg (code, s390_r2, 0, s390_r13, 4);
/*---------------------------------------------*/
/* Reuse the current patch to set the jump */
/*---------------------------------------------*/
- s390_basr (code, s390_r13, 0);
- s390_j (code, 6);
patch_info->type = MONO_PATCH_INFO_INTERNAL_METHOD;
patch_info->data.name = "mono_arch_throw_corlib_exception";
patch_info->ip.i = code - cfg->native_code;
- s390_llong(code, 0);
- s390_lg (code, s390_r1, 0, s390_r13, 4);
- s390_br (code, s390_r1);
+ S390_BR_TEMPLATE (code, s390_r1);
}
break;
}
/*------------------------------------------------------------------*/
/* */
-/* Name - mono_arch_emit_inst_for_method */
+/* Name - mono_arch_emit_inst_for_method */
/* */
/*------------------------------------------------------------------*/
gboolean
mono_arch_is_inst_imm (gint64 imm)
{
- return s390_is_imm16 (imm);
+ return s390_is_imm32 (imm);
}
/*========================= End of Function ========================*/
}
/*========================= End of Function ========================*/
+
+/*------------------------------------------------------------------*/
+/* */
+/* Name - mono_arch_install_handler_block_guard */
+/* */
+/* Function - */
+/* */
+/*------------------------------------------------------------------*/
+
+gpointer
+mono_arch_install_handler_block_guard (MonoJitInfo *ji, MonoJitExceptionInfo *clause,
+ MonoContext *ctx, gpointer new_value)
+{
+ int offset;
+ gpointer *sp, old_value;
+ char *bp;
+
+ offset = clause->exvar_offset;
+ /*Load the spvar*/
+ bp = MONO_CONTEXT_GET_BP (ctx);
+ sp = *(gpointer*)(bp + offset);
+
+ old_value = *sp;
+ if (old_value < ji->code_start || (char*)old_value > ((char*)ji->code_start + ji->code_size))
+ return old_value;
+
+ *sp = new_value;
+
+ return old_value;
+}
+
+/*========================= End of Function ========================*/
+
/*------------------------------------------------------------------*/
/* */
/* Name - get_delegate_invoke_impl. */
if (item->is_equals) {
if (item->check_target_idx) {
if (!item->compare_done) {
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- s390_llong(code, item->key);
- s390_lg (code, s390_r0, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, item->key);
s390_cgr (code, s390_r0, MONO_ARCH_IMT_REG);
}
item->jmp_code = (guint8*) code;
s390_jcl (code, S390_CC_NE, 0);
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- if (item->has_target_code) {
- s390_llong(code, item->value.target_code);
- s390_lg (code, s390_r1, 0, s390_r13, 4);
- } else {
- s390_llong(code, (&(vtable->vtable [item->value.vtable_slot])));
- s390_lg (code, s390_r1, 0, s390_r13, 4);
- s390_lg (code, s390_r1, 0, s390_r1, 0);
+ if (item->has_target_code) {
+ S390_SET (code, s390_r1, item->value.target_code);
+ } else {
+ S390_SET (code, s390_r1, (&(vtable->vtable [item->value.vtable_slot])));
+ s390_lg (code, s390_r1, 0, s390_r1, 0);
}
s390_br (code, s390_r1);
} else {
if (fail_tramp) {
gint64 target;
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- s390_llong(code, item->key);
- s390_lg (code, s390_r0, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, item->key);
s390_cgr (code, s390_r0, MONO_ARCH_IMT_REG);
item->jmp_code = (guint8*) code;
s390_jcl (code, S390_CC_NE, 0);
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
if (item->has_target_code) {
- s390_llong(code, item->value.target_code);
- s390_lg (code, s390_r1, 0, s390_r13, 4);
+ S390_SET (code, s390_r1, item->value.target_code);
} else {
g_assert (vtable);
- s390_llong(code, (&(vtable->vtable [item->value.vtable_slot])));
- s390_lg (code, s390_r1, 0, s390_r13, 4);
+ S390_SET (code, s390_r1,
+ (&(vtable->vtable [item->value.vtable_slot])));
s390_lg (code, s390_r1, 0, s390_r1, 0);
}
s390_br (code, s390_r1);
target = S390_RELATIVE(code, item->jmp_code);
s390_patch_rel(item->jmp_code+2, target);
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- s390_llong(code, fail_tramp);
- s390_lg (code, s390_r1, 0, s390_r13, 4);
+ S390_SET (code, s390_r1, fail_tramp);
s390_br (code, s390_r1);
item->jmp_code = NULL;
} else {
#if ENABLE_WRONG_METHOD_CHECK
g_assert_not_reached ();
#endif
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- s390_llong(code, (&(vtable->vtable [item->value.vtable_slot])));
- s390_lg (code, s390_r1, 0, s390_r13, 4);
+ S390_SET (code, s390_r1, (&(vtable->vtable [item->value.vtable_slot])));
s390_lg (code, s390_r1, 0, s390_r1, 0);
s390_br (code, s390_r1);
-#if ENABLE_WRONG_METHOD_CHECK
- g_assert_not_reached ();
-#endif
}
}
} else {
- s390_basr (code, s390_r13, s390_r0);
- s390_j (code, 6);
- s390_llong(code, item->key);
- s390_lg (code, s390_r0, 0, s390_r13, 4);
+ S390_SET (code, s390_r0, item->key);
s390_cgr (code, MONO_ARCH_IMT_REG, s390_r0);
item->jmp_code = (guint8 *) code;
s390_jcl (code, S390_CC_GE, 0);
}
}
- /* patch the branches to get to the target items */
+ /*
+ * patch the branches to get to the target items
+ */
for (i = 0; i < count; ++i) {
MonoIMTCheckItem *item = imt_entries [i];
if (item->jmp_code) {
mono_arch_is_breakpoint_event (void *info, void *sigctx)
{
siginfo_t* sinfo = (siginfo_t*) info;
- /* Sometimes the address is off by 4 */
+
+ /*
+ * Sometimes the address is off by 4
+ */
if (sinfo->si_addr >= bp_trigger_page && (guint8*)sinfo->si_addr <= (guint8*)bp_trigger_page + 128)
return TRUE;
else
void
mono_arch_skip_breakpoint (MonoContext *ctx, MonoJitInfo *ji)
{
- MONO_CONTEXT_SET_IP (ctx, (guint8*)MONO_CONTEXT_GET_IP (ctx) + BREAKPOINT_SIZE);
+ MONO_CONTEXT_SET_IP (ctx, ((guint8*)MONO_CONTEXT_GET_IP (ctx) + sizeof(RXY_Format)));
}
/*========================= End of Function ========================*/
{
siginfo_t* sinfo = (siginfo_t*) info;
- /* Sometimes the address is off by 4 */
+ /*
+ * Sometimes the address is off by 4
+ */
if (sinfo->si_addr >= ss_trigger_page && (guint8*)sinfo->si_addr <= (guint8*)ss_trigger_page + 128)
return TRUE;
else
/* Parameters used by the register allocator */
/*-------------------------------------------*/
-#define S390_LONG(loc, opy, op, r, ix, br, off) \
- if (mono_hwcap_s390x_has_ld) { \
- if (s390_is_imm20(off)) { \
- s390_##opy (loc, r, ix, br, off); \
- } else { \
- s390_basr (code, s390_r13, 0); \
- s390_j (code, 6); \
- s390_llong(code, off); \
- s390_lg (code, s390_r13, 0, s390_r13, 4); \
- s390_##op (code, r, s390_r13, br, 0); \
- } \
- } else { \
- if (s390_is_uimm12(off)) { \
- s390_##op (loc, r, ix, br, off); \
- } else { \
- s390_basr (code, s390_r13, 0); \
- s390_j (code, 6); \
- s390_llong(code, off); \
- s390_lg (code, s390_r13, 0, s390_r13, 4); \
- s390_##op (code, r, s390_r13, br, 0); \
- } \
- }
-
struct MonoLMF {
gpointer previous_lmf;
gpointer lmf_addr;
void *return_address;
} MonoS390StackFrame;
-typedef struct
-{
- char n3:1; // N3 instructions present
- char zArch:1; // z/Architecture mode installed
- char zAct:1; // z/Architecture mode active
- char date:1; // DATE enhancement facility
- char idte1:1; // IDTE present (PST)
- char idte2:1; // IDTE present (REG)
- char asnlx:1; // ASN and LX reuse facility
- char stfle:1; // STFLE installed
- char zDATe:1; // Enhanced DAT in z mode
- char srstat:1; // Sense running status facility
- char cSSKE:1; // Conditional SSKE facility
- char topo:1; // COnfiguration topology facility
- char xTrans2:1; // Extended translation facility 2
- char msgSec:1; // Message security facility
- char longDsp:1; // Long displacement facility
- char hiPerfLD:1; // High performance long displacement facility
- char hfpMAS:1; // HFP multiply-and-add/subtrace facility
- char xImm:1; // Extended immediate facility
- char xTrans3:1; // Extended translation facility 3
- char hfpUnX:1; // HFP unnormalized extension facility
- char etf2:1; // ETF2-enhancement facility
- char stckf:1; // Store-clock-fast facility
- char parse:1; // Parsing enhancement facility
- char mvcos:1; // MVCOS facility
- char todSteer:1; // TOD-clock steering facility
- char etf3:1; // ETF3-enhancement facility
- char xCPUtm:1; // Extract CPU time facility
- char csst:1; // Compare-swap-and-store facility
- char csst2:1; // Compare-swap-and-store facility 2
- char giX:1; // General instructions extension facility
- char exX:1; // Execute extensions facility
- char ibm:1; // IBM internal use
- char fps:1; // Floating point support enhancement
- char dfp:1; // Decimal floating point facility
- char hiDFP:1; // High Performance DFP facility
- char pfpo:1; // PFPO instruction facility
-} __attribute__((aligned(8))) facilityList_t;
-
// #define MONO_ARCH_SIGSEGV_ON_ALTSTACK 1
#define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
#define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS 1
#define MONO_ARCH_GC_MAPS_SUPPORTED 1
#define MONO_ARCH_GSHARED_SUPPORTED 1
#define MONO_ARCH_MONITOR_ENTER_ADJUSTMENT 1
+#define MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD 1
+#define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
#define S390_STACK_ALIGNMENT 8
#define S390_FIRST_ARG_REG s390_r2
#include "jit-icalls.h"
-gboolean mono_win_chained_exception_needs_run;
-
void
mono_runtime_install_handlers (void)
{
gboolean
SIG_HANDLER_SIGNATURE (mono_chain_signal)
{
- mono_win_chained_exception_needs_run = TRUE;
+ MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
+ jit_tls->mono_win_chained_exception_needs_run = TRUE;
return TRUE;
}
/* The index of the vret arg in the argument list */
int vret_arg_index;
int vret_arg_offset;
+ /* Argument space popped by the callee */
+ int callee_stack_pop;
ArgInfo ret;
ArgInfo sig_cookie;
ArgInfo args [1];
stack_size += cinfo->stack_align_amount;
}
+ if (cinfo->vtype_retaddr) {
+ /* if the function returns a struct on stack, the called method already does a ret $0x4 */
+ cinfo->callee_stack_pop = 4;
+ }
+
cinfo->stack_usage = stack_size;
cinfo->reg_usage = gr;
cinfo->freg_usage = fr;
cfg->vret_addr = mono_compile_create_var (cfg, &mono_defaults.int_class->byval_arg, OP_ARG);
}
+#ifdef MONO_X86_NO_PUSHES
+ cfg->arch.no_pushes = TRUE;
+#endif
+
if (cfg->method->save_lmf) {
cfg->create_lmf_var = TRUE;
cfg->lmf_ir = TRUE;
if (cfg->compile_aot) {
sig_reg = mono_alloc_ireg (cfg);
MONO_EMIT_NEW_SIGNATURECONST (cfg, sig_reg, tmp_sig);
- MONO_EMIT_NEW_UNALU (cfg, OP_X86_PUSH, -1, sig_reg);
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, cinfo->sig_cookie.offset, sig_reg);
+ } else {
+ MONO_EMIT_NEW_UNALU (cfg, OP_X86_PUSH, -1, sig_reg);
+ }
} else {
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_X86_PUSH_IMM, -1, -1, tmp_sig);
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STORE_MEMBASE_IMM, X86_ESP, cinfo->sig_cookie.offset, tmp_sig);
+ } else {
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_X86_PUSH_IMM, -1, -1, tmp_sig);
+ }
}
}
if (cfg->compute_gc_maps) {
MonoInst *def;
+ /* Needs checking if the feature will be enabled again */
+ g_assert (!cfg->arch.no_pushes);
+
/* On x86, the offsets are from the sp value before the start of the call sequence */
if (t == NULL)
t = &mono_defaults.int_class->byval_arg;
sig_ret = mini_replace_type (sig->ret);
cinfo = get_call_info (cfg->generic_sharing_context, cfg->mempool, sig);
+ call->call_info = cinfo;
if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG))
sentinelpos = sig->sentinelpos + (sig->hasthis ? 1 : 0);
- if (cinfo->need_stack_align) {
+ if (cinfo->need_stack_align && !cfg->arch.no_pushes) {
MONO_INST_NEW (cfg, arg, OP_SUB_IMM);
arg->dreg = X86_ESP;
arg->sreg1 = X86_ESP;
/* Handle the case where there are no implicit arguments */
if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (n == sentinelpos)) {
emit_sig_cookie (cfg, call, cinfo);
- sp_offset += 4;
+ sp_offset = (cfg->arch.no_pushes) ? cinfo->sig_cookie.offset : (sp_offset + 4);
emit_gc_param_slot_def (cfg, sp_offset, NULL);
}
int argsize;
if (cinfo->vtype_retaddr && cinfo->vret_arg_index == 1 && i == 0) {
- /* Push the vret arg before the first argument */
MonoInst *vtarg;
- MONO_INST_NEW (cfg, vtarg, OP_X86_PUSH);
- vtarg->type = STACK_MP;
- vtarg->sreg1 = call->vret_var->dreg;
- MONO_ADD_INS (cfg->cbb, vtarg);
- sp_offset += 4;
+ /* Push the vret arg before the first argument */
+ if (cfg->arch.no_pushes) {
+ MONO_INST_NEW (cfg, vtarg, OP_STORE_MEMBASE_REG);
+ vtarg->type = STACK_MP;
+ vtarg->inst_destbasereg = X86_ESP;
+ vtarg->sreg1 = call->vret_var->dreg;
+ vtarg->inst_offset = cinfo->ret.offset;
+ MONO_ADD_INS (cfg->cbb, vtarg);
+ sp_offset = cinfo->ret.offset;
+ } else {
+ MONO_INST_NEW (cfg, vtarg, OP_X86_PUSH);
+ vtarg->type = STACK_MP;
+ vtarg->sreg1 = call->vret_var->dreg;
+ MONO_ADD_INS (cfg->cbb, vtarg);
+ sp_offset += 4;
+ }
emit_gc_param_slot_def (cfg, sp_offset, NULL);
}
MONO_ADD_INS (cfg->cbb, arg);
if (ainfo->storage != ArgValuetypeInReg) {
- sp_offset += size;
+ sp_offset = (cfg->arch.no_pushes) ? ainfo->offset : (sp_offset + size);
emit_gc_param_slot_def (cfg, sp_offset, orig_type);
}
}
} else {
- argsize = 4;
-
switch (ainfo->storage) {
case ArgOnStack:
- arg->opcode = OP_X86_PUSH;
if (!t->byref) {
if (t->type == MONO_TYPE_R4) {
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, 4);
- arg->opcode = OP_STORER4_MEMBASE_REG;
- arg->inst_destbasereg = X86_ESP;
- arg->inst_offset = 0;
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER4_MEMBASE_REG, X86_ESP, ainfo->offset, in->dreg);
+ } else {
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, 4);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER4_MEMBASE_REG, X86_ESP, 0, in->dreg);
+ }
argsize = 4;
} else if (t->type == MONO_TYPE_R8) {
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, 8);
- arg->opcode = OP_STORER8_MEMBASE_REG;
- arg->inst_destbasereg = X86_ESP;
- arg->inst_offset = 0;
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, X86_ESP, ainfo->offset, in->dreg);
+ } else {
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, 8);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, X86_ESP, 0, in->dreg);
+ }
argsize = 8;
} else if (t->type == MONO_TYPE_I8 || t->type == MONO_TYPE_U8) {
- arg->sreg1 ++;
- MONO_EMIT_NEW_UNALU (cfg, OP_X86_PUSH, -1, in->dreg + 2);
- sp_offset += 4;
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset + 4, in->dreg + 2);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset, in->dreg + 1);
+ } else {
+ MONO_EMIT_NEW_UNALU (cfg, OP_X86_PUSH, -1, in->dreg + 2);
+ MONO_EMIT_NEW_UNALU (cfg, OP_X86_PUSH, -1, in->dreg + 1);
+ sp_offset += 4;
+ }
+ argsize = 4;
+ } else {
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset, in->dreg);
+ } else {
+ arg->opcode = OP_X86_PUSH;
+ MONO_ADD_INS (cfg->cbb, arg);
+ }
+ argsize = 4;
}
+ } else {
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset, in->dreg);
+ } else {
+ arg->opcode = OP_X86_PUSH;
+ MONO_ADD_INS (cfg->cbb, arg);
+ }
+ argsize = 4;
}
break;
case ArgInIReg:
arg->opcode = OP_MOVE;
arg->dreg = ainfo->reg;
+ MONO_ADD_INS (cfg->cbb, arg);
argsize = 0;
break;
default:
g_assert_not_reached ();
}
-
- MONO_ADD_INS (cfg->cbb, arg);
- sp_offset += argsize;
+ sp_offset = (cfg->arch.no_pushes) ? ainfo->offset : (sp_offset + argsize);
if (cfg->compute_gc_maps) {
if (argsize == 4) {
}
} else {
/* i8/r8 */
- for (j = 0; j < argsize; j += 4)
- emit_gc_param_slot_def (cfg, sp_offset - j, NULL);
+ for (j = 0; j < argsize; j += 4) {
+ if (cfg->arch.no_pushes)
+ emit_gc_param_slot_def (cfg, sp_offset + j, NULL);
+ else
+ emit_gc_param_slot_def (cfg, sp_offset - j, NULL);
+ }
}
}
}
if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG) && (i == sentinelpos)) {
/* Emit the signature cookie just before the implicit arguments */
emit_sig_cookie (cfg, call, cinfo);
- sp_offset += 4;
+ sp_offset = (cfg->arch.no_pushes) ? cinfo->sig_cookie.offset : (sp_offset + 4);
emit_gc_param_slot_def (cfg, sp_offset, NULL);
}
}
mono_call_inst_add_outarg_reg (cfg, call, vtarg->dreg, cinfo->ret.reg, FALSE);
} else if (cinfo->vtype_retaddr && cinfo->vret_arg_index == 0) {
- MonoInst *vtarg;
- MONO_INST_NEW (cfg, vtarg, OP_X86_PUSH);
- vtarg->type = STACK_MP;
- vtarg->sreg1 = call->vret_var->dreg;
- MONO_ADD_INS (cfg->cbb, vtarg);
- sp_offset += 4;
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, cinfo->ret.offset, call->vret_var->dreg);
+ sp_offset = cinfo->ret.offset;
+ } else {
+ MonoInst *vtarg;
+ MONO_INST_NEW (cfg, vtarg, OP_X86_PUSH);
+ vtarg->type = STACK_MP;
+ vtarg->sreg1 = call->vret_var->dreg;
+ MONO_ADD_INS (cfg->cbb, vtarg);
+ sp_offset += 4;
+ }
emit_gc_param_slot_def (cfg, sp_offset, NULL);
}
/* if the function returns a struct on stack, the called method already does a ret $0x4 */
- if (cinfo->ret.storage != ArgValuetypeInReg)
- cinfo->stack_usage -= 4;
+ if (!cfg->arch.no_pushes)
+ cinfo->stack_usage -= cinfo->callee_stack_pop;
}
call->stack_usage = cinfo->stack_usage;
call->stack_align_amount = cinfo->stack_align_amount;
- cfg->arch.param_area_size = MAX (cfg->arch.param_area_size, sp_offset);
+ if (!cfg->arch.no_pushes)
+ cfg->arch.param_area_size = MAX (cfg->arch.param_area_size, sp_offset);
}
void
else {
if (cfg->gsharedvt && mini_is_gsharedvt_klass (cfg, ins->klass)) {
/* Pass by addr */
- MONO_INST_NEW (cfg, arg, OP_X86_PUSH);
- arg->sreg1 = src->dreg;
- MONO_ADD_INS (cfg->cbb, arg);
+ if (cfg->arch.no_pushes) {
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset, src->dreg);
+ } else {
+ MONO_INST_NEW (cfg, arg, OP_X86_PUSH);
+ arg->sreg1 = src->dreg;
+ MONO_ADD_INS (cfg->cbb, arg);
+ }
} else if (size <= 4) {
- MONO_INST_NEW (cfg, arg, OP_X86_PUSH_MEMBASE);
- arg->sreg1 = src->dreg;
-
- MONO_ADD_INS (cfg->cbb, arg);
- } else if (size <= 20) {
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, ALIGN_TO (size, 4));
- mini_emit_memcpy (cfg, X86_ESP, 0, src->dreg, 0, size, 4);
+ if (cfg->arch.no_pushes) {
+ int dreg = mono_alloc_ireg (cfg);
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, dreg, src->dreg, 0);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, X86_ESP, ainfo->offset, dreg);
+ } else {
+ MONO_INST_NEW (cfg, arg, OP_X86_PUSH_MEMBASE);
+ arg->sreg1 = src->dreg;
+ MONO_ADD_INS (cfg->cbb, arg);
+ }
+ } else if (size <= 20) {
+ if (cfg->arch.no_pushes) {
+ mini_emit_memcpy (cfg, X86_ESP, ainfo->offset, src->dreg, 0, size, 4);
+ } else {
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, ALIGN_TO (size, 4));
+ mini_emit_memcpy (cfg, X86_ESP, 0, src->dreg, 0, size, 4);
+ }
} else {
- MONO_INST_NEW (cfg, arg, OP_X86_PUSH_OBJ);
- arg->inst_basereg = src->dreg;
- arg->inst_offset = 0;
- arg->inst_imm = size;
+ if (cfg->arch.no_pushes) {
+ // FIXME: Code growth
+ mini_emit_memcpy (cfg, X86_ESP, ainfo->offset, src->dreg, 0, size, 4);
+ } else {
+ MONO_INST_NEW (cfg, arg, OP_X86_PUSH_OBJ);
+ arg->inst_basereg = src->dreg;
+ arg->inst_offset = 0;
+ arg->inst_imm = size;
- MONO_ADD_INS (cfg->cbb, arg);
+ MONO_ADD_INS (cfg->cbb, arg);
+ }
}
}
}
}
static unsigned char*
-mono_emit_stack_alloc (guchar *code, MonoInst* tree)
+mono_emit_stack_alloc (MonoCompile *cfg, guchar *code, MonoInst* tree)
{
int sreg = tree->sreg1;
int need_touch = FALSE;
x86_push_reg (code, X86_EDI);
x86_mov_reg_imm (code, X86_ECX, (0x1000 >> 2));
x86_alu_reg_reg (code, X86_XOR, X86_EAX, X86_EAX);
- x86_lea_membase (code, X86_EDI, X86_ESP, 12);
+ if (cfg->param_area && cfg->arch.no_pushes)
+ x86_lea_membase (code, X86_EDI, X86_ESP, 12 + ALIGN_TO (cfg->param_area, MONO_ARCH_FRAME_ALIGNMENT));
+ else
+ x86_lea_membase (code, X86_EDI, X86_ESP, 12);
x86_cld (code);
x86_prefix (code, X86_REP_PREFIX);
x86_stosl (code);
x86_mov_reg_reg (code, X86_ECX, sreg, 4);
x86_alu_reg_reg (code, X86_XOR, X86_EAX, X86_EAX);
- x86_lea_membase (code, X86_EDI, X86_ESP, offset);
+ if (cfg->param_area && cfg->arch.no_pushes)
+ x86_lea_membase (code, X86_EDI, X86_ESP, offset + ALIGN_TO (cfg->param_area, MONO_ARCH_FRAME_ALIGNMENT));
+ else
+ x86_lea_membase (code, X86_EDI, X86_ESP, offset);
x86_cld (code);
x86_prefix (code, X86_REP_PREFIX);
x86_stosl (code);
case OP_VCALL2:
case OP_VOIDCALL:
case OP_CALL:
+ case OP_FCALL_REG:
+ case OP_LCALL_REG:
+ case OP_VCALL_REG:
+ case OP_VCALL2_REG:
+ case OP_VOIDCALL_REG:
+ case OP_CALL_REG:
+ case OP_FCALL_MEMBASE:
+ case OP_LCALL_MEMBASE:
+ case OP_VCALL_MEMBASE:
+ case OP_VCALL2_MEMBASE:
+ case OP_VOIDCALL_MEMBASE:
+ case OP_CALL_MEMBASE: {
+ CallInfo *cinfo;
+
call = (MonoCallInst*)ins;
- if (ins->flags & MONO_INST_HAS_METHOD)
- code = emit_call (cfg, code, MONO_PATCH_INFO_METHOD, call->method);
- else
- code = emit_call (cfg, code, MONO_PATCH_INFO_ABS, call->fptr);
+ cinfo = (CallInfo*)call->call_info;
+
+ switch (ins->opcode) {
+ case OP_FCALL:
+ case OP_LCALL:
+ case OP_VCALL:
+ case OP_VCALL2:
+ case OP_VOIDCALL:
+ case OP_CALL:
+ if (ins->flags & MONO_INST_HAS_METHOD)
+ code = emit_call (cfg, code, MONO_PATCH_INFO_METHOD, call->method);
+ else
+ code = emit_call (cfg, code, MONO_PATCH_INFO_ABS, call->fptr);
+ break;
+ case OP_FCALL_REG:
+ case OP_LCALL_REG:
+ case OP_VCALL_REG:
+ case OP_VCALL2_REG:
+ case OP_VOIDCALL_REG:
+ case OP_CALL_REG:
+ x86_call_reg (code, ins->sreg1);
+ break;
+ case OP_FCALL_MEMBASE:
+ case OP_LCALL_MEMBASE:
+ case OP_VCALL_MEMBASE:
+ case OP_VCALL2_MEMBASE:
+ case OP_VOIDCALL_MEMBASE:
+ case OP_CALL_MEMBASE:
+ x86_call_membase (code, ins->sreg1, ins->inst_offset);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
ins->flags |= MONO_INST_GC_CALLSITE;
ins->backend.pc_offset = code - cfg->native_code;
- if (call->stack_usage && !CALLCONV_IS_STDCALL (call->signature)) {
+ if (call->stack_usage && !CALLCONV_IS_STDCALL (call->signature) && !cfg->arch.no_pushes) {
/* a pop is one byte, while an add reg, imm is 3. So if there are 4 or 8
* bytes to pop, we want to use pops. GCC does this (note it won't happen
* for P4 or i686 because gcc will avoid using pop push at all. But we aren't
} else {
x86_alu_reg_imm (code, X86_ADD, X86_ESP, call->stack_usage);
}
+ } else if (cinfo->callee_stack_pop && cfg->arch.no_pushes) {
+ /* Have to compensate for the stack space popped by the callee */
+ x86_alu_reg_imm (code, X86_SUB, X86_ESP, cinfo->callee_stack_pop);
}
code = emit_move_return_value (cfg, ins, code);
break;
- case OP_FCALL_REG:
- case OP_LCALL_REG:
- case OP_VCALL_REG:
- case OP_VCALL2_REG:
- case OP_VOIDCALL_REG:
- case OP_CALL_REG:
- call = (MonoCallInst*)ins;
- x86_call_reg (code, ins->sreg1);
- ins->flags |= MONO_INST_GC_CALLSITE;
- ins->backend.pc_offset = code - cfg->native_code;
- if (call->stack_usage && !CALLCONV_IS_STDCALL (call->signature)) {
- if (call->stack_usage == 4)
- x86_pop_reg (code, X86_ECX);
- else
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, call->stack_usage);
- }
- code = emit_move_return_value (cfg, ins, code);
- break;
- case OP_FCALL_MEMBASE:
- case OP_LCALL_MEMBASE:
- case OP_VCALL_MEMBASE:
- case OP_VCALL2_MEMBASE:
- case OP_VOIDCALL_MEMBASE:
- case OP_CALL_MEMBASE:
- call = (MonoCallInst*)ins;
-
- x86_call_membase (code, ins->sreg1, ins->inst_offset);
- ins->flags |= MONO_INST_GC_CALLSITE;
- ins->backend.pc_offset = code - cfg->native_code;
- if (call->stack_usage && !CALLCONV_IS_STDCALL (call->signature)) {
- if (call->stack_usage == 4)
- x86_pop_reg (code, X86_ECX);
- else
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, call->stack_usage);
- }
- code = emit_move_return_value (cfg, ins, code);
- break;
+ }
case OP_X86_PUSH:
+ g_assert (!cfg->arch.no_pushes);
x86_push_reg (code, ins->sreg1);
break;
case OP_X86_PUSH_IMM:
+ g_assert (!cfg->arch.no_pushes);
x86_push_imm (code, ins->inst_imm);
break;
case OP_X86_PUSH_MEMBASE:
+ g_assert (!cfg->arch.no_pushes);
x86_push_membase (code, ins->inst_basereg, ins->inst_offset);
break;
case OP_X86_PUSH_OBJ:
+ g_assert (!cfg->arch.no_pushes);
x86_alu_reg_imm (code, X86_SUB, X86_ESP, ins->inst_imm);
x86_push_reg (code, X86_EDI);
x86_push_reg (code, X86_ESI);
/* keep alignment */
x86_alu_reg_imm (code, X86_ADD, ins->sreg1, MONO_ARCH_LOCALLOC_ALIGNMENT - 1);
x86_alu_reg_imm (code, X86_AND, ins->sreg1, ~(MONO_ARCH_LOCALLOC_ALIGNMENT - 1));
- code = mono_emit_stack_alloc (code, ins);
+ code = mono_emit_stack_alloc (cfg, code, ins);
x86_mov_reg_reg (code, ins->dreg, X86_ESP, 4);
+ if (cfg->param_area && cfg->arch.no_pushes)
+ x86_alu_reg_imm (code, X86_ADD, ins->dreg, ALIGN_TO (cfg->param_area, MONO_ARCH_FRAME_ALIGNMENT));
break;
case OP_LOCALLOC_IMM: {
guint32 size = ins->inst_imm;
x86_mov_reg_imm (code, ins->dreg, size);
ins->sreg1 = ins->dreg;
- code = mono_emit_stack_alloc (code, ins);
+ code = mono_emit_stack_alloc (cfg, code, ins);
x86_mov_reg_reg (code, ins->dreg, X86_ESP, 4);
} else {
x86_alu_reg_imm (code, X86_SUB, X86_ESP, size);
x86_mov_reg_reg (code, ins->dreg, X86_ESP, 4);
}
+ if (cfg->param_area && cfg->arch.no_pushes)
+ x86_alu_reg_imm (code, X86_ADD, ins->dreg, ALIGN_TO (cfg->param_area, MONO_ARCH_FRAME_ALIGNMENT));
break;
}
case OP_THROW: {
case OP_START_HANDLER: {
MonoInst *spvar = mono_find_spvar_for_region (cfg, bb->region);
x86_mov_membase_reg (code, spvar->inst_basereg, spvar->inst_offset, X86_ESP, 4);
+ if (cfg->param_area && cfg->arch.no_pushes) {
+ x86_alu_reg_imm (code, X86_SUB, X86_ESP, ALIGN_TO (cfg->param_area, MONO_ARCH_FRAME_ALIGNMENT));
+ }
break;
}
case OP_ENDFINALLY: {
cfg->frame_reg = X86_ESP;
}
+ if (cfg->arch.no_pushes) {
+ cfg->stack_offset += cfg->param_area;
+ cfg->stack_offset = ALIGN_TO (cfg->stack_offset, MONO_ARCH_FRAME_ALIGNMENT);
+ }
+
alloc_size = cfg->stack_offset;
pos = 0;
MonoJitArgumentInfo *arg_info = alloca (sizeof (MonoJitArgumentInfo) * (sig->param_count + 1));
stack_to_pop = mono_arch_get_argument_info (NULL, sig, sig->param_count, arg_info);
- } else if (cinfo->vtype_retaddr)
- stack_to_pop = 4;
+ } else if (cinfo->callee_stack_pop)
+ stack_to_pop = cinfo->callee_stack_pop;
else
stack_to_pop = 0;
#endif /* HAVE_WORKING_SIGALTSTACK */
#endif /* !HOST_WIN32 */
+/* #define MONO_X86_NO_PUSHES 1 */
+
#define MONO_ARCH_SUPPORT_TASKLETS 1
#ifndef DISABLE_SIMD
typedef struct {
gboolean need_stack_frame_inited;
gboolean need_stack_frame;
+ gboolean no_pushes;
int sp_fp_offset, param_area_size;
} MonoCompileArch;
guint8 *ip;
MonoCompile *cfg;
int dfn, i, code_size_ratio;
+#ifndef DISABLE_SSA
gboolean deadce_has_run = FALSE;
+#endif
gboolean try_generic_shared, try_llvm = FALSE;
MonoMethod *method_to_compile, *method_to_register;
gboolean method_is_gshared = FALSE;
*/
MonoContext orig_ex_ctx;
gboolean orig_ex_ctx_set;
+
+ /*
+ * Stores if we need to run a chained exception in Windows.
+ */
+ gboolean mono_win_chained_exception_needs_run;
} MonoJitTlsData;
/*
MonoClass* mini_class_get_container_class (MonoClass *class) MONO_INTERNAL;
MonoGenericContext* mini_class_get_context (MonoClass *class) MONO_INTERNAL;
-MonoType* mini_replace_type (MonoType *type) MONO_INTERNAL;
+MonoType* mini_replace_type (MonoType *type) MONO_LLVM_INTERNAL;
MonoType* mini_get_basic_type_from_generic (MonoGenericSharingContext *gsctx, MonoType *type) MONO_INTERNAL;
MonoType* mini_type_get_underlying_type (MonoGenericSharingContext *gsctx, MonoType *type) MONO_INTERNAL;
MonoMethod* mini_get_shared_method (MonoMethod *method) MONO_INTERNAL;
[MethodImplAttribute (MethodImplOptions.NoInlining)]
static void t_14217_inner (BugStruct bug) {
}
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct EmptyStruct {
+ }
+
+ class EmptyClass {
+ public static EmptyStruct s;
+ }
+
+ // #20349
+ static int test_0_empty_struct_as_static () {
+ var s = EmptyClass.s;
+ return 0;
+ }
}
#if MOBILE
else
sreg = -1;
if (sreg != -1) {
- MonoInst *tins;
+ MonoInst *tins, *var;
skip = FALSE;
for (tins = ins->prev; tins; tins = tins->prev) {
}
if (skip)
continue;
+ var = get_vreg_to_inst (cfg, sreg);
+ if (var && (var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT)))
+ continue;
ins->sreg1 = sreg;
}
--- /dev/null
+#ifndef __MONO_SUPPORT_S390X_H__
+#define __MONO_SUPPORT_S390X_H__
+
+#define S390_SET(loc, dr, v) \
+ do { \
+ guint64 val = (guint64) v; \
+ if (s390_is_uimm16(val)) { \
+ s390_llill(loc, dr, val); \
+ } else if (s390_is_uimm32(val)) { \
+ s390_llilf(loc, dr, val); \
+ } else { \
+ guint32 hi = (val) >> 32; \
+ guint32 lo = (val) & 0xffffffff; \
+ s390_iihf(loc, dr, hi); \
+ s390_iilf(loc, dr, lo); \
+ } \
+ } while (0)
+
+#define S390_LONG(loc, opy, op, r, ix, br, off) \
+ if (s390_is_imm20(off)) { \
+ s390_##opy (loc, r, ix, br, off); \
+ } else { \
+ if (ix == 0) { \
+ S390_SET(loc, s390_r13, off); \
+ s390_la (loc, s390_r13, s390_r13, br, 0); \
+ } else { \
+ s390_la (loc, s390_r13, ix, br, 0); \
+ S390_SET (loc, s390_r0, off); \
+ s390_agr (loc, s390_r13, s390_r0); \
+ } \
+ s390_##op (loc, r, 0, s390_r13, 0); \
+ }
+
+#define S390_SET_MASK(loc, dr, v) \
+ do { \
+ if (s390_is_imm16 (v)) { \
+ s390_lghi (loc, dr, v); \
+ } else if (s390_is_imm32 (v)) { \
+ s390_lgfi (loc, dr, v); \
+ } else { \
+ gint64 val = (gint64) v; \
+ guint32 hi = (val) >> 32; \
+ guint32 lo = (val) & 0xffffffff; \
+ s390_iilf(loc, dr, lo); \
+ s390_iihf(loc, dr, hi); \
+ } \
+ } while (0)
+
+#define S390_CALL_TEMPLATE(loc, r) \
+ do { \
+ s390_iihf (loc, r, 0); \
+ s390_iilf (loc, r, 0); \
+ s390_basr (loc, s390_r14, r); \
+ } while (0)
+
+#define S390_BR_TEMPLATE(loc, r) \
+ do { \
+ s390_iihf (loc, r, 0); \
+ s390_iilf (loc, r, 0); \
+ s390_br (loc, r); \
+ } while (0)
+
+#define S390_LOAD_TEMPLATE(loc, r) \
+ do { \
+ s390_iihf (loc, r, 0); \
+ s390_iilf (loc, r, 0); \
+ } while (0)
+
+#define S390_EMIT_CALL(loc, t) \
+ do { \
+ gint64 val = (gint64) t; \
+ guint32 hi = (val) >> 32; \
+ guint32 lo = (val) & 0xffffffff; \
+ uintptr_t p = (uintptr_t) loc; \
+ p += 2; \
+ *(guint32 *) p = hi; \
+ p += 6; \
+ *(guint32 *) p = lo; \
+ } while (0)
+
+#define S390_EMIT_LOAD(loc, v) \
+ do { \
+ gint64 val = (gint64) v; \
+ guint32 hi = (val) >> 32; \
+ guint32 lo = (val) & 0xffffffff; \
+ uintptr_t p = (uintptr_t) loc; \
+ p += 2; \
+ *(guint32 *) p = hi; \
+ p += 6; \
+ *(guint32 *) p = lo; \
+ } while (0)
+
+#endif /* __MONO_SUPPORT_S390X_H__ */
#include "mini.h"
#include "mini-s390x.h"
+#include "support-s390x.h"
/*========================= End of Includes ========================*/
start = code = mono_domain_code_reserve (domain, 28);
- s390_basr (code, s390_r1, 0);
- s390_j (code, 6);
- s390_llong(code, addr);
- s390_lg (code, s390_r1, 0, s390_r1, 4);
+ S390_SET (code, s390_r1, addr);
s390_aghi (code, this_pos, sizeof(MonoObject));
s390_br (code, s390_r1);
gint32 displace;
unsigned short opcode;
- opcode = *((unsigned short *) (orig_code - 6));
- if (opcode == 0xc0e5) {
+ opcode = *((unsigned short *) (orig_code - 2));
+ if (opcode == 0x0dee) {
+ /* This should be a 'iihf/iilf' sequence */
+ S390_EMIT_CALL((orig_code - 14), addr);
+ mono_arch_flush_icache (orig_code - 14, 12);
+ } else {
+fprintf(stderr, "%p %02x %02x %02x %02x\n",
+&orig_code[-14], orig_code[-12], orig_code[-11], orig_code[-6], orig_code[-5]);
+fflush(stderr);
/* This is the 'brasl' instruction */
orig_code -= 4;
displace = ((gssize) addr - (gssize) (orig_code - 2)) / 2;
s390_patch_rel (orig_code, displace);
mono_arch_flush_icache (orig_code, 4);
- } else {
- /* This should be a 'lg %r14,4(%r13)' then a 'basr r14, r14' instruction */
- g_assert (orig_code [-8] == 0xe3);
- g_assert (orig_code [-7] == 0xe0);
- g_assert (orig_code [-6] == 0xd0);
- g_assert (orig_code [-5] == 0x04);
- g_assert (orig_code [-4] == 0x00);
- g_assert (orig_code [-3] == 0x04);
- opcode = *((unsigned short*) (orig_code - 2));
- g_assert (opcode == 0x0dee);
-
- /* The call address is stored in the 8 bytes preceeding the basr instruction */
- s390_patch_addr(orig_code - 16, (gssize)addr);
- mono_arch_flush_icache (orig_code - 16, 8);
}
}
{
char *tramp_name;
guint8 *buf, *tramp, *code;
- int i, offset, lmfOffset;
+ int i, offset, lmfOffset, has_caller;
GSList *unwind_ops = NULL;
MonoJumpInfo *ji = NULL;
code = buf = mono_global_codeman_reserve(512);
+ if ((tramp_type == MONO_TRAMPOLINE_JUMP) ||
+ (tramp_type == MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD))
+ has_caller = 0;
+ else
+ has_caller = 1;
+
/*-----------------------------------------------------------
STEP 0: First create a non-standard function prologue with a
stack size big enough to save our registers.
method.
----------------------------------------------------------*/
- s390_basr (buf, s390_r13, 0);
- s390_j (buf, 6);
- s390_llong(buf, mono_get_lmf_addr);
- s390_lg (buf, s390_r1, 0, s390_r13, 4);
+ S390_SET (buf, s390_r1, mono_get_lmf_addr);
s390_basr (buf, s390_r14, s390_r1);
/*---------------------------------------------------------------*/
/*---------------------------------------------------------------*/
/* save the current IP */
/*---------------------------------------------------------------*/
- if (tramp_type == MONO_TRAMPOLINE_JUMP) {
- s390_lghi (buf, s390_r1, 0);
- } else {
+ if (has_caller) {
s390_lg (buf, s390_r1, 0, s390_r1, S390_RET_ADDR_OFFSET);
- // s390_la (buf, s390_r1, 0, s390_r1, 0);
+ } else {
+ s390_lghi (buf, s390_r1, 0);
}
s390_stg (buf, s390_r1, 0, s390_r13, G_STRUCT_OFFSET(MonoLMF, eip));
s390_la (buf, s390_r2, 0, STK_BASE, CREATE_STACK_SIZE);
/* Arg 2: code (next address to the instruction that called us) */
- if (tramp_type == MONO_TRAMPOLINE_JUMP) {
- s390_lghi (buf, s390_r3, 0);
- } else {
+ if (has_caller) {
s390_lg (buf, s390_r3, 0, s390_r11, S390_RET_ADDR_OFFSET);
+ } else {
+ s390_lghi (buf, s390_r3, 0);
}
/* Arg 3: Trampoline argument */
/* Arg 4: trampoline address. Ignore for now */
/* Calculate call address and call the C trampoline. Return value will be in r2 */
- s390_basr (buf, s390_r13, 0);
- s390_j (buf, 6);
tramp = (guint8*)mono_get_trampoline_func (tramp_type);
- s390_llong (buf, tramp);
- s390_lg (buf, s390_r1, 0, s390_r13, 4);
+ S390_SET (buf, s390_r1, tramp);
s390_basr (buf, s390_r14, s390_r1);
/* OK, code address is now on r2. Move it to r1, so that we
/*========================= End of Function ========================*/
+/*------------------------------------------------------------------*/
+/* */
+/* Name - mono_arch_invalidate_method */
+/* */
+/* Function - */
+/* */
+/*------------------------------------------------------------------*/
+
+void
+mono_arch_invalidate_method (MonoJitInfo *ji, void *func, gpointer func_arg)
+{
+ /* FIXME: This is not thread safe */
+ guint8 *code = ji->code_start;
+
+ S390_SET (code, s390_r1, func);
+ S390_SET (code, s390_r2, func_arg);
+ s390_br (code, s390_r1);
+
+}
+
+/*========================= End of Function ========================*/
+
/*------------------------------------------------------------------*/
/* */
/* Name - mono_arch_create_specific_trampoline */
/*----------------------------------------------------------*/
code = buf = mono_domain_code_reserve (domain, SPECIFIC_TRAMPOLINE_SIZE);
- s390_basr (buf, s390_r1, 0);
- s390_j (buf, 6);
- s390_llong(buf, arg1);
- s390_lg (buf, s390_r1, 0, s390_r1, 4);
+ S390_SET (buf, s390_r1, arg1);
displace = (tramp - buf) / 2;
s390_jg (buf, displace);
start = code = mono_domain_code_reserve (domain, buf_len);
- s390_basr (code, s390_r1, 0);
- s390_j (code, 6);
- s390_llong(code, mrgctx);
- s390_lg (code, MONO_ARCH_RGCTX_REG, 0, s390_r1, 4);
+ S390_SET (code, MONO_ARCH_RGCTX_REG, mrgctx);
displace = ((uintptr_t) addr - (uintptr_t) code) / 2;
s390_jg (code, displace);
g_assert ((code - start) < buf_len);
/*========================= End of Function ========================*/
+/*------------------------------------------------------------------*/
+/* */
+/* Name - handler_block_trampoline_helper */
+/* */
+/* Function - */
+/* */
+/*------------------------------------------------------------------*/
+
+static void
+handler_block_trampoline_helper (gpointer *ptr)
+{
+ MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
+ *ptr = jit_tls->handler_block_return_address;
+}
+
+/*========================= End of Function ========================*/
+
+/*------------------------------------------------------------------*/
+/* */
+/* Name - mono_arch_create_handler_block_trampoline */
+/* */
+/* Function - */
+/* */
+/*------------------------------------------------------------------*/
+
+gpointer
+mono_arch_create_handler_block_trampoline (MonoTrampInfo **info, gboolean aot)
+{
+ guint8 *tramp = mono_get_trampoline_code (MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD);
+ guint8 *code, *buf;
+ int tramp_size = 64;
+ MonoJumpInfo *ji = NULL;
+ GSList *unwind_ops = NULL;
+
+ g_assert (!aot);
+
+ code = buf = mono_global_codeman_reserve (tramp_size);
+
+ /*
+ * This trampoline restore the call chain of the handler block
+ * then jumps into the code that deals with it.
+ */
+
+ if (mono_get_jit_tls_offset () != -1) {
+ s390_ear (code, s390_r1, 0);
+ s390_sllg (code, s390_r1, s390_r1, 0, 32);
+ s390_ear (code, s390_r1, 1);
+ S390_SET (code, s390_r14, mono_get_jit_tls_offset());
+ s390_lg (code, s390_r14, s390_r1, 0, G_STRUCT_OFFSET(MonoJitTlsData, handler_block_return_address));
+ /*
+ * Simulate a call
+ */
+ S390_SET (code, s390_r1, tramp);
+ s390_br (code, s390_r1);
+ } else {
+ /*
+ * Slow path uses a C helper
+ */
+ S390_SET (code, s390_r2, tramp);
+ S390_SET (code, s390_r1, handler_block_trampoline_helper);
+ s390_br (code, s390_r1);
+ }
+
+ mono_arch_flush_icache (buf, code - buf);
+ g_assert (code - buf <= tramp_size);
+
+ if (info)
+ *info = mono_tramp_info_create ("handler_block_trampoline", buf, code - buf, ji, unwind_ops);
+
+ return buf;
+}
+
+/*========================= End of Function ========================*/
+
/*------------------------------------------------------------------*/
/* */
/* Name - mono_arch_create_generic_class_init_trampoline */
guint8 *code, *buf;
static int byte_offset = -1;
static guint8 bitmask;
- guint8 *jump;
gint32 displace;
int tramp_size;
GSList *unwind_ops = NULL;
#if defined (HAVE_SYS_ZLIB)
#include <zlib.h>
#endif
+#include <glib.h>
#include <mono/metadata/profiler.h>
#include <mono/metadata/object.h>
#include <mono/metadata/debug-helpers.h>
}
} else if (counters_sort_mode == COUNTERS_SORT_TIME) {
for (ctimestamp = counters_timestamps; ctimestamp; ctimestamp = ctimestamp->next) {
- fprintf (outfile, "\t%lld:%02lld:%02lld:%02lld.%03lld:\n", ctimestamp->value / 1000 / 60 / 60 / 24 % 1000,
- ctimestamp->value / 1000 / 60 / 60 % 24, ctimestamp->value / 1000 / 60 % 60,
- ctimestamp->value / 1000 % 60, ctimestamp->value % 1000);
+ fprintf (outfile, "\t%llu:%02llu:%02llu:%02llu.%03llu:\n",
+ (unsigned long long) (ctimestamp->value / 1000 / 60 / 60 / 24 % 1000),
+ (unsigned long long) (ctimestamp->value / 1000 / 60 / 60 % 24),
+ (unsigned long long) (ctimestamp->value / 1000 / 60 % 60),
+ (unsigned long long) (ctimestamp->value / 1000 % 60),
+ (unsigned long long) (ctimestamp->value % 1000));
for (csection = ctimestamp->sections; csection; csection = csection->next) {
fprintf (outfile, "\t\t%s:\n", section_name (csection->value));
counter->name, type_name (counter->type), unit_name (counter->unit), variance_name (counter->variance));
for (cvalue = counter->values; cvalue; cvalue = cvalue->next) {
- snprintf (strtimestamp, sizeof (strtimestamp), "%lld:%02lld:%02lld:%02lld.%03lld", cvalue->timestamp / 1000 / 60 / 60 / 24 % 1000,
- cvalue->timestamp / 1000 / 60 / 60 % 24, cvalue->timestamp / 1000 / 60 % 60,
- cvalue->timestamp / 1000 % 60, cvalue->timestamp % 1000);
+ snprintf (strtimestamp, sizeof (strtimestamp), "%llu:%02llu:%02llu:%02llu.%03llu",
+ (unsigned long long) (cvalue->timestamp / 1000 / 60 / 60 / 24 % 1000),
+ (unsigned long long) (cvalue->timestamp / 1000 / 60 / 60 % 24),
+ (unsigned long long) (cvalue->timestamp / 1000 / 60 % 60),
+ (unsigned long long) (cvalue->timestamp / 1000 % 60),
+ (unsigned long long) (cvalue->timestamp % 1000));
dump_counters_value (counter, "\t\t\t%s", strtimestamp, cvalue->buffer);
}
print_usym (UnmanagedSymbol* um)
{
if (um->parent)
- fprintf (outfile, "\t%6d %6.2f %-36s in %s\n", um->sample_hits, um->sample_hits*100.0/num_stat_samples, um->name, um->parent->name);
+ fprintf (outfile, "\t%6zd %6.2f %-36s in %s\n", um->sample_hits, um->sample_hits*100.0/num_stat_samples, um->name, um->parent->name);
else
- fprintf (outfile, "\t%6d %6.2f %s\n", um->sample_hits, um->sample_hits*100.0/num_stat_samples, um->name);
+ fprintf (outfile, "\t%6zd %6.2f %s\n", um->sample_hits, um->sample_hits*100.0/num_stat_samples, um->name);
}
static int
fprintf (outfile, "object %p (%s) unmarked\n", (void*)hs->objects_hash [i], hs->objects_hash [i]->hklass->klass->name);
}
}
- fprintf (outfile, "Total unmarked: %d/%d\n", num_unmarked, hs->objects_count);
+ fprintf (outfile, "Total unmarked: %zd/%zd\n", num_unmarked, hs->objects_count);
free (marks);
}
typedef struct {
FILE *file;
#if defined (HAVE_SYS_ZLIB)
- gzFile *gzfile;
+ gzFile gzfile;
#endif
unsigned char *buf;
int size;
for (i = 0; i < num_tracked_objects; ++i) {
if (tracked_objects [i] != obj)
continue;
- fprintf (outfile, "Object %p created (%s, %llu bytes) at %.3f secs.\n", (void*)obj, cd->name, size, (timestamp - startup_time)/1000000000.0);
+ fprintf (outfile, "Object %p created (%s, %llu bytes) at %.3f secs.\n", (void*)obj, cd->name, (unsigned long long) size, (timestamp - startup_time)/1000000000.0);
if (bt && bt->count) {
int k;
for (k = 0; k < bt->count; ++k)
thread_id = read_int64 (p + 32);
method_base = read_int64 (p + 40);
if (debug)
- fprintf (outfile, "buf: thread:%x, len: %d, time: %llu, file offset: %llu\n", thread_id, len, time_base, file_offset);
+ fprintf (outfile, "buf: thread:%zx, len: %d, time: %llu, file offset: %llu\n", thread_id, len, (unsigned long long) time_base, (unsigned long long) file_offset);
thread = load_thread (ctx, thread_id);
if (!load_data (ctx, len))
return 0;
if (subtype == TYPE_GC_RESIZE) {
uint64_t new_size = decode_uleb128 (p, &p);
if (debug)
- fprintf (outfile, "gc heap resized to %llu\n", new_size);
+ fprintf (outfile, "gc heap resized to %llu\n", (unsigned long long) new_size);
gc_resizes++;
if (new_size > max_heap_size)
max_heap_size = new_size;
uint64_t ev = decode_uleb128 (p, &p);
int gen = decode_uleb128 (p, &p);
if (debug)
- fprintf (outfile, "gc event for gen%d: %s at %llu (thread: 0x%x)\n", gen, gc_event_name (ev), time_base, thread->thread_id);
+ fprintf (outfile, "gc event for gen%d: %s at %llu (thread: 0x%zx)\n", gen, gc_event_name (ev), (unsigned long long) time_base, thread->thread_id);
if (gen > 2) {
fprintf (outfile, "incorrect gc gen: %d\n", gen);
break;
return 0;
}
if (debug)
- fprintf (outfile, "loaded class %p (%s in %p) at %llu\n", (void*)(ptr_base + ptrdiff), p, (void*)(ptr_base + imptrdiff), time_base);
+ fprintf (outfile, "loaded class %p (%s in %p) at %llu\n", (void*)(ptr_base + ptrdiff), p, (void*)(ptr_base + imptrdiff), (unsigned long long) time_base);
if (!error)
add_class (ptr_base + ptrdiff, (char*)p);
while (*p) p++;
return 0;
}
if (debug)
- fprintf (outfile, "loaded image %p (%s) at %llu\n", (void*)(ptr_base + ptrdiff), p, time_base);
+ fprintf (outfile, "loaded image %p (%s) at %llu\n", (void*)(ptr_base + ptrdiff), p, (unsigned long long) time_base);
if (!error)
add_image (ptr_base + ptrdiff, (char*)p);
while (*p) p++;
LOG_TIME (time_base, tdiff);
time_base += tdiff;
if (debug)
- fprintf (outfile, "alloced object %p, size %llu (%s) at %llu\n", (void*)OBJ_ADDR (objdiff), len, lookup_class (ptr_base + ptrdiff)->name, time_base);
+ fprintf (outfile, "alloced object %p, size %llu (%s) at %llu\n", (void*)OBJ_ADDR (objdiff), (unsigned long long) len, lookup_class (ptr_base + ptrdiff)->name, (unsigned long long) time_base);
if (has_bt) {
num_bt = 8;
frames = decode_bt (sframes, &num_bt, p, &p, ptr_base);
case TYPE_HEAP: {
int subtype = *p & 0xf0;
if (subtype == TYPE_HEAP_OBJECT) {
- HeapObjectDesc *ho;
+ HeapObjectDesc *ho = NULL;
int i;
intptr_t objdiff = decode_sleb128 (p + 1, &p);
intptr_t ptrdiff = decode_sleb128 (p, &p);
uint64_t size = decode_uleb128 (p, &p);
uintptr_t num = decode_uleb128 (p, &p);
- uintptr_t ref_offset;
+ uintptr_t ref_offset = 0;
uintptr_t last_obj_offset = 0;
ClassDesc *cd = lookup_class (ptr_base + ptrdiff);
if (size) {
track_obj_reference (OBJ_ADDR (obj1diff), OBJ_ADDR (objdiff), cd);
}
if (debug && size)
- fprintf (outfile, "traced object %p, size %llu (%s), refs: %d\n", (void*)OBJ_ADDR (objdiff), size, cd->name, num);
+ fprintf (outfile, "traced object %p, size %llu (%s), refs: %zd\n", (void*)OBJ_ADDR (objdiff), (unsigned long long) size, cd->name, num);
} else if (subtype == TYPE_HEAP_ROOT) {
uintptr_t num = decode_uleb128 (p + 1, &p);
- uintptr_t gc_num = decode_uleb128 (p, &p);
+ uintptr_t gc_num G_GNUC_UNUSED = decode_uleb128 (p, &p);
int i;
for (i = 0; i < num; ++i) {
intptr_t objdiff = decode_sleb128 (p, &p);
/* un unmanaged binary loaded in memory */
uint64_t tdiff = decode_uleb128 (p + 1, &p);
uintptr_t addr = decode_sleb128 (p, &p);
- uint64_t offset = decode_uleb128 (p, &p);
+ uint64_t offset G_GNUC_UNUSED = decode_uleb128 (p, &p);
uintptr_t size = decode_uleb128 (p, &p);
char *name;
LOG_TIME (time_base, tdiff);
} else if (subtype == TYPE_SAMPLE_COUNTERS_DESC) {
uint64_t i, len = decode_uleb128 (p + 1, &p);
for (i = 0; i < len; i++) {
+ uint64_t type, unit, variance, index;
uint64_t section = decode_uleb128 (p, &p);
char *name = pstrdup ((char*)p);
while (*p++);
- uint64_t type = decode_uleb128 (p, &p);
- uint64_t unit = decode_uleb128 (p, &p);
- uint64_t variance = decode_uleb128 (p, &p);
- uint64_t index = decode_uleb128 (p, &p);
+ type = decode_uleb128 (p, &p);
+ unit = decode_uleb128 (p, &p);
+ variance = decode_uleb128 (p, &p);
+ index = decode_uleb128 (p, &p);
add_counter ((int)section, name, (int)type, (int)unit, (int)variance, (int)index);
}
} else if (subtype == TYPE_SAMPLE_COUNTERS) {
uint64_t timestamp = decode_uleb128 (p + 1, &p);
uint64_t time_between = timestamp / 1000 * 1000 * 1000 * 1000 + startup_time;
while (1) {
- uint64_t index = decode_uleb128 (p, &p);
+ uint64_t type, index = decode_uleb128 (p, &p);
if (index == 0)
break;
}
}
- uint64_t type = decode_uleb128 (p, &p);
+ type = decode_uleb128 (p, &p);
value = calloc (1, sizeof (CounterValue));
value->timestamp = timestamp;
break;
}
default:
- fprintf (outfile, "unhandled profiler event: 0x%x at file offset: %llu + %d (len: %d\n)\n", *p, file_offset, p - ctx->buf, len);
+ fprintf (outfile, "unhandled profiler event: 0x%x at file offset: %llu + %ld (len: %d\n)\n", *p, (unsigned long long) file_offset, p - ctx->buf, len);
exit (1);
}
}
bt = traces->traces [j].bt;
if (!bt->count)
continue;
- fprintf (outfile, "\t%llu %s from:\n", traces->traces [j].count, desc);
+ fprintf (outfile, "\t%llu %s from:\n", (unsigned long long) traces->traces [j].count, desc);
for (k = 0; k < bt->count; ++k)
fprintf (outfile, "\t\t%s\n", bt->methods [k]->name);
}
{
int i;
fprintf (outfile, "\nException summary\n");
- fprintf (outfile, "\tThrows: %llu\n", throw_count);
+ fprintf (outfile, "\tThrows: %llu\n", (unsigned long long) throw_count);
dump_traces (&exc_traces, "throws");
for (i = 0; i <= MONO_EXCEPTION_CLAUSE_FAULT; ++i) {
if (!clause_summary [i])
continue;
- fprintf (outfile, "\tExecuted %s clauses: %llu\n", clause_name (i), clause_summary [i]);
+ fprintf (outfile, "\tExecuted %s clauses: %llu\n", clause_name (i), (unsigned long long) clause_summary [i]);
}
}
mdesc->wait_time/1000000000.0, mdesc->max_wait_time/1000000000.0, mdesc->wait_time/1000000000.0/mdesc->contentions);
dump_traces (&mdesc->traces, "contentions");
}
- fprintf (outfile, "\tLock contentions: %llu\n", monitor_contention);
- fprintf (outfile, "\tLock acquired: %llu\n", monitor_acquired);
- fprintf (outfile, "\tLock failures: %llu\n", monitor_failed);
+ fprintf (outfile, "\tLock contentions: %llu\n", (unsigned long long) monitor_contention);
+ fprintf (outfile, "\tLock acquired: %llu\n", (unsigned long long) monitor_acquired);
+ fprintf (outfile, "\tLock failures: %llu\n", (unsigned long long) monitor_failed);
}
static void
int i;
fprintf (outfile, "\nGC summary\n");
fprintf (outfile, "\tGC resizes: %d\n", gc_resizes);
- fprintf (outfile, "\tMax heap size: %llu\n", max_heap_size);
- fprintf (outfile, "\tObject moves: %llu\n", gc_object_moves);
+ fprintf (outfile, "\tMax heap size: %llu\n", (unsigned long long) max_heap_size);
+ fprintf (outfile, "\tObject moves: %llu\n", (unsigned long long) gc_object_moves);
for (i = 0; i < 3; ++i) {
if (!gc_info [i].count)
continue;
fprintf (outfile, "\tGen%d collections: %d, max time: %lluus, total time: %lluus, average: %lluus\n",
- i, gc_info [i].count, gc_info [i].max_time / 1000, gc_info [i].total_time / 1000,
- gc_info [i].total_time / gc_info [i].count / 1000);
+ i, gc_info [i].count,
+ (unsigned long long) (gc_info [i].max_time / 1000),
+ (unsigned long long) (gc_info [i].total_time / 1000),
+ (unsigned long long) (gc_info [i].total_time / gc_info [i].count / 1000));
}
for (i = 0; i < 3; ++i) {
if (!handle_info [i].max_live)
continue;
fprintf (outfile, "\tGC handles %s: created: %llu, destroyed: %llu, max: %llu\n",
- get_handle_name (i), handle_info [i].created, handle_info [i].destroyed, handle_info [i].max_live);
+ get_handle_name (i),
+ (unsigned long long) (handle_info [i].created),
+ (unsigned long long) (handle_info [i].destroyed),
+ (unsigned long long) (handle_info [i].max_live));
dump_traces (&handle_info [i].traces, "created");
}
}
fprintf (outfile, "\nAllocation summary\n");
fprintf (outfile, "%10s %10s %8s Type name\n", "Bytes", "Count", "Average");
}
- fprintf (outfile, "%10llu %10d %8llu %s\n", cd->alloc_size, cd->allocs, cd->alloc_size / cd->allocs, cd->name);
+ fprintf (outfile, "%10llu %10zd %8llu %s\n",
+ (unsigned long long) (cd->alloc_size),
+ cd->allocs,
+ (unsigned long long) (cd->alloc_size / cd->allocs),
+ cd->name);
dump_traces (&cd->traces, "bytes");
}
if (allocs)
- fprintf (outfile, "Total memory allocated: %llu bytes in %d objects\n", size, allocs);
+ fprintf (outfile, "Total memory allocated: %llu bytes in %zd objects\n", (unsigned long long) size, allocs);
}
enum {
fprintf (outfile, "\nMethod call summary\n");
fprintf (outfile, "%8s %8s %10s Method name\n", "Total(ms)", "Self(ms)", "Calls");
}
- fprintf (outfile, "%8llu %8llu %10llu %s\n", msecs, smsecs, cd->calls, cd->name);
+ fprintf (outfile, "%8llu %8llu %10llu %s\n",
+ (unsigned long long) (msecs),
+ (unsigned long long) (smsecs),
+ (unsigned long long) (cd->calls),
+ cd->name);
dump_traces (&cd->traces, "calls");
}
if (calls)
- fprintf (outfile, "Total calls: %llu\n", calls);
+ fprintf (outfile, "Total calls: %llu\n", (unsigned long long) calls);
}
static int
return;
for (j = 0; j < count; ++j) {
HeapClassDesc *cd = revs [j].klass;
- fprintf (outfile, "\t\t%llu references from: %s\n", revs [j].count, cd->klass->name);
+ fprintf (outfile, "\t\t%llu references from: %s\n",
+ (unsigned long long) (revs [j].count),
+ cd->klass->name);
}
}
}
hs->sorted = sorted;
qsort (sorted, ccount, sizeof (void*), compare_heap_class);
- fprintf (outfile, "\n\tHeap shot %d at %.3f secs: size: %llu, object count: %llu, class count: %d, roots: %d\n",
- hs_num, (hs->timestamp - startup_time)/1000000000.0, size, count, ccount, hs->num_roots);
+ fprintf (outfile, "\n\tHeap shot %d at %.3f secs: size: %llu, object count: %llu, class count: %d, roots: %zd\n",
+ hs_num,
+ (hs->timestamp - startup_time)/1000000000.0,
+ (unsigned long long) (size),
+ (unsigned long long) (count),
+ ccount, hs->num_roots);
if (!verbose && ccount > 30)
ccount = 30;
fprintf (outfile, "\t%10s %10s %8s Class name\n", "Bytes", "Count", "Average");
cd = sorted [i];
if (last_hs)
ocd = heap_class_lookup (last_hs, cd->klass);
- fprintf (outfile, "\t%10llu %10llu %8llu %s", cd->total_size, cd->count, cd->total_size / cd->count, cd->klass->name);
+ fprintf (outfile, "\t%10llu %10llu %8llu %s",
+ (unsigned long long) (cd->total_size),
+ (unsigned long long) (cd->count),
+ (unsigned long long) (cd->total_size / cd->count),
+ cd->klass->name);
if (ocd) {
int64_t bdiff = cd->total_size - ocd->total_size;
int64_t cdiff = cd->count - ocd->count;
- fprintf (outfile, " (bytes: %+lld, count: %+lld)\n", bdiff, cdiff);
+ fprintf (outfile, " (bytes: %+lld, count: %+lld)\n", (long long) bdiff, (long long) cdiff);
} else {
fprintf (outfile, "\n");
}
assert (cd->rev_count == k);
qsort (rev_sorted, cd->rev_count, sizeof (HeapClassRevRef), compare_rev_class);
if (cd->root_references)
- fprintf (outfile, "\t\t%d root references (%d pinning)\n", cd->root_references, cd->pinned_references);
+ fprintf (outfile, "\t\t%zd root references (%zd pinning)\n", cd->root_references, cd->pinned_references);
dump_rev_claases (rev_sorted, cd->rev_count);
free (rev_sorted);
}
#include <zlib.h>
#endif
-/* the architecture needs a memory fence */
-#if defined(__linux__) && (defined(__i386__) || defined(__x86_64__) || defined(__arm__))
+#if defined(__linux__)
#include <unistd.h>
#include <sys/syscall.h>
#include "perf_event.h"
unsigned char buf [1];
};
-#define ENTER_LOG(lb,str) if ((lb)->locked) {write(2, str, strlen(str)); write(2, "\n", 1);return;} else {(lb)->locked++;}
+static inline void
+ign_res (int G_GNUC_UNUSED unused, ...)
+{
+}
+
+#define ENTER_LOG(lb,str) if ((lb)->locked) {ign_res (write(2, str, strlen(str))); ign_res (write(2, "\n", 1));return;} else {(lb)->locked++;}
#define EXIT_LOG(lb) (lb)->locked--;
typedef struct _StatBuffer StatBuffer;
StatBuffer *stat_buffers;
FILE* file;
#if defined (HAVE_SYS_ZLIB)
- gzFile *gzfile;
+ gzFile gzfile;
#endif
uint64_t startup_time;
int pipe_output;
char buf [256];
snprintf (buf, sizeof (buf), "hit at %p in thread %p after %llu ms\n", ip, (void*)thread_id (), (unsigned long long int)elapsed/100);
len = strlen (buf);
- write (2, buf, len);
+ ign_res (write (2, buf, len));
}
sbuf = profiler->stat_buffers;
if (!sbuf)
do {
oldsb = profiler->stat_buffers;
sbuf->next = oldsb;
- foundsb = InterlockedCompareExchangePointer ((volatile void**)&profiler->stat_buffers, sbuf, oldsb);
+ foundsb = InterlockedCompareExchangePointer ((void * volatile*)&profiler->stat_buffers, sbuf, oldsb);
} while (foundsb != oldsb);
if (do_debug)
- write (2, "overflow\n", 9);
+ ign_res (write (2, "overflow\n", 9));
/* notify the helper thread */
if (sbuf->next->next) {
char c = 0;
- write (profiler->pipes [1], &c, 1);
+ ign_res (write (profiler->pipes [1], &c, 1));
if (do_debug)
- write (2, "notify\n", 7);
+ ign_res (write (2, "notify\n", 7));
}
}
do {
old_data = sbuf->data;
new_data = old_data + 4 + bt_data.count * 3;
- data = InterlockedCompareExchangePointer ((volatile void**)&sbuf->data, new_data, old_data);
+ data = InterlockedCompareExchangePointer ((void * volatile*)&sbuf->data, new_data, old_data);
} while (data != old_data);
if (old_data >= sbuf->data_end)
return; /* lost event */
static void
counters_init (MonoProfiler *profiler)
{
- mono_counters_foreach (counters_init_add_counter, NULL);
-
MonoCounterAgent *agent;
LogBuffer *logbuffer;
int size = 1 + 5, len = 0;
+ mono_counters_foreach (counters_init_add_counter, NULL);
+
for (agent = counters; agent; agent = agent->next) {
size += strlen (mono_counter_get_name (agent->counter)) + 1 + 5 * 5;
len += 1;
emit_byte (logbuffer, TYPE_SAMPLE_COUNTERS | TYPE_SAMPLE);
emit_uvalue (logbuffer, timestamp);
for (agent = counters; agent; agent = agent->next) {
+ size_t size;
+
counter = agent->counter;
- size_t size = mono_counter_get_size (counter);
+ size = mono_counter_get_size (counter);
if (size < 0) {
continue; // FIXME error
} else if (size > buffer_size) {
if (prof->command_port) {
char c = 1;
void *res;
- write (prof->pipes [1], &c, 1);
+ ign_res (write (prof->pipes [1], &c, 1));
pthread_join (prof->helper_thread, &res);
}
#endif
SUBDIRS = cas assemblyresolve gc-descriptors
-check-local: assemblyresolve/test/asm.dll testjit test-generic-sharing test-type-load test-cattr-type-load test_platform test-process-exit test-messages rm-empty-logs
+check-local: assemblyresolve/test/asm.dll testjit test-generic-sharing test-type-load test-cattr-type-load test-reflection-load-with-context test_platform test-process-exit test-messages rm-empty-logs
check-full: test-sgen check-local
check-parallel: compile-tests check-full
bug-348522.2.exe \
bug-459094.exe \
delegate-invoke.exe \
- $(PLATFORM_DISABLED_TESTS)
+ $(PLATFORM_DISABLED_TESTS) \
+ $(EXTRA_DISABLED_TESTS)
DISABLED_TESTS_WRENCH= \
$(DISABLED_TESTS) \
assemblyresolve_event3.exe \
delegate2.exe \
finally_guard.exe \
- gc-altstack.exe
+ gc-altstack.exe \
+ generic-xdomain.2.exe
AOT_DISABLED_TESTS=constraints-load.exe
@echo "Testing custom-attribute-load-exceptions.exe..."
@$(RUNTIME) custom-attr-errors.exe > custom-attr-errors.exe.stdout 2> custom-attr-errors.exe.stderr
+EXTRA_DIST += reflection-load-with-context-lib.cs reflection-load-with-context-second-lib.cs reflection-load-with-context.cs
+test-reflection-load-with-context: TestDriver.dll reflection-load-with-context-lib.cs reflection-load-with-context-second-lib.cs reflection-load-with-context.cs
+ rm -rf reflection-load-dir
+ mkdir reflection-load-dir
+ $(MCS) /t:library $(srcdir)/reflection-load-with-context-second-lib.cs -out:reflection-load-dir/reflection-load-with-context-second-lib.dll
+ $(MCS) /t:library -r:reflection-load-dir/reflection-load-with-context-second-lib.dll $(srcdir)/reflection-load-with-context-lib.cs -out:reflection-load-dir/reflection-load-with-context-lib.dll
+ $(MCS) reflection-load-with-context.cs
+ @echo "Testing reflection-load-with-context.cs.exe..."
+ @$(RUNTIME) reflection-load-with-context.exe > reflection-load-with-context.exe.stdout 2> reflection-load-with-context.exe.stderr
+
EXTRA_DIST += debug-casts.cs
# This depends on TLS, so its not ran by default
--- /dev/null
+using System;
+
+namespace B
+{
+ public class MyAttribute : Attribute {
+ public Type Type { get; set; }
+ public MyAttribute (Type t) {
+ Type = t;
+ }
+ public override string ToString () {
+ return "My " + Type;
+ }
+ }
+
+ [My (typeof (A.ClassA))]
+ public class ClassB { // A.AnotherClassA
+
+ public ClassB () {
+ Console.WriteLine ("IN B");
+ Console.WriteLine (typeof (ClassB).AssemblyQualifiedName);
+ var t = Type.GetType ("B.ClassB, reflection-load-with-context-lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
+ Console.WriteLine (t);
+ t = Type.GetType ("A.ClassA, reflection-load-with-context-second-lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
+ Console.WriteLine ("class a: {0}", t);
+ if (t == null)
+ throw new Exception ("FAIL");
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+namespace A
+{
+ public class ClassA {}
+ public class AnotherClassA {}
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Reflection;
+using System.IO;
+
+class Driver {
+ static int Main () {
+ var src = Path.Combine (Path.GetDirectoryName (typeof (Driver).Assembly.Location), "reflection-load-dir");
+ var dep_asm = Assembly.UnsafeLoadFrom (Path.Combine (src, "reflection-load-with-context-lib.dll"));
+ var type = dep_asm.GetType ("B.ClassB");
+ var attr_type = dep_asm.GetType ("B.MyAttribute");
+
+ try {
+ Activator.CreateInstance (type);
+ } catch (Exception) {
+ return 1;
+ }
+
+ try {
+ type.GetCustomAttributes (attr_type, false);
+ } catch (Exception) {
+ return 2;
+ }
+ return 0;
+ }
+}
+
#include <glib.h>
#include <mono/utils/atomic.h>
+#include <mono/utils/mono-mutex.h>
#if defined (WAPI_NO_ATOMIC_ASM) || defined (BROKEN_64BIT_ATOMICS_INTRINSIC)
#include <pthread.h>
-static pthread_mutex_t spin = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t spin G_GNUC_UNUSED = PTHREAD_MUTEX_INITIALIZER;
-#define NEED_64BIT_CMPXCHG_FALLBACK
-
-#endif
-
-#ifdef WAPI_NO_ATOMIC_ASM
-
-static mono_once_t spin_once=MONO_ONCE_INIT;
+static mono_once_t spin_once G_GNUC_UNUSED = MONO_ONCE_INIT;
static void spin_init(void)
{
g_warning("Using non-atomic functions! Expect race conditions when using process-shared handles!");
}
+#define NEED_64BIT_CMPXCHG_FALLBACK
+
+#endif
+
+#ifdef WAPI_NO_ATOMIC_ASM
+
gint32 InterlockedCompareExchange(volatile gint32 *dest, gint32 exch,
gint32 comp)
{
InterlockedCompareExchange64(volatile gint64 *dest, gint64 exch, gint64 comp)
{
gint64 old;
+ int ret;
+
+ mono_once(&spin_once, spin_init);
+
+ pthread_cleanup_push ((void(*)(void *))pthread_mutex_unlock,
+ (void *)&spin);
+ ret = pthread_mutex_lock(&spin);
+ g_assert (ret == 0);
+
+ old= *dest;
+ if(old==comp) {
+ *dest=exch;
+ }
+
+ ret = pthread_mutex_unlock(&spin);
+ g_assert (ret == 0);
+
+ pthread_cleanup_pop (0);
- pthread_mutex_lock (&spin);
-
- old = *dest;
- if(old == comp)
- *dest = exch;
-
- pthread_mutex_unlock (&spin);
- return old;
+ return(old);
}
#endif
mono_memory_barrier ();
}
-/* Prefer GCC atomic ops if the target supports it (see configure.in). */
+/* Prefer GCC atomic ops if the target supports it (see configure.ac). */
#elif defined(USE_GCC_ATOMIC_OPS)
static inline gint32 InterlockedCompareExchange(volatile gint32 *dest,
# if defined(HAVE_KW_THREAD) && defined(USE_INCLUDED_LIBGC) && !defined(__powerpc__)
/* The local alloc stuff is in pthread_support.c, but solaris uses solaris_threads.c */
- /* It is also disabled on solaris/x86 by libgc/configure.in */
+ /* It is also disabled on solaris/x86 by libgc/configure.ac */
/*
* ARM has no definition for some atomic functions in gc_locks.h and
- * support is also disabled in libgc/configure.in.
+ * support is also disabled in libgc/configure.ac.
*/
# if !defined(__sparc__) && !defined(__sun) && !defined(__arm__) && !defined(__mips__)
# define GC_REDIRECT_TO_LOCAL
#define SB_HEADER_SIZE 16
#define SB_USABLE_SIZE (SB_SIZE - SB_HEADER_SIZE)
-#define SB_HEADER_FOR_ADDR(a) ((gpointer)((gulong)(a) & ~(gulong)(SB_SIZE-1)))
+#define SB_HEADER_FOR_ADDR(a) ((gpointer)((size_t)(a) & ~(size_t)(SB_SIZE-1)))
#define DESCRIPTOR_FOR_ADDR(a) (*(Descriptor**)SB_HEADER_FOR_ADDR (a))
/* Taken from SGen */
#endif
static uintptr_t code_memory_used = 0;
-static gulong dynamic_code_alloc_count;
-static gulong dynamic_code_bytes_count;
-static gulong dynamic_code_frees_count;
+static size_t dynamic_code_alloc_count;
+static size_t dynamic_code_bytes_count;
+static size_t dynamic_code_frees_count;
/*
* AMD64 processors maintain icache coherency only for pages which are
__asm mov [eax+0x14], esp \
__asm mov [eax+0x18], esi \
__asm mov [eax+0x1c], edi \
- __asm call $+5 \
+ __asm call __mono_context_get_ip \
+ __asm __mono_context_get_ip: \
__asm pop dword ptr [eax+0x20] \
} \
} while (0)
#define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->rbp))
#define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->rsp))
-#if defined(__native_client__)
+#if defined (HOST_WIN32)
+extern void mono_context_get_current (void *);
+#define MONO_CONTEXT_GET_CURRENT(ctx) do { mono_context_get_current((void*)&(ctx)); } while (0)
+
+#elif defined(__native_client__)
#define MONO_CONTEXT_GET_CURRENT(ctx) \
__asm__ __volatile__( \
"movq $0x0, %%nacl:0x00(%%r15, %0, 1)\n" \
if ((counter->type & MONO_COUNTER_UNIT_MASK) == MONO_COUNTER_TIME)
fprintf (outfile, ENTRY_FMT "%.2f ms\n", counter->name, (double)(*(gint64*)buffer) / 10000.0);
else
- fprintf (outfile, ENTRY_FMT "%lld\n", counter->name, *(gint64*)buffer);
+ fprintf (outfile, ENTRY_FMT "%lld\n", counter->name, *(long long *)buffer);
break;
case MONO_COUNTER_ULONG:
- fprintf (outfile, ENTRY_FMT "%llu\n", counter->name, *(guint64*)buffer);
+ fprintf (outfile, ENTRY_FMT "%llu\n", counter->name, *(unsigned long long *)buffer);
break;
case MONO_COUNTER_WORD:
fprintf (outfile, ENTRY_FMT "%zd\n", counter->name, *(gssize*)buffer);
}
static gint64
-user_time ()
+user_time (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_USER_TIME);
}
static gint64
-system_time ()
+system_time (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_SYSTEM_TIME);
}
static gint64
-total_time ()
+total_time (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_TOTAL_TIME);
}
static gint64
-working_set ()
+working_set (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_WORKING_SET);
}
static gint64
-private_bytes ()
+private_bytes (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_PRIVATE_BYTES);
}
static gint64
-virtual_bytes ()
+virtual_bytes (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_VIRTUAL_BYTES);
}
static gint64
-page_faults ()
+page_faults (void)
{
return mono_process_get_data (GINT_TO_POINTER (mono_process_current_pid ()), MONO_PROCESS_FAULTS);
}
}
static double
-cpu_load_1min ()
+cpu_load_1min (void)
{
return cpu_load (0);
}
static double
-cpu_load_5min ()
+cpu_load_5min (void)
{
return cpu_load (1);
}
static double
-cpu_load_15min ()
+cpu_load_15min (void)
{
return cpu_load (2);
}
#define SYSCOUNTER_LOAD (MONO_COUNTER_SYSTEM | MONO_COUNTER_DOUBLE | MONO_COUNTER_PERCENTAGE | MONO_COUNTER_VARIABLE | MONO_COUNTER_CALLBACK)
static void
-initialize_system_counters ()
+initialize_system_counters (void)
{
mono_counters_register ("User Time", SYSCOUNTER_TIME, &user_time);
mono_counters_register ("System Time", SYSCOUNTER_TIME, &system_time);
size = sizeof (type); \
if (buffer_size < size) \
return -1; \
- type __var = cb ? ((functype)counter->addr) () : *(type*)counter->addr; \
- memcpy (buffer, &__var, size); \
+ *(type*)buffer = cb ? ((functype)counter->addr) () : *(type*)counter->addr; \
} while (0);
int
*/
#include "mono/utils/mono-hwcap-s390x.h"
-
#include <signal.h>
-gboolean mono_hwcap_s390x_has_ld = FALSE;
-
-static void
-catch_sigill (int sig_no, siginfo_t *info, gpointer act)
-{
- mono_hwcap_s390x_has_ld = FALSE;
-}
+facilityList_t facs;
void
mono_hwcap_arch_init (void)
{
- mono_hwcap_s390x_has_ld = TRUE;
-
- struct sigaction sa, *old_sa;
-
- /* Determine if we have a long displacement facility
- * by executing the STY instruction. If it fails, we
- * catch the SIGILL and assume the answer is no.
- */
- sa.sa_sigaction = catch_sigill;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO;
-
- sigaction (SIGILL, &sa, old_sa);
-
- __asm__ __volatile__ (
- "LGHI\t0,1\n\t"
- "LA\t1,%0\n\t"
- ".byte\t0xe3,0x00,0x10,0x00,0x00,0x50\n\t"
- : "=m" (mono_hwcap_s390x_has_ld)
- :
- : "0", "1"
- );
+ int lFacs = sizeof(facs) / 8;
- sigaction (SIGILL, old_sa, NULL);
+ __asm__ (" lgfr 0,%1\n"
+ " .insn s,0xb2b00000,%0\n"
+ : "=m" (facs) : "r" (lFacs) : "0", "cc");
}
void
mono_hwcap_print (FILE *f)
{
- g_fprintf (f, "mono_hwcap_s390x_has_ld = %i\n", mono_hwcap_s390x_has_ld);
}
#include "mono/utils/mono-hwcap.h"
-extern gboolean mono_hwcap_s390x_has_ld;
+typedef struct
+{
+ char n3:1; // N3 instructions present
+ char zArch:1; // z/Architecture mode installed
+ char zAct:1; // z/Architecture mode active
+ char date:1; // DAT enhancement facility
+ char idte1:1; // IDTE present (PST)
+ char idte2:1; // IDTE present (REG)
+ char asnlx:1; // ASN and LX reuse facility
+ char stfle:1; // STFLE installed
+ char zDATe:1; // Enhanced DAT in z mode
+ char srstat:1; // Sense running status facility
+ char cSSKE:1; // Conditional SSKE facility
+ char topo:1; // Configuration topology facility
+ char rv1:1; // Reserved
+ char xTrans2:1; // Extended translation facility 2
+ char msgSec:1; // Message security facility
+ char longDsp:1; // Long displacement facility
+ char hiPerfLD:1; // High performance long displacement facility
+ char hfpMAS:1; // HFP multiply-and-add/subtrace facility
+ char xImm:1; // Extended immediate facility
+ char xTrans3:1; // Extended translation facility 3
+ char hfpUnX:1; // HFP unnormalized extension facility
+ char etf2:1; // ETF2-enhancement facility
+ char stckf:1; // Store-clock-fast facility
+ char parse:1; // Parsing enhancement facility
+ char mvcos:1; // MVCOS facility
+ char todSteer:1; // TOD-clock steering facility
+ char etf3:1; // ETF3-enhancement facility
+ char xCPUtm:1; // Extract CPU time facility
+ char csst:1; // Compare-swap-and-store facility
+ char csst2:1; // Compare-swap-and-store facility 2
+ char giX:1; // General instructions extension facility
+ char exX:1; // Execute extensions facility
+ char em:1; // Enhanced monitor
+ char rv2:1; // Reserved
+ char spp:1; // Set program parameters
+ char fps:1; // Floating point support enhancement
+ char dfp:1; // Decimal floating point facility
+ char hiDFP:1; // High Performance DFP facility
+ char pfpo:1; // PFPO instruction facility
+ char doclpkia:1; // DO/Fast BCR/CL/PK/IA
+ char rv3:1; // Reserved
+ char cmpsce:1; // CMPSC enhancement
+ char dfpzc:1; // DFP zoned-conversion
+ char eh:1; // Execution hint
+ char lt:1; // Load and trap
+ char mi:1; // Miscellaneous instruction enhancements
+ char pa:1; // Processor assist
+ char cx:1; // Constrained transactional execution
+ char ltlb:1; // Local TLB clearing
+ char ia2:1; // Interlocked access 2
+ char rv4:1; // Reserved;
+ char rv5:1; // Reserved;
+ char rv6:1; // Reserved;
+ char rv7:1; // Reserved;
+ char rv8:1; // Reserved;
+ char rv9:1; // Reserved;
+ char rva:1; // Reserved;
+ char rvb:1; // Reserved;
+ char rvc:1; // Reserved;
+ char rvd:1; // Reserved;
+ char rve:1; // Reserved;
+ char rvf:1; // Reserved;
+ char rvg:1; // Reserved;
+ char rb:1; // RRB multiple
+ char cmc:1; // CPU measurement counter
+ char cms:1; // CPU measurement sampling
+ char rvh:4; // Reserved
+ char tx:1; // Transactional execution
+ char rvi:1; // Reserved
+ char axsi:1; // Access exception/store indication
+ char m3:1; // Message security extension 3
+ char m4:1; // Message security extension 4
+ char ed2:1; // Enhanced DAT 2
+ int64_t end[0]; // End on a double word
+} __attribute__((aligned(8))) facilityList_t;
+
+extern facilityList_t facs;
#endif /* __MONO_UTILS_HWCAP_S390X_H__ */
continue;
/* The second CAS must happen before the first. */
mono_memory_write_barrier ();
- if (InterlockedCompareExchangePointer ((volatile gpointer*)prev, next, cur) == cur) {
+ if (InterlockedCompareExchangePointer ((volatile gpointer*)prev, mono_lls_pointer_unmask (next), cur) == cur) {
/* The CAS must happen before the hazard pointer clear. */
mono_memory_write_barrier ();
mono_hazard_pointer_clear (hp, 1);
static char*
aligned_address (char *mem, size_t size, size_t alignment)
{
- char *aligned = (char*)((gulong)(mem + (alignment - 1)) & ~(alignment - 1));
- g_assert (aligned >= mem && aligned + size <= mem + size + alignment && !((gulong)aligned & (alignment - 1)));
+ char *aligned = (char*)((size_t)(mem + (alignment - 1)) & ~(alignment - 1));
+ g_assert (aligned >= mem && aligned + size <= mem + size + alignment && !((size_t)aligned & (alignment - 1)));
return aligned;
}
}
#endif // HAVE_MMAP
+#if defined(HAVE_SHM_OPEN) && !defined (DISABLE_SHARED_PERFCOUNTERS)
+
static int use_shared_area;
static gboolean
return use_shared_area == -1;
}
-#if defined(HAVE_SHM_OPEN) && !defined (DISABLE_SHARED_PERFCOUNTERS)
-
static int
mono_shared_area_instances_slow (void **array, int count, gboolean cleanup)
{
# elif defined(__native_client__) && defined(USE_NEWLIB)
# define TIMESPEC struct timespec
# define WAIT_BLOCK(a, b) sem_trywait(a)
-# elif defined(__OpenBSD__)
-# define TIMESPEC struct timespec
-# define WAIT_BLOCK(a) sem_trywait(a)
# else
# define TIMESPEC struct timespec
# define WAIT_BLOCK(a,b) sem_timedwait (a, b)
TIMESPEC ts, copy;
struct timeval t;
int res = 0;
-#if defined(__OpenBSD__)
- int timeout;
-#endif
#ifndef USE_MACH_SEMA
if (timeout_ms == 0)
ts.tv_nsec -= NSEC_PER_SEC;
ts.tv_sec++;
}
-#if defined(__OpenBSD__)
- timeout = ts.tv_sec;
- while (timeout) {
- if ((res = WAIT_BLOCK (sem)) == 0)
- return res;
-
- if (alertable)
- return -1;
- usleep (ts.tv_nsec / 1000);
- timeout--;
- }
-#else
copy = ts;
while ((res = WAIT_BLOCK (sem, &ts)) == -1 && errno == EINTR) {
struct timeval current;
ts.tv_nsec = 0;
}
}
-#endif
+
/* OSX might return > 0 for error */
if (res != 0)
res = -1;
{
id cur, dict;
+ /*
+ * See the 'Dispatch Objective-C Messages Using the Method Function’s Prototype' section in
+ * the '64-Bit Transition Guide for Cocoa Touch' as to why this is required.
+ *
+ * It doesn't hurt on other architectures either, so no need to #ifdef it only for ARM64.
+ */
+
+ id (*id_objc_msgSend_id)(id, SEL, id) = (id (*)(id, SEL, id)) objc_msgSend;
+ void (*objc_msgSend_id_id)(id, SEL, id, id) = (void (*)(id, SEL, id, id)) objc_msgSend;
+
cur = objc_msgSend ((id)nsthread, currentThread);
if (!cur)
return;
dict = objc_msgSend (cur, threadDictionary);
- if (dict && objc_msgSend (dict, objectForKey, mono_dead_letter_key) == nil) {
+ if (dict && id_objc_msgSend_id (dict, objectForKey, mono_dead_letter_key) == nil) {
id value = objc_msgSend (objc_msgSend ((id)mono_dead_letter_class, alloc), init);
-#ifdef TARGET_ARM64
- /*
- * See the 'Dispatch Objective-C Messages Using the Method Function’s Prototype' section in
- * the '64-Bit Transition Guide for Cocoa Touch' as to why this is required.
- */
- {
- void (*action)(id, SEL, id, id) = (void (*)(id, SEL, id, id)) objc_msgSend;
- action (dict, setObjectForKey, value, mono_dead_letter_key);
- }
-#else
- objc_msgSend (dict, setObjectForKey, value, mono_dead_letter_key);
-#endif
+ objc_msgSend_id_id (dict, setObjectForKey, value, mono_dead_letter_key);
objc_msgSend (value, release);
}
void
mono_threads_init_dead_letter (void)
{
- id nsstring = objc_getClass ("NSString");
- id nsautoreleasepool = objc_getClass ("NSAutoreleasePool");
+ id nsstring = (id) objc_getClass ("NSString");
+ id nsautoreleasepool = (id) objc_getClass ("NSAutoreleasePool");
SEL stringWithUTF8String = sel_registerName ("stringWithUTF8String:");
SEL retain = sel_registerName ("retain");
id pool;
// create the dict key
pool = objc_msgSend (objc_msgSend (nsautoreleasepool, alloc), init);
-#ifdef TARGET_ARM64
- {
- id (*action)(id, SEL, char*) = (id (*)(id, SEL, char*)) objc_msgSend;
- mono_dead_letter_key = action(nsstring, stringWithUTF8String, "mono-dead-letter");
- }
-#else
- mono_dead_letter_key = objc_msgSend (nsstring, stringWithUTF8String, "mono-dead-letter");
-#endif
+ id (*objc_msgSend_char)(id, SEL, const char*) = (id (*)(id, SEL, const char*)) objc_msgSend;
+ mono_dead_letter_key = objc_msgSend_char (nsstring, stringWithUTF8String, "mono-dead-letter");
objc_msgSend (mono_dead_letter_key, retain);
objc_msgSend (pool, release);
void
mono_threads_core_self_suspend (MonoThreadInfo *info)
{
- g_assert (0);
+ g_assert_not_reached ();
}
gboolean
mono_threads_core_suspend (MonoThreadInfo *info)
{
- g_assert (0);
+ g_assert_not_reached ();
}
gboolean
mono_threads_core_resume (MonoThreadInfo *info)
{
- g_assert (0);
+ g_assert_not_reached ();
}
void
void
mono_threads_core_get_stack_bounds (guint8 **staddr, size_t *stsize)
{
+ MEMORY_BASIC_INFORMATION meminfo;
#ifdef TARGET_AMD64
/* win7 apis */
NT_TIB* tib = (NT_TIB*)NtCurrentTeb();
guint8 *stackTop = (guint8*)*(int*)((char*)tib + 4);
guint8 *stackBottom = (guint8*)*(int*)((char*)tib + 8);
#endif
+ /*
+ Windows stacks are expanded on demand, one page at time. The TIB reports
+ only the currently allocated amount.
+ VirtualQuery will return the actual limit for the bottom, which is what we want.
+ */
+ if (VirtualQuery (&meminfo, &meminfo, sizeof (meminfo)) == sizeof (meminfo))
+ stackBottom = MIN (stackBottom, (guint8*)meminfo.AllocationBase);
*staddr = stackBottom;
*stsize = stackTop - stackBottom;
+
}
gboolean
*/
static MonoSemType global_suspend_semaphore;
-static int thread_info_size;
+static size_t thread_info_size;
static MonoThreadInfoCallbacks threads_callbacks;
static MonoThreadInfoRuntimeCallbacks runtime_callbacks;
static MonoNativeTlsKey thread_info_key, small_id_key;
void
mono_thread_info_get_stack_bounds (guint8 **staddr, size_t *stsize)
{
- return mono_threads_core_get_stack_bounds (staddr, stsize);
+ mono_threads_core_get_stack_bounds (staddr, stsize);
}
gboolean
typedef DWORD mono_native_thread_return_t;
#define MONO_NATIVE_THREAD_ID_TO_UINT(tid) (tid)
-#define MONO_UINT_TO_NATIVE_THREAD_ID(tid) (tid)
+#define MONO_UINT_TO_NATIVE_THREAD_ID(tid) ((MonoNativeThreadId)(tid))
#else
* #define NO_ERRNO if strtod should not assign errno = ERANGE when
* the result overflows to +-Infinity or underflows to 0.
*/
-#if defined(TARGET_X86) || defined(mips) && defined(MIPSEL) || defined (__arm__)
+#if defined(TARGET_X86) || defined(mips) && defined(MIPSEL) || defined (__arm__) || defined(__aarch64__)
# define IEEE_8087
--- /dev/null
+ifndef X64
+
+.386
+.model flat, c
+
+endif
+
+.code
+
+ifdef X64
+
+PUBLIC mono_context_get_current
+
+mono_context_get_current PROC
+;rdi has the ctx ptr
+ mov [rcx + 00h], rax
+ mov [rcx + 08h], rbx
+ mov [rcx + 10h], rcx
+ mov [rcx + 18h], rdx
+ mov [rcx + 20h], rbp
+ mov [rcx + 28h], rsp
+ mov [rcx + 30h], rsi
+ mov [rcx + 38h], rdi
+ mov [rcx + 40h], r8
+ mov [rcx + 48h], r9
+ mov [rcx + 50h], r10
+ mov [rcx + 58h], r11
+ mov [rcx + 60h], r12
+ mov [rcx + 68h], r13
+ mov [rcx + 70h], r14
+ mov [rcx + 78h], r15
+
+ lea rax, __mono_current_ip
+__mono_current_ip:
+ mov [rcx + 80h], rax
+ ret
+
+mono_context_get_current endP
+
+endif
+
+end
<LinkLibraryDependencies>false</LinkLibraryDependencies>\r
</ProjectReference>\r
<Link>\r
- <AdditionalDependencies>libgc.lib;libmonoruntime.lib;libmonoutils.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+ <AdditionalDependencies>libgc.lib;libmonoruntimesgen.lib;libmonoutils.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
<AdditionalLibraryDirectories>$(Platform)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <ModuleDefinitionFile>monosgen.def</ModuleDefinitionFile>\r
+ <ModuleDefinitionFile>monosgen64.def</ModuleDefinitionFile>\r
<GenerateDebugInformation>true</GenerateDebugInformation>\r
<ImportLibrary>$(Platform)\lib\$(TargetName).lib</ImportLibrary>\r
<TargetMachine>MachineX64</TargetMachine>\r
<Link>\r
<AdditionalDependencies>libgc.lib;libmonoruntime.lib;libmonoutils.lib;eglib.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
<AdditionalLibraryDirectories>$(Platform)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <ModuleDefinitionFile>monosgen.def</ModuleDefinitionFile>\r
+ <ModuleDefinitionFile>monosgen64.def</ModuleDefinitionFile>\r
<ImportLibrary>$(Platform)\lib\$(TargetName).lib</ImportLibrary>\r
<TargetMachine>MachineX64</TargetMachine>\r
<GenerateDebugInformation>true</GenerateDebugInformation>\r
<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
<ItemGroup Label="ProjectConfigurations">\r
<ProjectConfiguration Include="Debug_SGen|Win32">\r
<Configuration>Debug_SGen</Configuration>\r
<ClCompile Include="..\mono\metadata\sgen-marksweep-par.c" />\r
<ClCompile Include="..\mono\metadata\sgen-marksweep.c" />\r
<ClCompile Include="..\mono\metadata\sgen-memory-governor.c" />\r
+ <ClCompile Include="..\mono\metadata\sgen-new-bridge.c" />\r
<ClCompile Include="..\mono\metadata\sgen-nursery-allocator.c" />\r
+ <ClCompile Include="..\mono\metadata\sgen-old-bridge.c" />\r
<ClCompile Include="..\mono\metadata\sgen-os-mach.c" />\r
<ClCompile Include="..\mono\metadata\sgen-os-posix.c" />\r
<ClCompile Include="..\mono\metadata\sgen-os-win32.c" />\r
<ClCompile Include="..\mono\metadata\sgen-protocol.c" />\r
<ClCompile Include="..\mono\metadata\sgen-simple-nursery.c" />\r
<ClCompile Include="..\mono\metadata\sgen-split-nursery.c" />\r
+ <ClCompile Include="..\mono\metadata\sgen-tarjan-bridge.c" />\r
<ClCompile Include="..\mono\metadata\sgen-toggleref.c" />\r
<ClCompile Include="..\mono\metadata\sgen-workers.c" />\r
<ClCompile Include="..\mono\metadata\sgen-fin-weak-hash.c" />\r
<WarningLevel>Level3</WarningLevel>\r
<Optimization>Disabled</Optimization>\r
<PreprocessorDefinitions>WIN32;$(SGEN_DEFINES);_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <AdditionalIncludeDirectories>$(top_srcdir);$(top_srcdir)/mono;$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE)</AdditionalIncludeDirectories>\r
+ <OmitFramePointers>false</OmitFramePointers>\r
+ <AdditionalIncludeDirectories>$(top_srcdir);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(top_srcdir)\mono</AdditionalIncludeDirectories>\r
</ClCompile>\r
<Link>\r
<SubSystem>Windows</SubSystem>\r
<ClInclude Include="..\mono\utils\mono-hwcap-x86.h" />\r
<ClInclude Include="..\mono\utils\bsearch.h" />\r
</ItemGroup>\r
+ <ItemGroup>\r
+ <MASM Include="..\mono\utils\win64.asm">\r
+ <FileType>Document</FileType>\r
+ </MASM>\r
+ </ItemGroup>\r
<PropertyGroup Label="Globals">\r
<ProjectGuid>{8FC2B0C8-51AD-49DF-851F-5D01A77A75E4}</ProjectGuid>\r
<Keyword>Win32Proj</Keyword>\r
</PropertyGroup>\r
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
<ImportGroup Label="ExtensionSettings">\r
+ <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />\r
</ImportGroup>\r
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
<WarningLevel>Level3</WarningLevel>\r
<Optimization>Disabled</Optimization>\r
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <AdditionalIncludeDirectories>$(top_srcdir);$(top_srcdir)/mono;$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE)</AdditionalIncludeDirectories>\r
+ <AdditionalIncludeDirectories>$(top_srcdir);$(top_srcdir)/eglib/src;$(top_srcdir)/mono;$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE)</AdditionalIncludeDirectories>\r
</ClCompile>\r
<Link>\r
<SubSystem>Windows</SubSystem>\r
<PreBuildEvent>\r
<Command>winsetup.bat</Command>\r
</PreBuildEvent>\r
+ <MASM>\r
+ <PreprocessorDefinitions>X64</PreprocessorDefinitions>\r
+ </MASM>\r
</ItemDefinitionGroup>\r
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
<ClCompile>\r
</ItemDefinitionGroup>\r
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
<ImportGroup Label="ExtensionTargets">\r
+ <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />\r
</ImportGroup>\r
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="MonoDefines">
- <top_srcdir>$(MSBuildProjectDirectory)/..</top_srcdir>
- <LIBGC_CPPFLAGS_INCLUDE>$(top_srcdir)/libgc/include</LIBGC_CPPFLAGS_INCLUDE>
- <GLIB_CFLAGS_INCLUDE>$(top_srcdir)/eglib/src</GLIB_CFLAGS_INCLUDE>
+ <top_srcdir>$(MSBuildProjectDirectory)\..</top_srcdir>
+ <LIBGC_CPPFLAGS_INCLUDE>$(top_srcdir)\libgc\include</LIBGC_CPPFLAGS_INCLUDE>
+ <GLIB_CFLAGS_INCLUDE>$(top_srcdir)\eglib\src</GLIB_CFLAGS_INCLUDE>
<BOEHM_DEFINES>HAVE_BOEHM_GC;HAVE_GC_H;USE_INCLUDED_LIBGC;HAVE_GC_GCJ_MALLOC;HAVE_GC_ENABLE</BOEHM_DEFINES>
<SGEN_DEFINES>HAVE_SGEN_GC;HAVE_MOVING_COLLECTOR;HAVE_WRITE_BARRIERS</SGEN_DEFINES>
</PropertyGroup>
--- /dev/null
+; file generated by create-windef.pl
+LIBRARY monosgen-2.0.dll
+EXPORTS
+MonoFixupCorEE
+mono_add_internal_call
+mono_aot_register_globals
+mono_aot_register_module
+mono_array_addr_with_size
+mono_array_class_get
+mono_array_clone
+mono_array_element_size
+mono_array_length
+mono_array_new
+mono_array_new_full
+mono_array_new_specific
+mono_assemblies_cleanup
+mono_assemblies_init
+mono_assembly_close
+mono_assembly_fill_assembly_name
+mono_assembly_foreach
+mono_assembly_get_assemblyref
+mono_assembly_get_image
+mono_assembly_get_main
+mono_assembly_get_object
+mono_assembly_getrootdir
+mono_assembly_invoke_load_hook
+mono_assembly_invoke_search_hook
+mono_assembly_load
+mono_assembly_load_from
+mono_assembly_load_from_full
+mono_assembly_load_full
+mono_assembly_load_module
+mono_assembly_load_reference
+mono_assembly_load_references
+mono_assembly_load_with_partial_name
+mono_assembly_loaded
+mono_assembly_loaded_full
+mono_assembly_name_free
+mono_assembly_name_get_culture
+mono_assembly_name_get_name
+mono_assembly_name_get_pubkeytoken
+mono_assembly_name_get_version
+mono_assembly_name_new
+mono_assembly_names_equal
+mono_assembly_open
+mono_assembly_open_full
+mono_assembly_set_main
+mono_assembly_setrootdir
+mono_binary_search
+mono_bitset_alloc_size
+mono_bitset_clear
+mono_bitset_clear_all
+mono_bitset_clone
+mono_bitset_copyto
+mono_bitset_count
+mono_bitset_equal
+mono_bitset_find_first
+mono_bitset_find_first_unset
+mono_bitset_find_last
+mono_bitset_find_start
+mono_bitset_foreach
+mono_bitset_free
+mono_bitset_intersection
+mono_bitset_intersection_2
+mono_bitset_invert
+mono_bitset_mem_new
+mono_bitset_new
+mono_bitset_set
+mono_bitset_set_all
+mono_bitset_size
+mono_bitset_sub
+mono_bitset_test
+mono_bitset_test_bulk
+mono_bitset_union
+mono_bounded_array_class_get
+mono_breakpoint_clean_code
+mono_check_corlib_version
+mono_class_array_element_size
+mono_class_data_size
+mono_class_describe_statics
+mono_class_enum_basetype
+mono_class_from_generic_parameter
+mono_class_from_mono_type
+mono_class_from_name
+mono_class_from_name_case
+mono_class_from_typeref
+mono_class_get
+mono_class_get_byref_type
+mono_class_get_com_object_class
+mono_class_get_element_class
+mono_class_get_event_token
+mono_class_get_events
+mono_class_get_field
+mono_class_get_field_from_name
+mono_class_get_field_token
+mono_class_get_fields
+mono_class_get_flags
+mono_class_get_full
+mono_class_get_idispatch_class
+mono_class_get_image
+mono_class_get_interfaces
+mono_class_get_interop_proxy_class
+mono_class_get_iunknown_class
+mono_class_get_method_from_name
+mono_class_get_method_from_name_flags
+mono_class_get_methods
+mono_class_get_name
+mono_class_get_namespace
+mono_class_get_nested_types
+mono_class_get_nesting_type
+mono_class_get_parent
+mono_class_get_properties
+mono_class_get_property_from_name
+mono_class_get_property_token
+mono_class_get_rank
+mono_class_get_type
+mono_class_get_type_token
+mono_class_get_variant_class
+mono_class_implements_interface
+mono_class_inflate_generic_method
+mono_class_inflate_generic_type
+mono_class_init
+mono_class_instance_size
+mono_class_interface_offset
+mono_class_is_assignable_from
+mono_class_is_delegate
+mono_class_is_enum
+mono_class_is_subclass_of
+mono_class_is_valid_enum
+mono_class_is_valuetype
+mono_class_min_align
+mono_class_name_from_token
+mono_class_num_events
+mono_class_num_fields
+mono_class_num_methods
+mono_class_num_properties
+mono_class_value_size
+mono_class_vtable
+mono_cli_rva_image_map
+mono_code_manager_cleanup
+mono_code_manager_commit
+mono_code_manager_destroy
+mono_code_manager_foreach
+mono_code_manager_init
+mono_code_manager_invalidate
+mono_code_manager_new
+mono_code_manager_new_dynamic
+mono_code_manager_reserve
+mono_code_manager_reserve_align
+mono_code_manager_set_read_only
+mono_code_manager_size
+mono_compile_method
+mono_config_cleanup
+mono_config_for_assembly
+mono_config_is_server_mode
+mono_config_parse
+mono_config_parse_memory
+mono_config_set_server_mode
+mono_config_string_for_assembly_file
+mono_context_get
+mono_context_get_desc
+mono_context_init
+mono_context_set
+mono_counters_cleanup
+mono_counters_dump
+mono_counters_enable
+mono_counters_register
+mono_custom_attrs_construct
+mono_custom_attrs_free
+mono_custom_attrs_from_assembly
+mono_custom_attrs_from_class
+mono_custom_attrs_from_event
+mono_custom_attrs_from_field
+mono_custom_attrs_from_index
+mono_custom_attrs_from_method
+mono_custom_attrs_from_param
+mono_custom_attrs_from_property
+mono_custom_attrs_get_attr
+mono_custom_attrs_has_attr
+mono_debug_add_delegate_trampoline
+mono_debug_add_method
+mono_debug_cleanup
+mono_debug_close_image
+mono_debug_close_mono_symbol_file
+mono_debug_domain_create
+mono_debug_domain_unload
+mono_debug_enabled
+mono_debug_find_method
+mono_debug_free_method_jit_info
+mono_debug_free_source_location
+mono_debug_il_offset_from_address
+mono_debug_init
+mono_debug_list_add
+mono_debug_list_remove
+mono_debug_lookup_locals
+mono_debug_lookup_method
+mono_debug_lookup_method_addresses
+mono_debug_lookup_source_location
+mono_debug_open_image_from_memory
+mono_debug_open_mono_symbols
+mono_debug_print_stack_frame
+mono_debug_print_vars
+mono_debug_remove_method
+mono_debug_symfile_free_locals
+mono_debug_symfile_free_location
+mono_debug_symfile_get_line_numbers
+mono_debug_symfile_get_line_numbers_full
+mono_debug_symfile_is_loaded
+mono_debug_symfile_lookup_locals
+mono_debug_symfile_lookup_location
+mono_debug_symfile_lookup_method
+mono_debugger_insert_breakpoint
+mono_debugger_method_has_breakpoint
+mono_debugger_run_finally
+mono_declsec_flags_from_assembly
+mono_declsec_flags_from_class
+mono_declsec_flags_from_method
+mono_declsec_get_assembly_action
+mono_declsec_get_class_action
+mono_declsec_get_demands
+mono_declsec_get_inheritdemands_class
+mono_declsec_get_inheritdemands_method
+mono_declsec_get_linkdemands
+mono_declsec_get_method_action
+mono_digest_get_public_token
+mono_disasm_code
+mono_disasm_code_one
+mono_dl_fallback_register
+mono_dl_fallback_unregister
+mono_dllmap_insert
+mono_domain_add_class_static_data
+mono_domain_assembly_open
+mono_domain_create
+mono_domain_create_appdomain
+mono_domain_finalize
+mono_domain_foreach
+mono_domain_free
+mono_domain_from_appdomain
+mono_domain_get
+mono_domain_get_by_id
+mono_domain_get_id
+mono_domain_has_type_resolve
+mono_domain_is_unloading
+mono_domain_owns_vtable_slot
+mono_domain_set
+mono_domain_set_internal
+mono_domain_try_type_resolve
+mono_domain_try_unload
+mono_domain_unload
+mono_dwarf_escape_path
+mono_emit_native_call
+mono_environment_exitcode_get
+mono_environment_exitcode_set
+mono_error_cleanup
+mono_error_get_error_code
+mono_error_get_message
+mono_error_init
+mono_error_init_flags
+mono_error_ok
+mono_escape_uri_string
+mono_event_get_add_method
+mono_event_get_flags
+mono_event_get_name
+mono_event_get_object
+mono_event_get_parent
+mono_event_get_raise_method
+mono_event_get_remove_method
+mono_exception_from_name
+mono_exception_from_name_domain
+mono_exception_from_name_msg
+mono_exception_from_name_two_strings
+mono_exception_from_token
+mono_exception_from_token_two_strings
+mono_exception_walk_trace
+mono_field_from_token
+mono_field_full_name
+mono_field_get_data
+mono_field_get_flags
+mono_field_get_name
+mono_field_get_object
+mono_field_get_offset
+mono_field_get_parent
+mono_field_get_type
+mono_field_get_value
+mono_field_get_value_object
+mono_field_set_value
+mono_field_static_get_value
+mono_field_static_set_value
+mono_file_map
+mono_file_map_close
+mono_file_map_fd
+mono_file_map_open
+mono_file_map_size
+mono_file_unmap
+mono_free
+mono_free_bstr
+mono_free_method
+mono_free_verify_list
+mono_g_hash_table_destroy
+mono_g_hash_table_find
+mono_g_hash_table_foreach
+mono_g_hash_table_foreach_remove
+mono_g_hash_table_insert
+mono_g_hash_table_lookup
+mono_g_hash_table_lookup_extended
+mono_g_hash_table_new
+mono_g_hash_table_new_full
+mono_g_hash_table_new_type
+mono_g_hash_table_print_stats
+mono_g_hash_table_remove
+mono_g_hash_table_replace
+mono_g_hash_table_size
+mono_gc_collect
+mono_gc_collection_count
+mono_gc_enable_events
+mono_gc_get_generation
+mono_gc_get_heap_size
+mono_gc_get_used_size
+mono_gc_invoke_finalizers
+mono_gc_is_finalizer_thread
+mono_gc_make_root_descr_user
+mono_gc_max_generation
+mono_gc_out_of_memory
+mono_gc_reference_queue_add
+mono_gc_reference_queue_free
+mono_gc_reference_queue_new
+mono_gc_toggleref_add
+mono_gc_toggleref_register_callback
+mono_gc_walk_heap
+mono_gc_wbarrier_arrayref_copy
+mono_gc_wbarrier_generic_nostore
+mono_gc_wbarrier_generic_store
+mono_gc_wbarrier_generic_store_atomic
+mono_gc_wbarrier_object_copy
+mono_gc_wbarrier_set_arrayref
+mono_gc_wbarrier_set_field
+mono_gc_wbarrier_value_copy
+mono_gchandle_free
+mono_gchandle_get_target
+mono_gchandle_new
+mono_gchandle_new_weakref
+mono_get_array_class
+mono_get_boolean_class
+mono_get_byte_class
+mono_get_char_class
+mono_get_config_dir
+mono_get_corlib
+mono_get_dbnull_object
+mono_get_delegate_begin_invoke
+mono_get_delegate_end_invoke
+mono_get_delegate_invoke
+mono_get_double_class
+mono_get_enum_class
+mono_get_exception_appdomain_unloaded
+mono_get_exception_argument
+mono_get_exception_argument_null
+mono_get_exception_argument_out_of_range
+mono_get_exception_arithmetic
+mono_get_exception_array_type_mismatch
+mono_get_exception_bad_image_format
+mono_get_exception_bad_image_format2
+mono_get_exception_cannot_unload_appdomain
+mono_get_exception_class
+mono_get_exception_divide_by_zero
+mono_get_exception_execution_engine
+mono_get_exception_field_access
+mono_get_exception_file_not_found
+mono_get_exception_file_not_found2
+mono_get_exception_index_out_of_range
+mono_get_exception_invalid_cast
+mono_get_exception_invalid_operation
+mono_get_exception_io
+mono_get_exception_method_access
+mono_get_exception_missing_field
+mono_get_exception_missing_method
+mono_get_exception_not_implemented
+mono_get_exception_not_supported
+mono_get_exception_null_reference
+mono_get_exception_out_of_memory
+mono_get_exception_overflow
+mono_get_exception_reflection_type_load
+mono_get_exception_runtime_wrapped
+mono_get_exception_security
+mono_get_exception_serialization
+mono_get_exception_stack_overflow
+mono_get_exception_synchronization_lock
+mono_get_exception_thread_abort
+mono_get_exception_thread_interrupted
+mono_get_exception_thread_state
+mono_get_exception_type_initialization
+mono_get_exception_type_load
+mono_get_inflated_method
+mono_get_int16_class
+mono_get_int32_class
+mono_get_int64_class
+mono_get_intptr_class
+mono_get_machine_config
+mono_get_method
+mono_get_method_constrained
+mono_get_method_full
+mono_get_object_class
+mono_get_root_domain
+mono_get_runtime_build_info
+mono_get_sbyte_class
+mono_get_single_class
+mono_get_string_class
+mono_get_thread_class
+mono_get_trampoline_func
+mono_get_uint16_class
+mono_get_uint32_class
+mono_get_uint64_class
+mono_get_uintptr_class
+mono_get_void_class
+mono_guid_to_string
+mono_image_add_to_name_cache
+mono_image_addref
+mono_image_close
+mono_image_ensure_section
+mono_image_ensure_section_idx
+mono_image_fixup_vtable
+mono_image_get_assembly
+mono_image_get_entry_point
+mono_image_get_filename
+mono_image_get_guid
+mono_image_get_name
+mono_image_get_public_key
+mono_image_get_resource
+mono_image_get_strong_name
+mono_image_get_table_info
+mono_image_get_table_rows
+mono_image_has_authenticode_entry
+mono_image_init
+mono_image_init_name_cache
+mono_image_is_dynamic
+mono_image_load_file_for_image
+mono_image_load_module
+mono_image_loaded
+mono_image_loaded_by_guid
+mono_image_loaded_by_guid_full
+mono_image_loaded_full
+mono_image_lookup_resource
+mono_image_open
+mono_image_open_from_data
+mono_image_open_from_data_full
+mono_image_open_from_data_with_name
+mono_image_open_full
+mono_image_rva_map
+mono_image_strerror
+mono_image_strong_name_position
+mono_images_cleanup
+mono_images_init
+mono_init
+mono_init_from_assembly
+mono_init_version
+mono_inst_name
+mono_install_assembly_load_hook
+mono_install_assembly_postload_refonly_search_hook
+mono_install_assembly_postload_search_hook
+mono_install_assembly_preload_hook
+mono_install_assembly_refonly_preload_hook
+mono_install_assembly_refonly_search_hook
+mono_install_assembly_search_hook
+mono_install_runtime_cleanup
+mono_install_threadpool_item_hooks
+mono_install_threadpool_thread_hooks
+mono_install_unhandled_exception_hook
+mono_invoke_unhandled_exception_hook
+mono_is_debugger_attached
+mono_jit_cleanup
+mono_jit_exec
+mono_jit_info_get_code_size
+mono_jit_info_get_code_start
+mono_jit_info_get_method
+mono_jit_info_table_find
+mono_jit_init
+mono_jit_init_version
+mono_jit_parse_options
+mono_jit_set_aot_only
+mono_jit_set_domain
+mono_jit_set_trace_options
+mono_jit_thread_attach
+mono_ldstr
+mono_ldtoken
+mono_lls_init
+mono_load_remote_field
+mono_load_remote_field_new
+mono_local_deadce
+mono_locks_dump
+mono_lookup_icall_symbol
+mono_lookup_internal_call
+mono_lookup_pinvoke_call
+mono_main
+mono_marshal_string_to_utf16
+mono_md5_final
+mono_md5_get_digest
+mono_md5_get_digest_from_file
+mono_md5_init
+mono_md5_update
+mono_mempool_alloc
+mono_mempool_alloc0
+mono_mempool_contains_addr
+mono_mempool_destroy
+mono_mempool_empty
+mono_mempool_get_allocated
+mono_mempool_invalidate
+mono_mempool_new
+mono_mempool_new_size
+mono_mempool_stats
+mono_mempool_strdup
+mono_metadata_blob_heap
+mono_metadata_cleanup
+mono_metadata_compute_size
+mono_metadata_custom_attrs_from_index
+mono_metadata_declsec_from_index
+mono_metadata_decode_blob_size
+mono_metadata_decode_row
+mono_metadata_decode_row_col
+mono_metadata_decode_signed_value
+mono_metadata_decode_table_row
+mono_metadata_decode_table_row_col
+mono_metadata_decode_value
+mono_metadata_encode_value
+mono_metadata_events_from_typedef
+mono_metadata_field_info
+mono_metadata_field_info_with_mempool
+mono_metadata_free_array
+mono_metadata_free_inflated_signature
+mono_metadata_free_marshal_spec
+mono_metadata_free_method_signature
+mono_metadata_free_mh
+mono_metadata_free_type
+mono_metadata_generic_class_is_valuetype
+mono_metadata_get_constant_index
+mono_metadata_get_generic_param_row
+mono_metadata_get_inflated_signature
+mono_metadata_get_marshal_info
+mono_metadata_guid_heap
+mono_metadata_implmap_from_method
+mono_metadata_init
+mono_metadata_interfaces_from_typedef
+mono_metadata_load_generic_param_constraints
+mono_metadata_load_generic_params
+mono_metadata_locate
+mono_metadata_locate_token
+mono_metadata_methods_from_event
+mono_metadata_methods_from_property
+mono_metadata_nested_in_typedef
+mono_metadata_nesting_typedef
+mono_metadata_packing_from_typedef
+mono_metadata_parse_array
+mono_metadata_parse_custom_mod
+mono_metadata_parse_field_type
+mono_metadata_parse_marshal_spec
+mono_metadata_parse_method_signature
+mono_metadata_parse_method_signature_full
+mono_metadata_parse_mh
+mono_metadata_parse_mh_full
+mono_metadata_parse_param
+mono_metadata_parse_signature
+mono_metadata_parse_type
+mono_metadata_parse_type_full
+mono_metadata_parse_typedef_or_ref
+mono_metadata_properties_from_typedef
+mono_metadata_signature_alloc
+mono_metadata_signature_dup
+mono_metadata_signature_equal
+mono_metadata_string_heap
+mono_metadata_token_from_dor
+mono_metadata_translate_token_index
+mono_metadata_type_equal
+mono_metadata_type_hash
+mono_metadata_typedef_from_field
+mono_metadata_typedef_from_method
+mono_metadata_user_string
+mono_method_body_get_object
+mono_method_can_access_field
+mono_method_can_access_method
+mono_method_desc_free
+mono_method_desc_from_method
+mono_method_desc_full_match
+mono_method_desc_match
+mono_method_desc_new
+mono_method_desc_search_in_class
+mono_method_desc_search_in_image
+mono_method_full_name
+mono_method_get_class
+mono_method_get_flags
+mono_method_get_generic_container
+mono_method_get_header
+mono_method_get_index
+mono_method_get_last_managed
+mono_method_get_marshal_info
+mono_method_get_name
+mono_method_get_object
+mono_method_get_param_names
+mono_method_get_param_token
+mono_method_get_signature
+mono_method_get_signature_full
+mono_method_get_token
+mono_method_get_unmanaged_thunk
+mono_method_has_marshal_info
+mono_method_header_get_clauses
+mono_method_header_get_code
+mono_method_header_get_locals
+mono_method_header_get_num_clauses
+mono_method_signature
+mono_method_verify
+mono_mlist_alloc
+mono_mlist_append
+mono_mlist_get_data
+mono_mlist_last
+mono_mlist_length
+mono_mlist_next
+mono_mlist_prepend
+mono_mlist_remove_item
+mono_mlist_set_data
+mono_mlist_set_next
+mono_module_file_get_object
+mono_module_get_object
+mono_monitor_enter
+mono_monitor_exit
+mono_monitor_try_enter
+mono_mprotect
+mono_mutex_init_suspend_safe
+mono_object_castclass_mbyref
+mono_object_castclass_with_cache
+mono_object_clone
+mono_object_describe
+mono_object_describe_fields
+mono_object_get_class
+mono_object_get_domain
+mono_object_get_size
+mono_object_get_virtual_method
+mono_object_hash
+mono_object_is_alive
+mono_object_isinst
+mono_object_isinst_mbyref
+mono_object_isinst_with_cache
+mono_object_new
+mono_object_new_alloc_specific
+mono_object_new_fast
+mono_object_new_from_token
+mono_object_new_specific
+mono_object_to_string
+mono_object_unbox
+mono_op_to_op_imm_noemul
+mono_opcode_name
+mono_opcode_value
+mono_pagesize
+mono_param_get_objects
+mono_parse_default_optimizations
+mono_path_canonicalize
+mono_path_resolve_symlinks
+mono_pe_file_open
+mono_perfcounters_init
+mono_pmip
+mono_poll
+mono_print_method_from_ip
+mono_print_thread_dump
+mono_print_thread_dump_from_ctx
+mono_print_unhandled_exception
+mono_profiler_coverage_get
+mono_profiler_get_events
+mono_profiler_install
+mono_profiler_install_allocation
+mono_profiler_install_appdomain
+mono_profiler_install_assembly
+mono_profiler_install_class
+mono_profiler_install_code_buffer_new
+mono_profiler_install_code_chunk_destroy
+mono_profiler_install_code_chunk_new
+mono_profiler_install_coverage_filter
+mono_profiler_install_enter_leave
+mono_profiler_install_exception
+mono_profiler_install_gc
+mono_profiler_install_gc_moves
+mono_profiler_install_gc_roots
+mono_profiler_install_iomap
+mono_profiler_install_jit_compile
+mono_profiler_install_jit_end
+mono_profiler_install_method_free
+mono_profiler_install_method_invoke
+mono_profiler_install_module
+mono_profiler_install_monitor
+mono_profiler_install_runtime_initialized
+mono_profiler_install_statistical
+mono_profiler_install_statistical_call_chain
+mono_profiler_install_thread
+mono_profiler_install_thread_name
+mono_profiler_install_transition
+mono_profiler_load
+mono_profiler_set_events
+mono_property_get_flags
+mono_property_get_get_method
+mono_property_get_name
+mono_property_get_object
+mono_property_get_parent
+mono_property_get_set_method
+mono_property_get_value
+mono_property_hash_destroy
+mono_property_hash_insert
+mono_property_hash_lookup
+mono_property_hash_new
+mono_property_hash_remove_object
+mono_property_set_value
+mono_ptr_class_get
+mono_raise_exception
+mono_realloc_native_code
+mono_reflection_free_type_info
+mono_reflection_get_custom_attrs
+mono_reflection_get_custom_attrs_blob
+mono_reflection_get_custom_attrs_by_type
+mono_reflection_get_custom_attrs_data
+mono_reflection_get_custom_attrs_info
+mono_reflection_get_token
+mono_reflection_get_type
+mono_reflection_parse_type
+mono_reflection_type_from_name
+mono_reflection_type_get_type
+mono_register_bundled_assemblies
+mono_register_config_for_assembly
+mono_register_machine_config
+mono_register_symfile_for_assembly
+mono_replace_ins
+mono_runtime_class_init
+mono_runtime_cleanup
+mono_runtime_delegate_invoke
+mono_runtime_exec_main
+mono_runtime_exec_managed_code
+mono_runtime_get_main_args
+mono_runtime_init
+mono_runtime_invoke
+mono_runtime_invoke_array
+mono_runtime_is_shutting_down
+mono_runtime_object_init
+mono_runtime_quit
+mono_runtime_resource_check_limit
+mono_runtime_resource_limit
+mono_runtime_resource_set_callback
+mono_runtime_run_main
+mono_runtime_set_shutting_down
+mono_security_core_clr_get_options
+mono_security_core_clr_require_elevated_permissions
+mono_security_core_clr_set_options
+mono_security_enable_core_clr
+mono_security_set_core_clr_platform_callback
+mono_sem_post
+mono_sem_timedwait
+mono_sem_wait
+mono_set_assemblies_path
+mono_set_break_policy
+mono_set_config_dir
+mono_set_defaults
+mono_set_dirs
+mono_set_is_debugger_attached
+mono_set_rootdir
+mono_set_signal_chaining
+mono_sha1_final
+mono_sha1_get_digest
+mono_sha1_get_digest_from_file
+mono_sha1_init
+mono_sha1_update
+mono_shared_area
+mono_shared_area_for_pid
+mono_shared_area_instances
+mono_shared_area_remove
+mono_shared_area_unload
+mono_signature_explicit_this
+mono_signature_get_call_conv
+mono_signature_get_desc
+mono_signature_get_param_count
+mono_signature_get_params
+mono_signature_get_return_type
+mono_signature_hash
+mono_signature_is_instance
+mono_signature_param_is_out
+mono_signature_vararg_start
+mono_signbit_double
+mono_signbit_float
+mono_stack_walk
+mono_stack_walk_no_il
+mono_store_remote_field
+mono_store_remote_field_new
+mono_string_chars
+mono_string_equal
+mono_string_from_bstr
+mono_string_from_utf16
+mono_string_hash
+mono_string_intern
+mono_string_is_interned
+mono_string_length
+mono_string_new
+mono_string_new_len
+mono_string_new_size
+mono_string_new_utf16
+mono_string_new_wrapper
+mono_string_to_utf16
+mono_string_to_utf8
+mono_string_to_utf8_checked
+mono_stringify_assembly_name
+mono_table_info_get_rows
+mono_thread_attach
+mono_thread_cleanup
+mono_thread_create
+mono_thread_current
+mono_thread_detach
+mono_thread_exit
+mono_thread_get_main
+mono_thread_get_undeniable_exception
+mono_thread_init
+mono_thread_is_foreign
+mono_thread_manage
+mono_thread_new_init
+mono_thread_set_main
+mono_thread_set_manage_callback
+mono_thread_stop
+mono_threads_get_default_stacksize
+mono_threads_request_thread_dump
+mono_threads_set_default_stacksize
+mono_tls_key_get_offset
+mono_tls_key_set_offset
+mono_trace_set_level_string
+mono_trace_set_mask_string
+mono_type_create_from_typespec
+mono_type_full_name
+mono_type_generic_inst_is_valuetype
+mono_type_get_array_type
+mono_type_get_class
+mono_type_get_desc
+mono_type_get_modifiers
+mono_type_get_name
+mono_type_get_object
+mono_type_get_ptr_type
+mono_type_get_signature
+mono_type_get_type
+mono_type_get_underlying_type
+mono_type_is_byref
+mono_type_is_pointer
+mono_type_is_reference
+mono_type_is_struct
+mono_type_is_valid_enum_basetype
+mono_type_is_void
+mono_type_size
+mono_type_stack_size
+mono_type_to_unmanaged
+mono_unhandled_exception
+mono_unicode_from_external
+mono_unicode_to_external
+mono_upgrade_remote_class_wrapper
+mono_utf8_from_external
+mono_utf8_validate_and_len
+mono_utf8_validate_and_len_with_bounds
+mono_valloc
+mono_valloc_aligned
+mono_value_box
+mono_value_copy
+mono_value_copy_array
+mono_value_describe_fields
+mono_verify_corlib
+mono_vfree
+mono_vtable_get_static_field_data
+mono_win32_compat_CopyMemory
+mono_win32_compat_FillMemory
+mono_win32_compat_MoveMemory
+mono_win32_compat_ZeroMemory
+mono_xdebug_flush
<TargetFrameworkVersion>v@FX_VERSION</TargetFrameworkVersion>\r
<FileAlignment>512</FileAlignment>\r
</PropertyGroup>\r
+ @SIGNATURE@\r
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
<DebugSymbols>true</DebugSymbols>\r
<DebugType>full</DebugType>\r
// Replace the template values
//
+ string strongNameSection = "";
+ if (StrongNameKeyFile != null){
+ strongNameSection = String.Format (
+ " <PropertyGroup>\n" +
+ " <SignAssembly>true</SignAssembly>\n" +
+ "{1}" +
+ " </PropertyGroup>\n" +
+ " <PropertyGroup>\n" +
+ " <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>\n" +
+ " </PropertyGroup>", StrongNameKeyFile, StrongNameDelaySign ? " <DelaySign>true</DelaySign>\n" : "");
+ }
Csproj.output = template.
+ Replace ("@SIGNATURE@", strongNameSection).
Replace ("@PROJECTGUID@", Csproj.projectGuid).
Replace ("@DEFINES@", defines.ToString ()).
Replace ("@DISABLEDWARNINGS@", string.Join (",", (from i in ignore_warning select i.ToString ()).ToArray ())).
}
#if HAVE_GETPWNAM_R
+int helper_Mono_Posix_getpwnamuid (int mode, char *in_name, int in_uid,
+ char **account,
+ char **password,
+ int *uid,
+ int *gid,
+ char **name,
+ char **home,
+ char **shell);
+
int helper_Mono_Posix_getpwnamuid (int mode, char *in_name, int in_uid,
char **account,
char **password,
ll->first_block = ll->last_block = NULL;
}
+/*
local void free_linkedlist(linkedlist_data *ll)
{
free_datablock(ll->first_block);
ll->first_block = ll->last_block = NULL;
}
-
+*/
local int add_data_in_datablock(linkedlist_data *ll, const void *buf, uLong len)
{
gint32
Mono_Posix_Syscall_L_cuserid (void)
{
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined (__OpenBSD__)
return -1;
#else
return L_cuserid;
return func (hwndParent, hwndChildAfter, classw, window);
}
+int
+SetWindowPos (gpointer hwnd, gpointer hwndInsertAfter, int x, int y, int cx, int cy, unsigned int flags);
+
int
SetWindowPos (gpointer hwnd, gpointer hwndInsertAfter, int x, int y, int cx, int cy, unsigned int flags)
{
return 1;
}
+int
+SendMessageA (gpointer hwnd, unsigned int msg, gpointer wparam, gpointer lparam);
+
int
SendMessageA (gpointer hwnd, unsigned int msg, gpointer wparam, gpointer lparam)
{
return 0;
}
+int
+GetWindowLongA (gpointer hwnd, int a);
+
int
GetWindowLongA (gpointer hwnd, int a)
{
}
/* Remove this at some point in the future */
+gint32
+Mono_Posix_Syscall_utimes_bad (const char *filename,
+ struct Mono_Posix_Timeval *tv);
+
gint32
Mono_Posix_Syscall_utimes_bad (const char *filename,
struct Mono_Posix_Timeval *tv)
#endif
/* vararg version of syslog(3). */
+gint32
+Mono_Posix_Syscall_syslog2 (int priority, const char *format, ...);
+
gint32
Mono_Posix_Syscall_syslog2 (int priority, const char *format, ...)
{
: lstr_at(p, n) \
)
-char* MPH_INTERNAL
+char*
_mph_copy_structure_strings (
void *to, const mph_string_offset_t *to_offsets,
const void *from, const mph_string_offset_t *from_offsets,
static gint flush_internal (ZStream *stream, gboolean is_final);
static void *
-z_alloc (void *opaque, gsize nitems, gsize item_size)
+z_alloc (void *opaque, unsigned int nitems, unsigned int item_size)
{
return g_malloc0 (nitems * item_size);
}
/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.in by autoheader. */
+/* config.h.in. Generated from configure.ac by autoheader. */
/* The architecture this is running on */
#if defined(_M_IA64)