Rodrigo Kumpera | 20 Aug 05:09

Custom exception handling code in ppc

Hey guys,

Reading the ppc code for exception handling seens like we could get rid of the
CUSTOM_EXCEPTION_HANDLING define and a big chunk of ppc specific code.

I can't spot any platform specific code in in exceptions-ppc.c::arch_handle_exception
comparing to mini-exceptions.c::mono_handle_exception_internal.

Actually the later one have some userfull additions missing in the ppc code.

Do you mind taking a look if we can remove this big chunk of 90% duplicated code?

Cheers,
Rodrigo

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list
Mike V | 19 Aug 18:51

utf8 related patches. Please review.

Attached are multiple patches for utf8 functionality.  Please review.

-----------------------------
utf8_additions.patch
-----------------------------
Adds Implementations & Tests to eglib for :
-g_utf8_strlen
-g_utf8_get_char
-g_utf8_next_char

Adds tests for g_utf8_validate, which fail on eglib but pass on glib, more on this below.

--------------------------
utf8_validate.patch
--------------------------
Adds a new implementation of g_utf8_validate to eglib.  This will fix the eglib test failures above.

--------------------------
mono_utils.patch
--------------------------
Adds a function requested by Kumpera to combine the functionality of g_utf8_validate and g_utf8_strlen.

-------------------------
utf8_fulltest.c
-------------------------
A stand alone test program to test all of my functions included in these patches. It compares my function results to glib's across all valid and invalid utf8 values.  i.e. 0x00000000 to 0xFFFFFFFF.  My results match glib's across the whole range.  The program also tests the current g_utf8_validate function in eglib to show that it has a significant number of differences with glib.

Kumpera and I are not sure on the best approach for including these tests into the eglib tests.  The test is very time consuming, and I personally don't think putting it into the existing eglib test suite is the best idea.  Not to mention it doesn't exactly fit the existing eglib test suite model since it compares eglib to glib.  Any suggestions would be much appreciated.

To compile > gcc utf8_fulltest.c -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -L/usr/lib -lglib-2.0


Mike Voorhees
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <glib/gunicode.h>
#include <glib.h>

/*
  I've included this in my utf8_additions.patch file,
  its used in a couple of my methods.
*/
static const char trailingBytesForUTF8[256] = {
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,0,0
};

/*
	I've included this in my utf8_additions.patch file,
	it's used by my_g_utf8_get_char
*/
static const gulong offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
0x03C82080UL, 0xFA082080UL, 0x82082080UL };

/* This function will go under mono utilities, 
it was requested by Kumpera to speed up (Object.c) mono_string_new
This is in my mono_utils.patch */
gboolean my_utf8_validate_and_len (const gchar *source, glong* olength, const gchar** oend);

/* I've included this in my utf8_additions.patch file, adding to eglib */
#define my_g_utf8_next_char(p) p + (trailingBytesForUTF8[(guchar)(*p)] + 1)

/* I've included this in my utf8_additions.patch file, adding to eglib */
gunichar my_g_utf8_get_char (const gchar* src);

/* I've included this in my utf8_additions.patch file, adding to eglib */
glong my_g_utf8_strlen (const gchar *p, gssize max);

/* I've included this in my utf8_validate.patch file, it would replace the g_utf8_validate method
that is currently in eglib */
gboolean my_g_utf8_validate (const gchar *str, gssize max_len, const gchar **end);

/* This method was copied from mono svn eglib imlementation.  It's here to compare to glib */
gboolean eglib_g_utf8_validate (const gchar *str, gssize max_len, const gchar **end);

/* Used in this test file only */
int TestNextAndGet (const char* src, const char* end);

int
main ()
{
	TestAll();
	return 0;
}

int
TestAll()
{
	gchar buff[5] = {0, 0, 0, 0, 0};
	guint stopPoint = 0xFFFFFFFFUL;
	gboolean nextAndGet;
	guint* count = (guint*)&buff[0];

	const gchar* glibEnd;
	glong glibLen;
	gboolean glibRet;
	glong glibMaxLen;

	glong myUtilLen;
	glong myLen;
	glong myMaxLen;

	gboolean myRet;
	gboolean myUtilRet;
	gboolean eglibRet;

	const gchar* myEnd;
	const gchar* myUtilEnd;
	const gchar* eglibEnd;

	guint totalNextAndGetDiffs = 0;

	guint totalEglibValDiffs = 0;
	guint totalEglibEndDiffs = 0;

	guint totalMyUtilValDiffs = 0;
	guint totalMyUtilEndDiffs = 0;
	guint totalMyUtilLenDiffs = 0;
	guint totalMyUtilLenDiffsOnInvalids = 0;

	guint totalMyValDiffs = 0;
	guint totalMyEndDiffs = 0;
	guint totalMyLenDiffs = 0;
	guint totalMyLenDiffsOnInvalids = 0;
	guint totalMyLenDiffsOnMaxParam = 0;

	for (; *count < stopPoint; *count+=0x01) {

		glibRet = g_utf8_validate (buff, -1, &glibEnd);
		glibLen = g_utf8_strlen (buff, -1);

		myUtilRet = my_utf8_validate_and_len(buff, &myUtilLen, &myUtilEnd);

		myRet = my_g_utf8_validate (buff, -1, &myEnd);
		myLen = my_g_utf8_strlen (buff, -1);

		eglibRet = eglib_g_utf8_validate (buff, -1, &eglibEnd);

		/* Compare Validates to glib */
		if (myUtilRet != glibRet)
			totalMyUtilValDiffs++;

		if (myRet != glibRet)
			totalMyValDiffs++;

		if (eglibRet != glibRet)
			totalEglibValDiffs++;

		/* Compare end parameter in Validate to glib's */
		if (myUtilEnd != glibEnd)
			totalMyUtilEndDiffs++;

		if (myEnd != glibEnd)
			totalMyEndDiffs++;

		if (eglibEnd != glibEnd)
			totalEglibEndDiffs++;

		if (glibRet) {
			/* Compare length to glib's. */
			if (myUtilLen != glibLen)
				totalMyUtilLenDiffs++;

			if (myLen != glibLen)
				totalMyLenDiffs++;

			//If glib says its valid.  Then we can test my_g_utf8_get_char & next_char
			nextAndGet = TestNextAndGet (buff, myEnd);
			if (nextAndGet != 1)
				totalNextAndGetDiffs++;
		}
		else {
			/* Compare length to glib's. But increment a different counter for invalid strings. */
			if (myUtilLen != glibLen)
				totalMyUtilLenDiffsOnInvalids++;

			if (myLen != glibLen)
				totalMyLenDiffsOnInvalids++;
		}

	}
	printf ("---------Results------------\n");
	printf ("(my_utf8_validate_and_len)\tValidate Diffs = %i\n", totalMyUtilValDiffs);
	printf ("(my_utf8_validate_and_len)\tEnd Diffs = %i\n", totalMyUtilEndDiffs);
	printf ("(my_utf8_validate_and_len)\tLength Diffs On Valid Strings = %i\n", totalMyUtilLenDiffs);
	printf ("(my_utf8_validate_and_len)\tLength Diffs On Invalid Strings = %i\n", totalMyUtilLenDiffsOnInvalids);

	printf ("(my_g_utf8_validate)\t\tValidate Diffs = %i\n", totalMyValDiffs);
	printf ("(my_g_utf8_validate)\t\tEnd Diffs = %i\n", totalMyEndDiffs);
	printf ("(my_g_utf8_strlen)\t\tLength Diffs On Valid Strings = %i\n", totalMyLenDiffs);
	printf ("(my_g_utf8_strlen)\t\tLength Diffs On Invalid Strings = %i\n", totalMyUtilLenDiffsOnInvalids);

	printf ("(eglib_g_utf8_validate)\t\tValidate Diffs = %i\n", totalEglibValDiffs);
	printf ("(eglib_g_utf8_validate)\t\tEnd Diffs = %i\n", totalEglibEndDiffs);

	printf ("(my_g_utf8_next_char) & (my_g_utf8_get_char)\tDiffs = %i\n", totalNextAndGetDiffs);

	return 1;
}

int
TestNextAndGet (const char* src, const char* end)
{
	int retval = 1;
	int retget = 1;
	guchar* ptr = (guchar*) src;
	guchar* ptrGlib = (guchar*) src;
	guchar* uend = (guchar*) end;
	gunichar val_utf16;
	gunichar val_utf16Glib;

	while (ptrGlib < uend)
	{
		val_utf16 = my_g_utf8_get_char (ptr);
		val_utf16Glib = g_utf8_get_char (ptrGlib);
		ptr = my_g_utf8_next_char (ptr);
		ptrGlib = g_utf8_next_char (ptrGlib);

		if (ptr != ptrGlib)
			retval = FALSE;
		if (val_utf16 != val_utf16Glib)
			retget = FALSE;
	}
	if(ptr != uend || ptrGlib != uend)
		retval = FALSE;

	if(!retval && !retget)
		return 0;
	if(retval && !retget)
		return -1;
	if(!retval && retget)
		return -2;
	return 1;
}

/**
 * g_utf8_get_char
 * @src: Pointer to UTF-8 encoded character.
 *
 * Return value: UTF-16 value of @src
 **/
gunichar
my_g_utf8_get_char (const gchar* src)
{
	gunichar ch = 0;
	guchar* ptr = (guchar*) src;
	gushort extraBytesToRead = trailingBytesForUTF8 [*ptr];

	switch (extraBytesToRead) {
	case 5: ch += *ptr++; ch <<= 6; /* remember, illegal UTF-8 */
	case 4: ch += *ptr++; ch <<= 6; /* remember, illegal UTF-8 */
	case 3: ch += *ptr++; ch <<= 6;
	case 2: ch += *ptr++; ch <<= 6;
	case 1: ch += *ptr++; ch <<= 6;
	case 0: ch += *ptr;
	}
	ch -= offsetsFromUTF8 [extraBytesToRead];
	return ch;
}

/**
 * g_utf8_validate_and_len
 * @source: Pointer to putative UTF-8 encoded string.
 *
 * Checks @source for being valid UTF-8. @utf is assumed to be
 * null-terminated.
 *
 * Return value: true if @source is valid.
 * oEnd : will equal the null terminator at the end of the string if valid.
 *    if not valid, it will equal the first charater of the invalid sequence.
 * oLengh : will equal the length to @oEnd
 **/
gboolean
my_utf8_validate_and_len (const gchar *source, glong* oLength, const gchar** oEnd)
{
	gboolean retVal = TRUE;
	gboolean lastRet = TRUE;
	guchar* ptr = (guchar*) source;
	guchar* srcPtr;
	guint length;
	guchar a;
	*oLength = 0;
	while (*ptr != 0) {
		length = trailingBytesForUTF8 [*ptr] + 1;
		srcPtr = (guchar*) ptr + length;
		switch (length) {
		default: retVal = FALSE;
		/* Everything else falls through when "TRUE"... */
		case 4: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
				if ((a == (guchar) 0xBF || a == (guchar) 0xBE) && *(srcPtr-1) == (guchar) 0xBF) {
				if (*(srcPtr-2) == (guchar) 0x8F || *(srcPtr-2) == (guchar) 0x9F ||
					*(srcPtr-2) == (guchar) 0xAF || *(srcPtr-2) == (guchar) 0xBF)
					retVal = FALSE;
				}
		case 3: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
		case 2: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;

		switch (*ptr) {
		/* no fall-through in this inner switch */
		case 0xE0: if (a < (guchar) 0xA0) retVal = FALSE; break;
		case 0xED: if (a > (guchar) 0x9F) retVal = FALSE; break;
		case 0xEF: if (a == (guchar)0xB7 && (*(srcPtr+1) > (guchar) 0x8F && *(srcPtr+1) < 0xB0)) retVal = FALSE;
				   if (a == (guchar)0xBF && (*(srcPtr+1) == (guchar) 0xBE || *(srcPtr+1) == 0xBF)) retVal = FALSE; break;
		case 0xF0: if (a < (guchar) 0x90) retVal = FALSE; break;
		case 0xF4: if (a > (guchar) 0x8F) retVal = FALSE; break;
		default:   if (a < (guchar) 0x80) retVal = FALSE;
		}

		case 1: if (*ptr >= (guchar ) 0x80 && *ptr < (guchar) 0xC2) retVal = FALSE;
		}
		if (*ptr > (guchar) 0xF4)
			retVal = FALSE;
		//If the string is invalid, set the end to the invalid byte.
		if (!retVal && lastRet) {
			if (oEnd != NULL)
				*oEnd = ptr;
			lastRet = FALSE;
		}
		ptr += length;
		(*oLength)++;
	}
	if (retVal && oEnd != NULL)
		*oEnd = ptr;
	return retVal;
}
gboolean
my_g_utf8_validate (const gchar *str, gssize max_len, const gchar **end)
{
	glong byteCount = 0;
	gboolean retVal = TRUE;
	gboolean lastRet = TRUE;
	guchar* ptr = (guchar*) str;
	guchar a;
	guint length;
	guchar* srcPtr;
	if (max_len == 0)
		return 0;
	else if (max_len < 0)
		byteCount = max_len;
	while (*ptr != 0 && byteCount <= max_len) {
		length = trailingBytesForUTF8 [*ptr] + 1;
		srcPtr = (guchar*) ptr + length;
		switch (length) {
		default: retVal = FALSE;
		/* Everything else falls through when "TRUE"... */
		case 4: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
				if ((a == (guchar) 0xBF || a == (guchar) 0xBE) && *(srcPtr-1) == (guchar) 0xBF) {
				if (*(srcPtr-2) == (guchar) 0x8F || *(srcPtr-2) == (guchar) 0x9F ||
					*(srcPtr-2) == (guchar) 0xAF || *(srcPtr-2) == (guchar) 0xBF)
					retVal = FALSE;
				}
		case 3: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
		case 2: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;

		switch (*ptr) {
		/* no fall-through in this inner switch */
		case 0xE0: if (a < (guchar) 0xA0) retVal = FALSE; break;
		case 0xED: if (a > (guchar) 0x9F) retVal = FALSE; break;
		case 0xEF: if (a == (guchar)0xB7 && (*(srcPtr+1) > (guchar) 0x8F && *(srcPtr+1) < 0xB0)) retVal = FALSE;
				   if (a == (guchar)0xBF && (*(srcPtr+1) == (guchar) 0xBE || *(srcPtr+1) == 0xBF)) retVal = FALSE; break;
		case 0xF0: if (a < (guchar) 0x90) retVal = FALSE; break;
		case 0xF4: if (a > (guchar) 0x8F) retVal = FALSE; break;
		default:   if (a < (guchar) 0x80) retVal = FALSE;
		}

		case 1: if (*ptr >= (guchar ) 0x80 && *ptr < (guchar) 0xC2) retVal = FALSE;
		}
		if (*ptr > (guchar) 0xF4)
			retVal = FALSE;
		//If the string is invalid, set the end to the invalid byte.
		if (!retVal && lastRet) {
			if (end != NULL)
				*end = ptr;
			lastRet = FALSE;
		}
		ptr += length;
		if(max_len > 0)
			byteCount += length;
	}
	if (retVal && end != NULL)
		*end = ptr;
	return retVal;
}

glong
my_g_utf8_strlen (const gchar *p, gssize max)
{
	glong byteCount = 0;
	guchar* ptr = (guchar*) p;
	glong length = 0;
	if (max == 0)
		return 0;
	else if (max < 0)
		byteCount = max;
	while (*ptr != 0 && byteCount <= max) {
		guint cLen = trailingBytesForUTF8 [*ptr] + 1;
		if (max > 0 && (byteCount + cLen) > max)
			return length;
		ptr += cLen;
		length++;
		if (max > 0)
			byteCount += cLen;
	}
	return length;
}

gboolean
eglib_g_utf8_validate (const gchar *utf, gssize max_len, const gchar **end)
{
	int ix;
	
	g_return_val_if_fail (utf != NULL, FALSE);

	if (max_len == -1)
		max_len = strlen (utf);
	
	/*
	 * utf is a string of 1, 2, 3 or 4 bytes.  The valid strings
	 * are as follows (in "bit format"):
	 *    0xxxxxxx                                      valid 1-byte
	 *    110xxxxx 10xxxxxx                             valid 2-byte
	 *    1110xxxx 10xxxxxx 10xxxxxx                    valid 3-byte
	 *    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx           valid 4-byte
	 */
	for (ix = 0; ix < max_len;) {      /* string is 0-terminated */
		unsigned char c;
		
		c = utf[ix];
		if ((c & 0x80) == 0x00) {	/* 1-byte code, starts with 10 */
			ix++;
		} else if ((c & 0xe0) == 0xc0) {/* 2-byte code, starts with 110 */
			if (((ix+1) >= max_len) || (utf[ix+1] & 0xc0 ) != 0x80){
				if (end != NULL)
					*end = &utf [ix];
				return FALSE;
			}
			ix += 2;
		} else if ((c & 0xf0) == 0xe0) {/* 3-byte code, starts with 1110 */
			if (((ix + 2) >= max_len) || 
			    ((utf[ix+1] & 0xc0) != 0x80) ||
			    ((utf[ix+2] & 0xc0) != 0x80)){
				if (end != NULL)
					*end = &utf [ix];
				return FALSE;
			}
			ix += 3;
		} else if ((c & 0xf8) == 0xf0) {/* 4-byte code, starts with 11110 */
			if (((ix + 3) >= max_len) ||
			    ((utf[ix+1] & 0xc0) != 0x80) ||
			    ((utf[ix+2] & 0xc0) != 0x80) ||
			    ((utf[ix+3] & 0xc0) != 0x80)){
				if (end != NULL)
					*end = &utf [ix];
				return FALSE;
			}
			ix += 4;
		} else {/* unknown encoding */
			if (end != NULL)
				*end = &utf [ix];
			return FALSE;
		}
	}
	
	return TRUE;
}
Attachment (utf8_validate.patch): application/octet-stream, 3919 bytes
Attachment (utf8_additions.patch): application/octet-stream, 9 KiB
Attachment (mono_utils.patch): application/octet-stream, 3797 bytes
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list
Jb Evain | 19 Aug 12:44

WCF in Moonlight

Hey all,

Silverlight 2.0b2 contains three assemblies that we do not provide yet:

* System.ComponentModel
* System.ComponentModel.Web
* System.Runtime.Serialization

Currently, we have parts of those assemblies implemented in the olive
module. We could either:

1) depend on olive, and tune the assemblies there.
2) move those assemblies to the mcs module, and tune them there.

According to the discussion we had on IRC, it seems that 1) is a no
go, as we don't want to release olive, and we rather avoid to add
another dependency to moon.

How to do 2) properly then? Should we simply move those assemblies to
mcs, and develop there, or continue to develop in olive, and merge
changes when we feel confident into mcs? I'd rather simply move them,
but then we would have unstable assemblies in mcs. Should we apply the
same policy we apply for Cecil, that is not exposing it to the
compiler without using a pkg?

Also, Atsushi, how complete is our implementation wrt what SL2 ships?

--

-- 
Jb Evain  <jb <at> nurv.fr>
Ray Wang | 19 Aug 10:06

does mono runtime fully implemented?

hello folks

i have a very simple script to test WebBrowser control in System.Windows.Forms
but when i instancelize a class to an object. it dumps errors. 

does mono runtime fully implemented? or there is a bug?
the attachments are a error message and a sample

Ray

Attachment (error.err): application/octet-stream, 6247 bytes
Attachment (webbrowser.py): application/octet-stream, 1699 bytes
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list
Thomas Wiest | 18 Aug 23:26

Mono 2.0 Preview 2 is out!!

Hey Everyone,

We've just released Mono 2.0 Preview 2 today! Please help us out by
giving it a try with your applications.

As always, you can get the preview releases here:
http://mono.ximian.com/monobuild/preview/download-preview/

Please report any bugs that you may find using our Bugs page, AND reply
to this thread with the bug numbers so we can track them!
http://www.mono-project.com/Bugs

You can see the bugs we're tracking for Mono 2.0 here:
https://bugzilla.novell.com/buglist.cgi?bug_file_loc_type=allwordssubstr&bug_file_loc=http%3A%2F%2Fwww.go-mono.com%2Farchive%2F2.0%2F&order=bugs.bug_status%20

The earlier you file the bugs and reply to this message, the more likely
your bugs will get fixed.

Special attention is given to regressions, so if you can tell us a
version of Mono where the bug worked and you tag the summary of the bug
with [Regression], then it is much more likely your bug will get fixed.

Please help the Mono team to make 2.0 the best ever.

Thanks again!

Mono QA
Paul | 18 Aug 21:14

moonlight source in mono-2.0

Hi,

As part of the regular review of updated packages within fedora, we've
found that the current 2.0 preview has the ability to build the
moonlight assemblies (or not depending on the configure option).

Moonlight is a forbidden item in Fedora, so I've built it with the
configure script saying no thanks to moonlight. However, if the code is
in the mono tarballs, it has to be removed when it's packaged up.

Looking at the source, I can't see anything glaringly obvious, but from
memory, its smcs, System.Net and anything 2.1 in gac. Can someone
confirm this?

Thanks

TTFN

Paul
--

-- 
Sie können mich aufreizen und wirklich heiß machen!
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list
Charlie Poole | 18 Aug 19:18

Bug? Or is it Me?

Hi All,

With NUnit 2.4.8 running on Mono 2.0 I see some behavior that
puzzles me. It may be due to changes in NUnit or Mono or both.

I'm working to isolate this better, but I'd like to know whether
it rings any bells before I spend too much time...

An exception is thrown in the call to AppDomain.CreateDomain
because a particular assembly can't be found. Apparently,
the assembly is being looked for in the originating domain.
I verified this by copying the assembly to NUnit's AppBase.

There seems to be no reason for a CreateDomain call to be
looking for /any/ assemblies. I haven't yet got the domain
back, so I haven't tried to load anything.

I do have some suspicion of the stack trace I'm getting, so
it is possible that the error is really occuring in the 
following call, which does load an assembly that references
the assembly in question. However, I have not attempted
to serialize the assembly back to the first domain - a
typical mistake people make - and I don't have an
AppDomainManager that could be doing it. Can anyone
suggest directions for further investigation?

Charlie
Smacky311 | 15 Aug 19:55

Setting up mysql.data adapter


I need to add a reference to MySql.Data.dll so I can use it in my C# program.
I tried simply searching my computer for this dll w/ no success.
I'm using Ubuntu.
I installed libmysql5.0-cil package.
I am trying to follow these directions: http://www.mono-project.com/MySQL
I assume I need to add MySQL.data.dll to the GAC as per the step "Installing
MySql.Data.dll in the GAC: "

--

-- 
View this message in context: http://www.nabble.com/Setting-up-mysql.data-adapter-tp19003010p19003010.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
Simon Hengel | 15 Aug 09:15

Bug: Generic Function that returns a Delegate from \-Expression

Hello List,
I experienced a bug with mono 1.9.1 x64/Linux. Compilation fails (it works 
with MS csc 3.5.21022.8). Source and gmcs output is attached.

$ ./gmcs --version
Mono C# compiler version 1.9.1.0

$ gcc --version
gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

Regards,
Simon Hengel
using System;
using System.Linq;
using System.Collections.Generic;

static class CurryBug
{	// curry for function of arity 3
	//
	// this compiles
	public static Func<int,Func<int, Func<int,int>>>
		curry_for_int_func (this Func<int,int,int,int> f)
	{
		return arg1 => arg2 => arg3 => f(arg1 , arg2 , arg3);
	}

	// but his does not
	static Func<A,Func<B,Func<C,D>>> curry<A,B,C,D> (this Func<A,B,C,D> f)
	{
		return arg1 => arg2 => arg3 => f(arg1, arg2, arg3);
	}

	static void Main ()
	{
		Func<int,int,int,int> plus = (x, y, z) => x + y + z;

		Console.WriteLine(plus.curry()(7)(23)(47));
	}
}
Internal compiler error at curry_bug.cs(16,42):: exception caught while emitting MethodBuilder [CurryBug::curry]

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
  at Mono.CSharp.ConstructedType..ctor (System.Type t, Mono.CSharp.TypeParameter[] type_params,
Location l) [0x00000] 
  at Mono.CSharp.TypeContainer.DoResolveType () [0x00000] 
  at Mono.CSharp.TypeContainer.ResolveType () [0x00000] 
  at Mono.CSharp.TypeContainer.ResolveType () [0x00000] 
  at Mono.CSharp.RootScopeInfo.LinkScopes () [0x00000] 
  at Mono.CSharp.ToplevelBlock.CompleteContexts (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.EmitContext.ResolveTopBlock (Mono.CSharp.EmitContext anonymous_method_host,
Mono.CSharp.ToplevelBlock block, Mono.CSharp.Parameters ip, IMethodData md, System.Boolean&
unreachable) [0x00000] 
  at Mono.CSharp.EmitContext.EmitTopBlock (IMethodData md, Mono.CSharp.ToplevelBlock block)
[0x00000] 
  at Mono.CSharp.MethodData.Emit (Mono.CSharp.DeclSpace parent) [0x00000] 
  at Mono.CSharp.Method.Emit () [0x00000] 
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list
philly_muscle | 15 Aug 01:51

mono-curses = Can I join the project? Library needs some work!


I was wondering...    I am building a home-finance application for mono [so I
can access it anywhere via PuTTY on win machines].    There's been quite a
bit of work done already on mono-curses for a rudimentary widget and dialog
library, but it could use a lot more:

- Text editor widget
- Calendar control
- Time picking control
- reg-expr powered edit fields
- Menu bar

I have written my own changes to mono API code in the past to do things I
want to do, but in this particular case I would like to contribute them back
up the chain.

Is there a "Monodeveloper For Dummies" guide for new developers who want to
join a project and how to get on a particular project such as mono-curses?
--

-- 
View this message in context: http://www.nabble.com/mono-curses-%3D-Can-I-join-the-project----Library-needs-some-work%21-tp18991636p18991636.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
Paul | 18 Aug 12:33

XIM and mono-winforms-2.0

Hi,

What do I need to do to get XIM working with winforms? I've built
2.0preview1 (from the tarballs) and that seems fine. When I run a
winform app from a terminal, I get a line "Can't find XIM" (or something
similar) which then causes any input to get messed up (press 7 and
that's the only thing that appears in any text box irrespective of what
you type).

I have canna installed and running, but still no go. Same problem.

It's important that this gets fixed otherwise there are going to be a
lot of winforms apps running on all platforms which are just bust.

TTFN

Paul
--

-- 
Sie können mich aufreizen und wirklich heiß machen!
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list <at> lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Gmane